Crearea unei componente pentru joomla 3. Categorii și materiale - ce sunt și cum să le folosești

Este important să vă asigurați că vă pregătiți corespunzător pentru dezvoltare și există mai multe aspecte ale scrierii componentelor Joomla 3.0 care ar trebui planificate încă de la început. Acesta este primul dintr-o serie de articole despre dezvoltarea extensiilor, fără de care este imposibil de înțeles procesul de planificare a structurii de lucru pe extensii. Iată pașii pe care îi considerăm cei mai eficienți în începerea pregătirii pentru un proces de dezvoltare a extensiilor de succes.

Pasul 0: Faceți cafea

La începutul oricărei lucrări, nu strica să ai o ceașcă cu ceva la îndemână care te va menține în formă bună și concentrat pe muncă. Organizând o rutină în jurul nostru, ne pregătim corpul și creierul pentru muncă. Când începeți să scrieți cod, este important să vă simțiți treaz și alert. Odată ce tu și băutura ta sunteți în poziția de pornire, puteți începe.

Pasul 1: Blocnotes galben și orice stilou

Aproape toate proiectele noastre provin din caiete galbene. S-ar putea să-ți placă o altă culoare de hârtie, asta depinde de tine. Din mai multe motive, recomand galbenul, dar nu este obligatoriu. De asemenea, recomand un pix mai degrabă decât un creion. Creioanele se sparg, ideile se scurg, liniile se estompează, iar scopul aici nu este să desenezi un plan perfect, ci mai degrabă să faci brainstorming și să mâzgălești idei pe hârtie. Folosirea unui stilou te obligă să gândești, iar folosirea unui creion în sine implică capacitatea de a șterge și rescrie ceea ce ai scris.

Pasul 2: Stabiliți-vă nevoile, public țintăși probleme de rezolvat

Așadar, stai cu o băutură fierbinte, un bloc de note și un pix, gata să faci următorul pas. Începeți să vă scrieți ideile. Să începem cu problema pe care vrei să o rezolvi, de ce scrii această extensie, care sunt ideile principale pe care te vei concentra și ce va face extensia ta de fapt. De asemenea, ar fi bine să facem puțină cercetare în această etapă. Există componenta dvs. pe? acest moment? Există cineva care a lansat un produs similar și poate concura? Cât de mare este publicul țintă pentru componenta pe care doriți să o scrieți? Este important să ținem cont de aceste aspecte, pentru că Există câteva măsuri de precauție asupra cărora am dori să vă atragem atenția.

  • În primul rând, nu scrie Stăpânul Inelelor (o componentă pentru a gestiona totul, alta pentru a aduce totul împreună...), identifică problema principală pe care vrei să o rezolvi și concentrează-te pe asta. Acest lucru vă va ușura viața și marketingul.
  • În al doilea rând, asigură-te că publicul tău țintă există. Nu presupuneți că, dacă aveți nevoie de o componentă, toți ceilalți vor avea nevoie brusc de ea. Fii realist în previziunile tale și asta îți va crește încrederea.
Pasul 3: Descrieți procesul de dezvoltare a extensiei/aplicației

Odată ce ți-ai schițat ideile, ai identificat publicul țintă și problemele pe care urmează să le rezolvi, următorul pas este să-ți descrii planul de dezvoltare. Este recomandabil să faceți acest lucru împreună cu pasul anterior. Notați controlerele, instrumentele și modelele de care veți avea nevoie. Acum este probabil un moment bun pentru a face un pas înapoi și a discuta primul pas important în dezvoltarea unei componente Joomla!. 3.0, sistem model-view-controller (MVK).

Joomla implementează un cadru MVC destul de standard, dar este, totuși, diferit de cadrul MVC folosit de alte platforme. Joomla tratează fiecare sarcină ca pe un controler. Aceasta înseamnă că veți avea nevoie de controlere numite „salvare”, „adăugare”, „editare”, „șterge”, etc. Fiecare controlor este responsabil pentru o singură sarcină. La prima vedere poate părea că vei avea o cantitate mare fișiere, dar în cele din urmă vor asigura funcționarea intuitivă a componentei și, de asemenea, vor putea executa mai multe comenzi simultan.

Modelele din Joomla realizează manipularea datelor. Aici toată logica și codul sunt utile. Modelele sunt dezvoltate în principal pentru a reprezenta elementele și caracteristicile cheie ale unei componente. În interiorul modelului veți avea o listă de funcții legate de un anumit obiect (întorsătură, copiere, salvare etc...).

În sfârșit, aveți fișierele de vizualizare. Joomla! conține o metodologie standard pentru structura creării unor astfel de fișiere. Deocamdată este suficient să menționăm că urmează o anumită structură în modele cu anumite sarcini pentru fiecare obiect component.

Aceasta ar trebui să ofere o scurtă reprezentare (poate simplificată) a modului în care Joomla! și, sperăm, suficient pentru a vă permite să scrieți procesul de dezvoltare și să treceți la pasul următor.

Pasul 4: Organizarea structurii datelor și a schemei de tabel

Deși există multe modalități de a începe dezvoltarea, am considerat că următorul pas este cel mai consistent. Odată ce am notat toate punctele cheie și am dezvoltat o foaie de parcurs de dezvoltare, trecem la crearea unei structuri de date și a unui aspect de tabel.

