AccesON pentru PHP
Același meniu de accesibilitate ca plugin-ul WordPress, pe orice site PHP: Laravel, Symfony, CodeIgniter, Slim, Yii, PHP simplu sau o platformă proprie.
assets/, activezi cheia o dată, pui head() în <head> și widget() înainte de </body>. Cinci minute.Librăria e o singură clasă PHP, fără dependențe. Aduce toate cele 40 de funcții, în 9 limbi, cu același server de licențe ca plugin-ul. La comandă alegi „Alt site PHP”, iar după plată descarci arhiva din email sau din contul tău.
1. Cerințe
- PHP 8.0 sau mai nou, cu extensia
json. curlsauallow_url_fopen = On, pentru verificarea licenței.- Conexiune de ieșire HTTPS spre
licente.artonmedia.ro(portul 443). - O cheie AccesON (
ACC-XXXX-XXXX-XXXX-XXXX), din emailul de la comandă.
2. Ce conține arhiva
acceson-php/
├── src/AccesON.php librăria (o singură clasă)
├── assets/ fișierele widgetului — se publică la o adresă publică
│ ├── acceson.js
│ ├── acceson.css
│ └── acceson-mark-white.svg
├── languages/ EN, HU, DE, FR, ES, IT, UK, AR (sursa e româna)
├── exemple/ PHP simplu, cron, Laravel, Symfony, CodeIgniter
├── DOCUMENTATIE.md · DOCUMENTATION.md
└── LICENTA.txt
3. Instalare
- Copiază folderulPune
acceson-php/în proiect, în afara folderului public, de exemplu înlib/acceson/. - Publică fișierele widgetuluiCopiază conținutul lui
assets/într-un folder public, de exemplupublic/acceson/→https://site.ro/acceson/. - Creează obiectul
Cu Composer:require __DIR__ . '/lib/acceson/src/AccesON.php'; use ArtonMedia\AccesON\AccesON; $acceson = new AccesON([ 'site' => 'https://site.ro', // adresa site-ului licențiat 'assets_url' => '/acceson/', // unde ai publicat assets/ 'store' => __DIR__ . '/storage/acceson-licenta.json', // în afara folderului public 'statement' => '/declaratie-de-accesibilitate', // opțional ]);"ArtonMedia\\AccesON\\": "lib/acceson/src/"înautoload.psr-4, apoicomposer dump-autoload. - Activează licența, o singură dată
Rulează codul o dată, din consolă sau dintr-un script (veziif ($acceson->activate('ACC-XXXX-XXXX-XXXX-XXXX')) { echo 'Licență activă'; } else { echo $acceson->license()['message']; // de ce nu s-a activat }exemple/cron.php:php cron.php ACC-…). Starea se salvează înstore, iar meniul apare singur. Nu lăsa cheia în cod public. - Afișează meniul
Cât timp licența nu e activă, ambele întorc text gol și pagina rămâne neschimbată.<head> … <?= $acceson->head() ?> </head> <body> … <?= $acceson->widget() ?> </body> - Verificarea zilnică (cron)
17 4 * * * php /cale/spre/site/lib/acceson/exemple/cron.php >/dev/null 2>&1validate()întreabă serverul de licențe o dată la 7 zile; în celelalte zile nu face nicio cerere.
4. Opțiuni
| Opțiune | Implicit | Ce face |
|---|---|---|
site | obligatoriu | Adresa site-ului pe care e activată licența. |
assets_url | assets/ | Adresa publică a fișierelor widgetului. |
store | folderul temporar | Fișierul JSON cu starea licenței sau ['load' => fn(): array, 'save' => fn(array $l): void] pentru bază de date sau cache. |
locale | ro_RO | ro, en, hu, de, fr, es, it, uk, ar (cu sau fără regiune: de_DE, en-US). Araba se scrie de la dreapta la stânga și are tastatură arabă. |
accent, accent2 | #4F46E5, #06B6D4 | Culorile butonului și ale antetului panoului, în degrade. |
position | left | left sau right. |
offset_x, offset_y | 24, 24 | Distanța față de margine și de jos, în pixeli. |
size, size_mobile | 56, 46 | Mărimea butonului pe desktop și pe telefon (sub 560 px). |
font | inter | inter (din Bunny Fonts, compatibil GDPR) sau site (fontul paginii, fără nicio cerere externă). |
statement | — | Adresa declarației de accesibilitate, legată în subsolul panoului. |
disabled | [] | Funcțiile ascunse, de exemplu ['voice-nav', 'virtual-keyboard']. Lista completă: $acceson->modules(). |
nonce | — | Nonce-ul Content-Security-Policy pentru <style> și <script>. |
http | curl / streams | fn(string $url, string $json): ?string: clientul HTTP al framework-ului (pentru proxy și pentru teste). |
platform | PHP x.y | Platforma raportată la activare, de exemplu Laravel 13. |
5. Metode
| Metodă | Ce face |
|---|---|
activate($cheie) | Activează cheia pe site. Întoarce true dacă licența e validă. |
deactivate() | Eliberează licența de pe acest site, ca s-o muți pe altul. |
validate($acum = false) | Verifică licența la server, o dată la 7 zile (sau acum, cu true). |
isActive() | Licența e validă, neexpirată, sau în cele 14 zile de grație. |
license() | Starea licenței: key, status, expires, client, message, last_check, grace_until. |
head() / widget() | Stilul (în <head>) / butonul, panoul și scriptul (înainte de </body>). |
markup() / script() | Părțile lui widget(), separat. |
modules() | cheie => „Secțiune · Funcție”, pentru o listă de bifat în panoul tău de administrare. |
sections(), icons(), t($text) | Catalogul complet și traducerea unui text al panoului. |
6. Licența
- O cheie e valabilă pentru numărul de site-uri scris pe licență (de obicei 1), fără termen.
- Mutarea pe alt domeniu:
deactivate()pe site-ul vechi, apoiactivate()pe cel nou. Sau ne scrii și o eliberăm noi. - Dacă serverul de licențe nu răspunde (pană de rețea), meniul rămâne pornit încă 14 zile.
- Serverul primește doar adresa site-ului, cheia, versiunea librăriei și platforma. Despre vizitatori nu primește nimic.
7. Integrări
exemple/laravel/: clasa Accesibilitate cu starea în cache sau în baza de date, clientul Http (merge cu Http::fake()) și comanda php artisan acceson:licenta. În layout: {{ \App\Site\Accesibilitate::cap() }} și ::corp().
exemple/symfony.md: serviciul, extensia Twig ({{ acceson_head() }}, {{ acceson_widget() }}) și comanda de consolă.
exemple/codeigniter.md: helper-ul acceson(), layout-ul și comanda Spark.
exemple/simplu/index.php: o pagină completă, cu activare și afișare.
Pe WordPress folosește plugin-ul AccesON: are panou de setări, generator de declarație de accesibilitate și actualizări din admin. Vezi tutorialul WordPress.
8. Așezarea lângă alte butoane
Dacă site-ul are deja un buton fix, de exemplu „înapoi sus” în dreapta jos, pune AccesON în oglindă, cu aceeași mărime:
'position' => 'left', 'offset_x' => 20, 'offset_y' => 20, 'size' => 52, 'size_mobile' => 48,
Bannerele fixe, de exemplu cel de cookie-uri, pot urca deasupra butonului doar când acesta există:
body:has(#acceson-root) .banner-cookie { bottom: 84px }
@media (max-width: 767px) {
#acceson-root { --acceson-size: 48px; --acceson-x: 14px; --acceson-y: 14px }
}
9. Confidențialitate și cookie-uri
AccesON nu pune cookie-uri și nu trimite nimic despre vizitatori. Alegerile vizitatorului se păstrează în localStorage (acceson-state-v2), doar în browserul lui. Cu font => 'site' nu se face nicio cerere externă.
10. Depanare
| Problema | Ce verifici |
|---|---|
| Butonul nu apare | var_dump($acceson->license()): status trebuie să fie valid. Apoi deschide …/acceson.js la adresa din assets_url. Golește cache-ul paginii. |
| „Nu am putut contacta serverul de licențe” | Găzduirea blochează conexiunile de ieșire. Cere deschiderea HTTPS spre licente.artonmedia.ro. |
| „Cheia e deja folosită pe numărul maxim de site-uri” | Cheia e activă pe alt domeniu: rulează deactivate() acolo sau scrie-ne. |
| Erori CSP în consolă | Dă nonce librăriei sau permite adresa din assets_url în script-src și style-src. |
| Panoul stă sub alte elemente | #acceson-root are z-index: 2147483000. Caută un transform pe body sau pe un părinte. |
11. Actualizări și suport
Descarci arhiva nouă din contul tău și înlocuiești src/, assets/ și languages/. Licența rămâne activă, nu trebuie activată din nou.
Ajutor la instalare: office@artonmedia.ro · 0748 910 569.