AccesON

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.

Pe scurt: copiezi folderul, publici 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

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

  1. Copiază folderulPune acceson-php/ în proiect, în afara folderului public, de exemplu în lib/acceson/.
  2. Publică fișierele widgetuluiCopiază conținutul lui assets/ într-un folder public, de exemplu public/acceson/ → https://site.ro/acceson/.
  3. Creează obiectul
    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
    ]);
    Cu Composer: "ArtonMedia\\AccesON\\": "lib/acceson/src/" în autoload.psr-4, apoi composer dump-autoload.
  4. Activează licența, o singură dată
    if ($acceson->activate('ACC-XXXX-XXXX-XXXX-XXXX')) {
        echo 'Licență activă';
    } else {
        echo $acceson->license()['message'];   // de ce nu s-a activat
    }
    Rulează codul o dată, din consolă sau dintr-un script (vezi exemple/cron.php: php cron.php ACC-…). Starea se salvează în store, iar meniul apare singur. Nu lăsa cheia în cod public.
  5. Afișează meniul
    <head>
        …
        <?= $acceson->head() ?>
    </head>
    <body>
        …
        <?= $acceson->widget() ?>
    </body>
    Cât timp licența nu e activă, ambele întorc text gol și pagina rămâne neschimbată.
  6. Verificarea zilnică (cron)
    17 4 * * * php /cale/spre/site/lib/acceson/exemple/cron.php >/dev/null 2>&1
    validate() întreabă serverul de licențe o dată la 7 zile; în celelalte zile nu face nicio cerere.

4. Opțiuni

OpțiuneImplicitCe face
siteobligatoriuAdresa site-ului pe care e activată licența.
assets_urlassets/Adresa publică a fișierelor widgetului.
storefolderul temporarFișierul JSON cu starea licenței sau ['load' => fn(): array, 'save' => fn(array $l): void] pentru bază de date sau cache.
localero_ROro, 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, #06B6D4Culorile butonului și ale antetului panoului, în degrade.
positionleftleft sau right.
offset_x, offset_y24, 24Distanța față de margine și de jos, în pixeli.
size, size_mobile56, 46Mărimea butonului pe desktop și pe telefon (sub 560 px).
fontinterinter (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>.
httpcurl / streamsfn(string $url, string $json): ?string: clientul HTTP al framework-ului (pentru proxy și pentru teste).
platformPHP x.yPlatforma 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

7. Integrări

Laravel

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().

Symfony

exemple/symfony.md: serviciul, extensia Twig ({{ acceson_head() }}, {{ acceson_widget() }}) și comanda de consolă.

CodeIgniter 4

exemple/codeigniter.md: helper-ul acceson(), layout-ul și comanda Spark.

PHP simplu

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ă.

Pentru politica de cookie-uri: „Ce porniți din meniul de accesibilitate AccesON se păstrează în memoria browserului (localStorage), doar pe dispozitivul dumneavoastră.”

10. Depanare

ProblemaCe verifici
Butonul nu aparevar_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.

Cumpără licența — 99 lei