În această etapă, vom lua fiecare model cu toate funcțiile sale și îl vom nota în acele câmpuri în care vom folosi acest model în tabel. Când creați majoritatea componentelor, veți avea nevoie de un tabel de asociere model-date. Există mai multe câmpuri standard în tabel care sunt utilizate atunci când scrieți o componentă. Odată ce scriem tabelul de structură, vom respecta și anumite reguli. De exemplu, dacă intenționăm să asociem un obiect cu o anumită categorie, vom include id-ul categoriei în tabelul de obiecte și vom introduce și id-ul de utilizator dacă dorim ca articolele să fie asociate cu utilizatorul. Acest lucru va ajuta mai târziu când luăm tabelele scrise manual și începem să le mutăm în constructorul SQL. Uneori vom conecta tabele cu linii pentru a face mai ușor de înțeles cum sunt interconectate.

Pasul 5: Configurați o metodă pentru a urmări actualizările (GitHub)

Acest pas nu este necesar, dar în timp nu va strica să configurați urmărirea pentru actualizările versiunii platformei. Preferăm GitHub din mai multe motive. Dacă sunteți nou în GitHub, puteți utiliza depozite publice (gratuite) sau private (cu costuri reduse), puteți urmări modificările și puteți implementa copiere securizată toate datele tale acumulate. În plus, acest lucru vă permite să distribuiți codificarea între mai multe persoane fără să vă faceți griji că acestea interferează cu munca celuilalt. Nu trebuie să utilizați GitHub, nu este singura opțiune, dar găsirea unui loc în care să vă stocați codul în siguranță pentru o posibilă recuperare, actualizare și protecție este esențială.

Pasul 6: Configurați mediul local

Ultimul pas din acest articol introductiv va fi configurarea mediului local. Pentru a rezuma, putem spune cu siguranță că există multe modalități de a scrie cod aici și în loc să le descriem, vom spune pur și simplu că acesta este momentul în care ar trebui să pregătiți mediul. Vom instala Joomla local! 3, copiați depozitul GitHub și mutați directoarele dacă este necesar. Folosim Sublime Text 2 pentru gestionarea codului, iar instrumentele Git sunt destul de potrivite pentru scrierea codului. Există multe aplicații pe care le puteți folosi și, în loc să le disprețuim, vă vom încuraja să găsiți cea care funcționează cel mai bine pentru dvs. și pentru tehnicile dvs. de codare.

A treia lecție despre crearea unei componente MVC

În această lecție vom crea un formular pentru trimiterea mesajelor și, de asemenea, îl vom trimite la e-mailul specificat specificat în setări, vom salva înregistrarea în baza de date și vom afișa utilizatorului un mesaj despre trimiterea cu succes a mesajului!

Mai întâi, să edităm fișierul XML cu formularul nostru. Fișierul nostru se află la: components/com_form/models/forms/form.xml
Acest fișier conține în prezent următorul cod:

Formularul nostru are un singur câmp numit test. Trebuie să îl ștergem (sau să schimbăm) și să ne asigurăm că avem 3 câmpuri: Nume, E-mail și Mesaj

După adăugarea acestor câmpuri, formularul nostru va arăta astfel:

Dacă acordați atenție, acum avem câteva atribute suplimentare în câmpurile de câmp:

  • required="true" - înseamnă că câmpul va fi obligatoriu, dacă nu este completat va apărea o eroare!
  • validate="email" - înseamnă că se va efectua verificarea sau că a fost introdusă o adresă de e-mail în acest câmp (validarea va fi efectuată numai pe partea de server)

Acum trebuie să afișăm aceste câmpuri în formular!
Pentru a face acest lucru, deschideți fișierul components/com_form/views/form/tmpl/default.php

Pentru a afișa câmpurile de formular pe care le-am creat anterior în fișierul XML, sunt folosite următoarele rânduri:

//pentru a afișa eticheta câmpului din atributul "label" echo $this->form->getLabel("name"); //pentru a afișa câmpul în sine, numele câmpului este conținut în atributul "name" echo $this->form->getInput("name");

Acum trebuie să afișăm cele trei câmpuri ale noastre în formular, iar codul șablonului de formular se va schimba în acesta:

Formă părere Salut Lume! Noiembrie 2009 John Doe Această adresă E-mail protejat de roboții de spam. Trebuie să aveți JavaScript activat pentru a-l vizualiza. http://www.example.org Informații privind drepturile de autor Informații despre licență 0.0.2 Descrierea componentei Hello World ... sql/updates/mysql index.html helloworld.php controller.php vizualizează Hello World! index.html helloworld.php sql

Când dezvoltați oricare dintre extensiile pentru CMS Joomla! Întrebarea instalării sale ulterioare pe un proiect de lucru apare întotdeauna. Acesta este motivul pentru care este necesară asamblarea extensiei într-un pachet de instalare, ceea ce poate cauza dificultăți fără experiența corespunzătoare. În CMS Joomla! Creare pachet de instalare pentru orice extindere a acestuia, are o serie de caracteristici care sunt discutate în detaliu în acest articol. Cele mai importante dintre ele sunt: ​​crearea unei structuri de fișiere de extensie, un fișier manifest, actualizarea extensiei după instalare etc.

Acest articol va fi util atât pentru începători, cât și pentru dezvoltatorii experimentați care dezvoltă extensii pentru Joomla! sau completările sale. Articolul acoperă majoritatea problemelor legate de procesul de creare a unui pachet de instalare pentru toate tipurile Extensii Joomla! cu exemple de cod.

Structura fișierului extensiei

Creați o structură de fișiere pentru un Joomla gata făcut! destul de simplu, deoarece în majoritatea cazurilor va coincide cu structura de fișiere și foldere a extensiei în sine, cu un anumit set de excepții și completări.

Dacă te uiți la structura fișierelor și folderelor care sunt colectate în pachetul de instalare, pentru extensii tipuri diferite, atunci se observă imediat o diferență semnificativă între structura pachetului de instalare de componente și alte extensii. Prin urmare, vom lua în considerare mai întâi cazul general și apoi separat structura folderelor și fișierelor componentei.

General structura fișierului extensii

Cel mai adesea, toate fișierele principale ale CMS-ului existent Joomla! extensiile sunt în același folder. De exemplu, pentru un plugin acesta ar putea fi folderul plugins/system/sef, pentru un modul modules/mod_articles_news, pentru un șablon templates/protostar etc. Pentru a construi pachetul de instalare a extensiei, trebuie să copiați toate fișierele acestuia într-un folder separat. Este recomandabil să-l denumești în funcție de numele extensiei în sine.

De asemenea, directorul rădăcină al pachetului de instalare poate conține fișiere suplimentareși foldere. De exemplu, media este un folder folosit pentru a stoca stiluri css, imagini, scripturi js etc., care sunt folosite în extensie. Poate conține subfolderele corespunzătoare css, imagini, js etc. Conținutul directorului media este descris printr-o etichetă specială în fișierul manifest de instalare al extensiei (vezi) și copiat în timpul instalării în folderul media/[nume_extensie].

Dosarul de limbă conține fișiere cu extensii de limbă care pot fi copiate în directorul de limbă a sistemului. Fișierele de limbă din folderul de limbă trebuie plasate în subdosare cu nume corespunzătoare etichetelor de limbă. De exemplu, folderul language/en-GB conține fișiere de limbă pentru în limba engleză, în limba/ru-RU – rusă etc.

Dosarul sql este cel mai adesea folosit pentru a stoca fișierele sql utilizate la instalarea și dezinstalarea unei extensii, precum și pentru a stoca actualizările bazei de date pentru fiecare versiune a extensiei în subdosarul actualizări. Relevant fișiere sql efectuați modificări în baza de date a site-ului atunci când instalați, ștergeți sau actualizați o extensie.

Structura fișierului componentei pentru CMS Joomla!

Principala diferență dintre componentă și alte Joomla! este prezența unui utilizator separat și a unei părți administrative. Când se creează un pachet de instalare, se obișnuiește să se creeze folderele admin și site în rădăcina acestuia pentru a plasa fișiere și foldere pentru părțile administrative și, respectiv, utilizator ale componentei. Structura care este localizată sau planificată să fie localizată în folderul administrator/components/[component_name] din Joomla! CMS este copiată în folderul admin. Dosarul site-ului va conține toate fișierele și folderele din componente/[component_name] .

Fișierul manifest al ansamblului de instalare al unei componente trebuie să fie localizat în directorul său rădăcină și numit [component_name].xml, deși după instalare va fi copiat în directorul administrativ al componentei. De asemenea, folderul media este plasat în directorul rădăcină dacă este utilizat în componentă.

La asamblarea componentei, folderul sql trebuie să fie localizat în directorul admin, iar folderele de limbă sunt create separat în admin și site pentru părțile administrative și utilizator ale site-ului separat. Structura lor internă este similară cu cea descrisă în cazul general.

Crearea unui fișier manifest

Fișierul manifest trebuie să fie localizat la rădăcina pachetului de instalare și denumit manifest.xml sau [nume_extensie].xml . Descrierea corectă a etichetelor din fișierul manifest vă va permite să copiați toate fișierele și folderele extensiei în directoarele corespunzătoare ale CMS-ului Joomla!, să actualizați structura în baza de date, să adăugați informații despre extensia la CMS, să actualizați cu ușurință extensia în viitor etc.

Element rădăcină

Elementul rădăcină al fișierului manifest este . Acest element înlocuiește vechiul element rădăcină care a fost folosit în Joomla! 1.5. Eticheta rădăcină poate conține un număr de atribute, a căror listă este prezentată mai jos:

Atribut Valoare Tip extensie Scurtă descriere
tip
  • componentă
  • fisier (fisier)
  • limba (pachet de limbi)
  • bibliotecă
  • modul (modul)
  • pachet (pachet cu mai multe extensii)
  • conecteaza
  • șablon
Toate tipurileAcest atribut descrie tipul de extensie pentru programul de instalare. Pe baza acestui tip, etichetele interne din fișierul manifest pot fi formate în diferite moduri.
versiune Toate tipurileSpecifică versiunea de Joomla! pentru care se dezvoltă această extensie.
metodă
  • instalare
  • actualizare
Toate tipurileDacă atributul este setat pentru instalare, programul de instalare se va anula dacă găsește Joomla! fișierul sau folderul existent al extensiei care se instalează. Dacă atributul este setat să facă upgrade, atunci când reinstalați extensia, programul de instalare va înlocui fișierele existente și va efectua alte acțiuni pentru a actualiza extensia, specificate mai târziu în fișierul manifest.
client
  • administrator
ModuleAcest atribut vă permite să determinați în ce parte a site-ului (client sau administrativ) modulul instalat va fi disponibil.
grupLiniaPluginuriAtributul trebuie să conțină numele grupului pentru pluginul instalat (sistem, utilizator, conținut etc.). Numele trebuie să se potrivească cu directorul corespunzător din folderul de pluginuri în care va fi instalat pluginul.
Informații despre extensie și dezvoltator

Cel mai adesea, la începutul elementului rădăcină al fișierului manifest există o serie de etichete care definesc informații despre extensie și dezvoltatorul acesteia.

  • – numele de sistem al extensiei cu un prefix (de exemplu, com_banners, mod_login)
  • – numele autorului (de exemplu, BoxApp)
  • – data creării extinderii sau lansării versiune noua(de exemplu, 22.11.2014)
  • – declarație privind drepturile de autor (de exemplu, © 2014 - 2015 BoxApp. Toate drepturile rezervate.)
  • acord de licențiere(de exemplu, GNU General Public License versiunea 2 sau ulterioară)
  • Adresa de e-mail autor (de exemplu, info@site)
  • – link către site-ul web al autorului (de exemplu, http://site)
  • – numărul versiunii extensiei (de exemplu, 1.2.0)
  • – descrierea extensiei. Această opțiune folosește standardul Joomla! pentru a traduce textul în limbi diferite, astfel încât să puteți utiliza o constantă de limbă ca valoare. De exemplu, COM_EXAMPLE_XML_DESCRIPTION.

Valoarea etichetei este folosită și pentru traducerea în diferite limbi, la fel ca . Puteți adăuga o constantă similară cu numele extensiei în fișierele de limbă ale extensiei (de exemplu, COM_EXAMPLE) pentru a o traduce.

Fișiere și foldere de extensie

Pentru ca fișierele de extensie și folderele să fie copiate în timpul instalării, trebuie să completați un bloc în fișierul manifest. De exemplu, pentru Joomla! acest bloc ar putea avea următorul cod:

limba tmpl [nume_modul].php helper.php index.html [nume_modul].xml

Dacă pachetul de instalare pentru componenta Joomla! este în curs de compilare, atunci fișierele și folderele pentru partea utilizator a site-ului sunt plasate în directorul site-ului din folderul rădăcină al pachetului de instalare. În acest caz, blocul poate arăta astfel:

controlere ajutoare modele vizualizări [component_name].php controller.php index.html metadata.xml router.php

Aici, directorul site-ului este specificat ca atribut folder al etichetei; în consecință, folderele specificate în etichetele interne (controlere, ajutoare, modele, vizualizări) și fișierele specificate folosind etichetele ([extension_name].php, controller.php, index) ar trebui să fie localizat în el .html, metadata.xml, router.php). În acest caz, structura internă a folderelor specificate în etichete va fi copiată complet împreună cu toate subfolderele și fișierele. În cazul unei componente, întregul folder și structura fișierelor specificate în etichetă vor fi copiate în directorul componente/[nume_componentă].

Fișiere media

În structura CMS Joomla! Pentru fișierele media există un folder separat în rădăcină numit media. În aceasta, programul de instalare copiază fișierele media ale extensiei, care sunt indicate în etichetă. În același timp, locația fișierelor în folderul media al extensiei corespunde unei anumite structuri. Un folder media este creat în directorul rădăcină al pachetului de instalare. Ar trebui să conțină subfoldere dacă extensia folosește tipul de fișier corespunzător: css (pentru fișierele în stil CSS), imagini (pentru stocarea imaginilor) și js (pentru scripturile utilizate în extensie). În plus, folderul media poate conține alte subdosare și fișiere utilizate în extensie. Blocul de etichete din fișierul manifest poate arăta astfel:

imagini css js index.html

În exemplul de mai sus, atributele etichetei definesc:

  • folder – numele folderului din directorul rădăcină al pachetului de instalare, în care subfolderele și fișierele din etichete și
  • destinație – numele folderului de extensie în care vor fi copiate următorul folder și structura de fișiere. De exemplu, com_example pentru o componentă, mod_example pentru un modul, plg_system_example pentru un plugin de sistem.

Ca rezultat, fișierele media și folderele specificate în etichetă vor fi copiate din folderul madia al pachetului de instalare de-a lungul căii media/[extension_name] .

Fișiere de limbă

În Joomla! 1.5, a fost folosită o abordare când fișierele de limbă ale extensiei, la instalarea acesteia, au fost copiate în folderul de sistem CMS pentru a stoca fișierele de limbă ale părții utilizator a limbii site-ului sau ale părții sale administrative administrator/limbă. Suportul pentru această abordare rămâne în versiunile viitoare de Joomla! inclusiv 3.x. Pentru a utiliza această abordare, trebuie să plasați eticheta în eticheta rădăcină a fișierului manifest, în interiorul căreia trebuie să specificați etichete pentru fiecare dintre limbile furnizate cu extensia în ansamblul de instalare. De exemplu, acest bloc ar putea arăta astfel:

ro-GB.[nume_extensie].ini ru-RU.[nume_extensie].ini

În acest caz, fișierele de limbă trebuie să fie localizate în folderul de limbă, iar numele lor trebuie să corespundă numelui extensiei împreună cu un prefix corespunzător tipului acesteia (de exemplu, com_example, plg_system_example, tpl_example etc.). Când instalați Joomla! aceste fișiere vor fi copiate într-unul dintre subdirectoarele folderului de limbă, al cărui nume corespunde atributului etichetei specificat în etichetă. De exemplu, fișierul din pachetul de instalare language/en-GB.[extension_name].ini va fi copiat în Joomla! de-a lungul căii language/en-GB/en-GB.[extension_name].ini în directorul rădăcină Joomla!.

Pornind de la Joomla! 1.6 s-a propus să se stocheze fișierele de limbă direct în folderul cu extensii, mai degrabă decât să le copieze folderele de sistem cu fișiere de limbă. În același timp, Joomla! descarcă automat fișierele de limbă ale extensiei atunci când o utilizați.

Noua abordare de stocare a fișierelor de limbă în interiorul unei extensii are o serie de avantaje clare. De exemplu, dacă un administrator șterge una dintre limbile din Joomla! CMS, atunci fișierele de extensie de limbă corespunzătoare nu vor fi afectate. Acestea vor rămâne parte a extensiei și vor fi disponibile dacă limba este instalată din nou. În plus, va fi foarte ușor pentru administratorul site-ului să redefinească constante în fișierele de limbă de extensie dacă are nevoie. Pur și simplu copiați fișierul de limbă din folderul de extensie în directorul de sistem cu fișiere de limbă și redefiniți constantele necesare. În același timp, CMS Joomla! mai întâi va conecta fișierul din directorul de sistem în conformitate cu prioritatea, iar la actualizarea extensiei, modificările în fișierul de limbă nu vor fi suprascrise.

Pentru conexiune automată fișierele de limbă din folderul de extensie, acestea trebuie aranjate în conformitate cu o structură specifică. Pentru utilizatorii și părțile administrative ale site-ului, această structură este aceeași dacă despre care vorbim despre componentă. Toate fișierele de limbă sunt plasate într-un folder cu un nume corespunzător etichetei de limbă (atributul etichetei) în directorul de limbă. De exemplu, language/en-GB . Și așa mai departe pentru fiecare dintre limbile furnizate în pachetul de instalare a extensiei. Dosarul de limbă ar trebui să fie situat în rădăcina ansamblului de instalare, iar în eticheta manifest trebuie să adăugați o etichetă pentru acest folder:

...limba...

La instalarea extensiei, folderul de limbă va fi copiat în directorul de extensii împreună cu celelalte foldere și fișiere ale acestuia.

Dacă este necesar, putem adăuga și . În conformitate cu structura de foldere creată, poate arăta astfel:

language/en-GB/en-GB.[extension_name].ini language/en-GB/en-GB.[extension_name].sys.ini language/ru-RU/ru-RU.[extension_name].ini language/ru -RU/ru-RU.[nume_extensie].sys.ini

În acest caz, fișierele de limbă vor fi, de asemenea, copiate în directorul de limbă a sistemului și șterse din acesta atunci când extensia este eliminată de administratorul site-ului. Modificările aduse fișierelor de limbă ale extensiei din directorul de sistem vor avea prioritate față de valorile din folderul extensiei. În acest caz, fișierul sys.ini este întotdeauna conectat din directorul de sistem din partea administrativă a extensiei, cu excepția cazului în care extensia este instalată și conține un folder de limbă cu fișierul sys.ini corespunzător. Numai în acest caz vor fi utilizate valorile constantelor de limbă ale fișierului sys.ini din folderul cu extensii. Această caracteristică poate fi utilizată dacă dezvoltatorul extensiei dorește să aibă două opțiuni de traducere pentru constantele din fișierul sys.ini, care sunt folosite, de exemplu, pentru a afișa un mesaj despre instalarea cu succes a extensiei (în timpul instalării) și descrierea ei obișnuită. .

Setări

Componentele nu acceptă setări în fișierul manifest. Acest abordare învechită, care a fost prezent în Joomla! 1.5. Pentru a adăuga setări la componentă, este utilizat un fișier config.xml separat. Este plasat în rădăcina directorului administrativ atunci când componenta este instalată și este indicat într-o etichetă din interiorul etichetei împreună cu alte fișiere și foldere pentru partea administrativă a componentei.

Blocul este un copil al etichetei rădăcină a fișierului manifest și este responsabil pentru descrierea setărilor pentru extensie, care pot fi specificate în partea administrativă a site-ului. Setările extensiilor sunt localizate în principal în manager pentru a gestiona tipul corespunzător de Joomla! (de exemplu, Plugin Manager, Module Manager sau Template Manager). Documentația oficială precizează că setările de extensie pot fi specificate într-un fișier de extensie separat, care ar trebui să se numească config.xml și să aibă un element rădăcină de , dar în practică această abordare funcționează doar pentru componente. Pentru alte tipuri de Joomla! Blocul trebuie plasat în fișierul manifest.

Prima etichetă secundară ar trebui să fie (opțională pentru componente), care, la rândul său, poate conține una sau mai multe etichete copil, care vor fi afișate ca file separate în codul HTML din pagina de setări pentru această extensie și vor servi ca containere pentru grupuri de câmpuri de formular cu setări de extensie. Puteți specifica numele filei în atributul nume al etichetei. Atributele de etichetă și descriere sunt folosite pentru a indica titlul și descriere scurta file și poate conține constante de limbă ca valori. Dacă nu este specificat atributul label, atunci constanta de limbă va fi generată automat folosind șablonul COM_CONFIG_[tab_name]_FIELDSET_LABEL (unde tab_name este valoarea atributului name) și va fi necesar doar să specificați traducerea în fișierele de limbă corespunzătoare. a prelungirii.

Fiecare trebuie să conțină una sau mai multe etichete secundare, fiecare dintre acestea descriind un câmp al formularului de setări. Lista completă a câmpurilor de handicap disponibile în Joomla! pot fi găsite în documentație împreună cu exemple de utilizare a acestor câmpuri.

Iată un exemplu de fișier de configurare pentru componenta com_example.

JSHOW JHIDE JYES JNO

Acest exemplu descrie două grupuri de setări în etichetele denumite bază și permisiuni. Merită să acordați atenție faptului că toate constantele de limbă cu prefixul COM_EXAMPLE_ trebuie definite în fișierul de limbă sys.ini al extensiei. Constantele rămase sunt constante de sistem și pot fi folosite oriunde în extensie, fără a fi nevoie să le descrieți în fișierele de limbă. Valorile acestor constante pentru limba curentă vor fi scoase din fișierele de limbă a sistemului dacă limba corespunzătoare este instalată în CMS-ul Joomla!.

Să dăm un alt exemplu de bloc pentru pluginul de sistem sef.

Partea administrativă a extinderii

Toate etichetele legate de partea administrativă a extensiei din fișierul manifest sunt situate în interiorul etichetei. În practică, numai componentele pot avea atât un utilizator, cât și o parte administrativă ca parte a unei extensii, astfel încât blocul se găsește doar în fișierele manifest ale pachetelor de instalare a componentelor pentru Joomla! Blocul administrativ al fișierului manifest poate avea mai multe etichete copil care au scopuri diferite pentru procesul de instalare a componentelor. Să ne uităm la aceste blocuri în ordine.

Pentru a adăuga un element din meniul componentelor la meniul Componente din meniul principal meniul Joomla! și se folosește eticheta. De exemplu, acest bloc ar putea arăta astfel:

COM_EXAMPLE COM_EXAMPLE_SUBMENU_ANOPTION COM_EXAMPLE_SUBMENU_VIEWNAME

Ca urmare, după instalarea componentei în elementul de meniu Componente din meniul principal al Joomla! un articol nou și subarticolele acestuia vor fi adăugate în conformitate cu parametrii specificați.

Numele elementului de meniu care va fi adăugat în meniul Componente după instalarea acestuia este indicat ca valoare a etichetei. În etichetă, puteți specifica un număr de elemente de meniu suplimentare care vor fi descendenți ai elementului de meniu cu numele componentei. Cel mai adesea, submeniurile sunt folosite pentru a lista secțiunile funcționale principale dintr-o componentă sau pentru a lista entitățile pe care le controlează componenta.

Să enumerăm atributele disponibile în etichetă:

  • link – linkul pe care utilizatorul îl va urma făcând clic pe elementul de meniu corespunzător
  • img – cale relativă către fișierul imagine care va fi afișat lângă elementul de meniu (16x16 pixeli)
  • [text_parameter] – un parametru arbitrar care va fi adăugat la cerere atunci când se generează un link pentru un element de meniu. De exemplu, făcând clic pe elementul de meniu COM_EXAMPLE, utilizatorul va merge la postarea index.php?option=com_example&view=cpanel .

La fel ca o etichetă părinte, o etichetă poate avea o etichetă secundară. Listează fișierele și folderele care vor fi copiate în partea administrativă a site-ului la instalarea componentei. Directorul admin este creat în rădăcina pachetului de instalare, care conține structura folderelor și fișierelor pentru partea administrativă a componentei. Eticheta din interior poate arăta astfel:

controlere ajutoare modele tabele sql vizualizări access.xml [component_name].php config.xml controller.php index.html

Întreaga structură a folderelor și fișierelor, împreună cu subelementele acestora, va fi copiată de-a lungul căii:

Administrator/componente/[component_name]

La fel ca blocul rădăcină al unui fișier manifest, un bloc poate conține o subetichetă cu etichete copil pentru a descrie fișierele de limbă pentru partea administrativă a componentei. Aici logica pentru plasarea și conectarea fișierelor de limbă este similară cu cea descrisă mai sus în secțiune. Cea mai modernă abordare este atunci când fișierele de limbă pentru partea administrativă a site-ului sunt și ele incluse în componentă. În acest caz, directorul admin din rădăcina pachetului de instalare trebuie să conțină un folder de limbă, în care fișierele de limbă au nume similare și sunt, de asemenea, situate în subfoldere cu numele etichetei de limbă. Pentru a copia directorul de limbă, eticheta corespunzătoare trebuie să fie conținută în eticheta părinte, iar atunci când descrieți fișierele de limbă în etichetă, acestea vor fi adăugate și în directorul de sistem (pentru partea administrativă aceasta este administrator/limbă).

Iată un exemplu de descriere și blocuri în interiorul unei etichete pentru copierea fișierelor de limbă componente:

... controlere helper modele de limbă tabele sql vizualizări access.xml [component_name].php config.xml controller.php index.html language/en-GB/en-GB.[component_name].ini language/en-GB/en- GB.[component_name].sys.ini language/ru-RU/ru-RU.[component_name].ini language/ru-RU/ru-RU.[component_name].sys.ini …

În fișierul sys.ini, următoarele constante de limbă sunt descrise cel mai adesea:

  • numele și descrierea componentei din etichetele fișierului manifest și
  • constante care conțin numele elementelor de meniu
  • constante cu nume și descrieri ale câmpurilor din formularul de setări ale componentelor, care sunt conținute în fișierul config.xml

O caracteristică specială a fișierului sys.ini este că este întotdeauna inclus în partea administrativă a componentei, indiferent de context. În consecință, are sens să plasați în el doar acele constante de limbaj care sunt utilizate în afara componentei (lista de mai sus). Constantele rămase care sunt utilizate direct în interiorul componentei instalate trebuie să fie în fișiere ini de limbă fără sufixul sys (en-GB.[component_name].ini).

De asemenea, este de remarcat faptul că pentru componentă, fișierul config.xml trebuie să fie localizat în rădăcina directorului admin și să participe la descrierea fișierelor din eticheta situată în interiorul blocului, ca în exemplul de mai sus.

Instalare script SQL

Program de instalare standard în Joomla! vă permite să executați un script SQL arbitrar atunci când instalați sau dezinstalați o extensie în Joomla!. Pentru a face acest lucru, trebuie să scrieți fișierele corespunzătoare cu extensia sql și să le plasați în folderul sql din rădăcina extensiei. De exemplu, să fie acestea fișierele sql/example.install.sql , care vor fi executate la instalarea unei extensii și sql/example.uninstall.sql , care va executa sql la dezinstalarea unei extensii. Conținutul acestor fișiere sql ar putea fi, de exemplu, următorul:

De exemplu, fișierul.install.sql:

CREATE TABLE IF NOT EXISTIS `#__example_extension_table` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `ordering` int(11) NOT NULL DEFAULT "0", `state` tinyint (3) NOT NULL DEFAULT "1", CHEIE PRIMARĂ (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Pentru fișierul example.uninstall.sql:

DROP TABLE IF EXISTIS `#__example_extension_table`;

După cum puteți vedea, în fișierul de instalare este creat masa noua baza de date cu numele #__example_extension_table , unde prefixul #_ va fi înlocuit cu prefixul tabelului bazei de date specificat în setările Joomla!, iar când extensia este eliminată, acest tabel va fi șters din baza de date.

Pentru ca scripturile corespunzătoare să fie executate, trebuie să adăugați și etichete la eticheta rădăcină a fișierului manifest și să specificați folderul sql din copiii etichetei. Pentru a face acest lucru, puteți adăuga următorul cod în fișierul manifest:

sql/example.install.sql sql/example.uninstall.sql ... sql ...

Aici un element poate conține unul sau mai multe elemente copil, fiecare dintre acestea descriind un fișier sql. Driverul său de bază de date este descris în atributul driver, iar codificarea acestuia este descrisă în atributul charset.

Pentru majoritatea extensiilor, folderul sql cu fișierele corespunzătoare ar trebui să fie localizat în rădăcina pachetului de instalare al extensiei. Excepția este pentru componentele pentru care folderul sql este plasat în folderul admin. Ar trebui copiat în folderul părții administrative a componentei, astfel încât folderul sql este implicat în lista de fișiere și foldere ale părții administrative:

...... sql ......

Script SQL pentru actualizare

Începând cu Joomla! 1.6 a devenit posibilă actualizarea extensiilor în conformitate cu versiunile acestora. Descrierea tuturor caracteristicilor sistemului de actualizare a extensiilor din Joomla! merita un articol separat. De asemenea, merită menționat aici că putem adăuga o etichetă la blocul rădăcină al fișierului manifest, care la rândul său poate conține o etichetă copil care indică parametrii pentru actualizarea bazei de date. De exemplu, acest bloc poate conține codul:

sql/actualizări

În acest caz, folderul sql ar trebui să conțină un subfolder de actualizări care conține fișiere care actualizează structura și datele din baza de date a aplicației. Acestea trebuie să fie fișiere SQL cu nume care se potrivesc exact cu versiunea extensiei. De exemplu, dacă un utilizator are instalată extensia 1.0.0 și instalează versiunea de extensie 1.1.0, atunci folderul sql/updates ar trebui să conțină fișierul 1.1.0.sql cu modificările pentru această versiune.

Instalare script php

Pentru a executa cod php arbitrar înainte de instalare, după instalare sau în timpul procesului de eliminare sau actualizare a unei extensii, puteți specifica un fișier php special în etichetă, un copil al etichetei rădăcină în fișierul manifest. De exemplu:

exemplu.script.php

Acest fișier ar trebui să conțină o clasă numită [nume extensie]InstallerScript. Pentru pluginuri, este obligatoriu să includeți numele grupului (de exemplu, plgsystempluginname). Pachetele de instalare a bibliotecii nu acceptă execuția scripturi php. Prezentăm mai jos structura acestei clase împreună cu funcțiile disponibile pentru definire:

Clasa [extension_name]InstallerScript ( /** * Constructor * * @param JAdapterInstance $adapter Obiectul responsabil pentru rularea acestui script */ funcția publică __construct(JAdapterInstance $adapter); /** * Apelat înainte de orice tip de acțiune * * @param șir $route Ce acțiune are loc (install|uninstall|discover_install|update) * @param JAdapterInstance $adapter Obiectul responsabil pentru rularea acestui script * * @return boolean True on success */ public function preflight($route, JAdapterInstance $adapter) ; /** * Apelat după orice tip de acțiune * * @param șir $route Care acțiune are loc (install|uninstall|discover_install|update) * @param JAdapterInstance $adapter Obiectul responsabil pentru rularea acestui script * * @return boolean True la succes */ public function postflight($route, JAdapterInstance $adapter); /** * Apelat la instalare * * @param JAdapterInstance $adapter Obiectul responsabil pentru rularea acestui script * * @return boolean True on success */ public function install (JAdapterInstance $adapter); /** * Apelat la actualizare * * @param JAdapterInstance $adapter Obiectul responsabil pentru rularea acestui script * * @return boolean Adevărat la succes */ public function update(JAdapterInstance $adapter); /** * Apelat la dezinstalare * * @param JAdapterInstance $adapter Obiectul responsabil pentru rularea acestui script */ public function uninstall(JAdapterInstance $adapter); )

Scurtă descriere a funcțiilor:

  • __construct – constructor de clasă
  • preflight – apelat înainte de efectuarea oricărei acțiuni
  • postflight – numit după efectuarea unui fel de acțiune
  • install – apelat la instalarea unei extensii
  • update – apelat atunci când se realizează o actualizare a extensiei
  • uninstall – apelat atunci când o extensie este dezinstalată
Server de actualizare a extensiilor

În fișierul manifest de extensie, puteți specifica un bloc, care este un succesor al blocului de bază al fișierului manifest, care vă permite să definiți parametrii de actualizare pentru această extensie Joomla!. Acest bloc conține un element care definește direct parametrii de actualizare. Iată o listă de atribute ale elementelor disponibile:

Valoarea etichetei trebuie să fie o adresă URL fișier xml cu o descriere a versiunilor extensiei pe care CMS-ul Joomla! va putea concluziona că este necesară actualizarea acestei extensii. Iată un exemplu de bloc:

http://site/updates/joomla/plugins/plg_content_disqusforcontent.xml

Aceasta rezolvă doar o parte a problemei referitoare la fișierul manifest de extensie. Pentru a sprijini pe deplin actualizările extensiilor în CMS Joomla! În plus, sunt necesare o serie de acțiuni suplimentare, care necesită descriere într-un articol separat.

Ambalaj de expansiune

Adesea, setul de instalare al fișierelor și folderelor unei extensii este distribuit ca o arhivă zip. Acesta trebuie să fie împachetat astfel încât fișierele și folderele aflate în directorul rădăcină al ansamblului de instalare (de exemplu, fișierul manifest [nume_extensie].xml) să fie localizate în rădăcina arhivei și nu în subfolderele acesteia (structura fișierului). în arhivă este similar cu directorul rădăcină creat al ansamblului de instalare). Este o practică bună să denumiți arhiva, precum și extensia împreună cu prefixul (de exemplu, com_example.zip, plg_system_example.zip, tpl_example.zip etc.) cu litere mici.

Instalator Joomla! are mecanisme interne care vă permit să despachetați arhiva de instalare într-un director temporar de pe site înainte de instalare, astfel încât utilizatorul extensiei să poată utiliza imediat arhiva asamblată pentru a instala extensia. Excepție fac extensiile care necesită o altă extensie pentru a funcționa și sunt livrate împreună. De exemplu, pentru ca o componentă să funcționeze, trebuie să instalați un plugin împreună cu ea. În astfel de cazuri, arhiva de instalare poate fi numită com_example_UNZIPFIRST.zip sau com_example_UNZIPME.zip. Înainte de instalare, trebuie mai întâi să îl despachetați. În interiorul unei astfel de arhive există adesea câteva alte arhive de instalare pentru alte extensii și instrucțiuni pentru instalarea acestora. Deși mai mult calea cea buna O modalitate de a ieși din situația în care sunt furnizate mai multe extensii Joomla! ca parte a unui pachet de instalare este asamblarea unui pachet (pachet) de instalare special, care, la rândul său, este o extensie Joomla!, are un fișier manifest separat, un set de arhive de extensii. și este instalat prin Joomla! Extension Manager. Dar despre acest tip de extensii și caracteristicile ansamblării lor merită să vorbim separat.

Exemple

Comunitatea Joomla! foarte mare, ceea ce vă permite să găsiți un număr mare de soluții gata făcute pentru acest CMS sub formă de extensii. Un număr mare de Joomla! colectate și catalogate pe site-ul oficial extensions.joomla.org. Fiecare dintre ele poate servi drept exemplu pentru asamblarea și proiectarea propriilor extensii. În plus, multe extensii sunt furnizate direct ca parte a Joomla! CMS; ele pot servi și ca exemple pentru pregătirea propriilor ansambluri.

Echipa BoxApp se dezvoltă activ extensii gratuite pentru CMS Joomla!, care poate fi descărcat în secțiunea de descărcări. Acolo puteți găsi, de asemenea, descrieri și documentație pentru extensiile noastre. Ele pot fi, de asemenea, folosite ca șablon pentru pregătirea și proiectarea propriilor pachete de instalare.

Acțiune