4 motive pentru a alege ProcessWire ca următorul CMS

Acum câteva săptămâni am dat peste un articol A List Apart intitulat "Gestionarea sistemului de gestionare a conținutului". Oferă recomandări cu privire la modul de limitare și adaptare a libertății utilizatorilor într-un sistem de management al conținutului (CMS), cu scopul de a facilita utilizarea acestuia. 

Citind aceste recomandări și comparându-le cu posibilitățile tehnice ale principalilor actori din actualul CMS, văd multe limitări. Majoritatea acestor CMS pur și simplu nu au aceste tipuri de capabilități și nu pot oferi nivelul de opțiuni pentru a personaliza în mod ideal o interfață de utilizator back-end. Dar lucrez cu ProcessWire de câțiva ani, cred că am găsit sanctuarul pentru dezvoltatori și utilizatorii care doresc exact asta.

ProcessWire este un sistem open source, open source PHP CMS și Content Management Framework (CMF). În centrul său se bazează pe câteva concepte simple și oferă instrumente extrem de ușor de utilizat și extrem de puternice în același timp. În acest articol de ansamblu, vreau să vă prezint câteva dintre aceste instrumente și concepte. Iată patru motive pentru a alege ProcessWire ca următorul CMS.

1. Se bazează pe trei concepte simple de bază: Pagini, câmpuri și șabloane

Intrarea și ieșirea datelor se bazează doar pe trei concepte de bază și nimic altceva. Aceasta înseamnă că, odată ce înțelegeți aceste concepte, înțelegeți în principiu totul despre ProcessWire și filosofia din spatele ei. Destul de cool, nu? Deci, permiteți-mi să vă prezint pagini, câmpuri și template-uri.

Pagini

Pe pagina de pornire a instalării dvs. ProcessWire veți vedea un singur arbore de pagină ierarhic:

Legăturile pe care le vedeți în copac sunt numite pagini. Paginile din back-end reflectă de obicei pagina văzută în front-end. De exemplu, pagina "Despre" din captura de ecran este accesibilă în partea frontală deschizând your-domain.com/about/

Dar paginile nu trebuie să aibă o contrapartidă pe front-end. De asemenea, ele pot exista pur și simplu în back-end și pot servi drept recipiente de date pentru alte pagini. Permiteți propoziția pe care tocmai ați citit-o: Conceptul de pagini disponibil numai în back-end este destul de puternic deoarece deschide posibilități nesfârșite în modul în care puteți structura site-ul dvs. și puteți interacționa cu datele introduse.

Poți și ar trebui să folosești pagini pentru aproape orice. De exemplu, puteți avea o pagină de setări ascunse, unde salvați elemente precum navigarea principală sau textul general, cum ar fi numele, sloganul, nota privind drepturile de autor etc. ale site-ului dvs. web. Un alt exemplu ar fi etichetele și categoriile de postări de blog (echivalente cu taxonomiile din WordPress). Ați crea doar pagini pentru fiecare etichetă sau categorie a unei postări pe blog. Permiteți-mi să citez Joss Sanglier cu privire la paginile din ProcessWire:

Paginile din ProcessWire sunt folosite pentru toate tipurile de lucruri. Acestea pot fi folosite ca marcator în lista de pagini. Ele pot fi folosite ca părinte de grup pentru alte pagini. Ele pot fi folosite ca categorii, etichete sau liste sau utilizatori. Și ele pot fi folosite chiar și pentru selecții simple drop-down - doar pentru a furniza o etichetă și o valoare.

Să deschidem și să editați pagina "About".

Acum vă uitați la următorul concept de bază al câmpurilor ProcessWire:.

Câmpuri

Paginile conțin câmpuri. Dar câmpurile trebuie văzute din două unghiuri diferite. Din punct de vedere optic fac parte din pagină, deoarece atunci când deschideți o pagină, veți vedea câmpuri cu care puteți lucra. Din punct de vedere tehnic, aceste câmpuri fac parte din șablonul paginii. Voi descrie conceptul de șabloane mai târziu; Să înțelegem mai întâi câmpurile.

Câmpurile din ProcessWire sunt containerele în care introduceți date sau din care selectați date, cum ar fi text, textare, numere, e-mailuri, încărcări de fișiere, alte pagini etc. Este total la dvs. câte câmpuri conține o pagină. Poate avea doar unul (de exemplu un câmp pentru titlul paginii) sau nici un câmp (nu este foarte convenabil) sau mai mult de 50 sau 100 de câmpuri. 

ProcessWire nu are noțiunea de câmpuri personalizate cum ar fi WordPress, pentru că fiecare câmp din ProcessWire este un câmp particularizat. Creați un câmp și decideți ce tip doriți (consultați captura de ecran de mai jos). Asta e!

Un câmp poate primi o etichetă, o descriere și câteva note pentru informații suplimentare care apar sub ea. Fiecare tip de câmp are propriile setări. Să aruncăm o privire asupra a trei tipuri de câmp și a unor setări pe care le puteți face pentru a vă simți:

  • textarea tipul de câmp: puteți decide dacă este redat ca o textare simplă sau ca un editor de text îmbogățit (CKEditor implicit). Puteți decide ce butoane ar trebui să apară în bara de instrumente CKEditor și chiar să introduceți opțiunile personalizate de configurare chiar în GUI admin.
  • Pagină tipul de câmp: puteți să conectați o pagină cu o altă pagină și să creați astfel o relație între ele. Puteți fie să conectați o pagină (o relație unu-la-unu) sau mai multe pagini (relație una-la-multe). Puteți permite chiar crearea de pagini noi dintr-un câmp de pagină.
  • Imagine câmp de tip: Puteți specifica tipul de imagine (extensie) care poate fi încărcat. Puteți specifica înălțimea și lățimea minimă și / sau maximă pe care trebuie să o aibă pentru a putea fi încărcate.

Linia de jos este următoarea: Fiecare câmp pe care îl creați este foarte personalizabil pentru a se potrivi exact nevoilor dvs. și nevoilor oamenilor care creează și editează conținutul în următoarele.

Dar cum o pagină știe ce domenii are în sine? Deci, hai să aruncăm o privire la șabloane.

Template-uri

Când creați o pagină nouă, trebuie să selectați a șablon. Șablonul conține toate informațiile pe care pagina trebuie să le cunoască despre conținutul său (ce câmpuri au, cum sunt redate aceste câmpuri și cum se comportă acestea).

Mai jos vedeți câmpurile șablonului basic-page.

Dând clic pe un câmp, se deschide o fereastră modală, unde puteți modifica setările câmpului exact pentru acel șablon.

Un șablon poate avea un fișier fizic fizic cu același nume asociat cu acesta. Aceste fișiere șablon sunt situate în / Site / template-uri /. Într-un astfel de fișier scrieți codul PHP și marcajul HTML care emite în cele din urmă conținutul paginii și redă elementele pe care un vizitator le vede pe pagina site-ului dvs.. 

Dacă un șablon nu are un astfel de fișier corespunzător, o pagină asociată cu acesta nu poate fi redată în partea din față a acestuia. Asta nu înseamnă că nu puteți obține datele acelei pagini și le puteți extrage în altă parte - puteți face acest lucru utilizând un fișier șablon existent al unei alte pagini.

Să rezumăm relația tehnică dintre pagini, câmpuri și șabloane: adăugați câmpuri la șabloane și selectați un șablon când creați pagini noi. Câmpurile pe care le vedeți la editarea unei pagini sunt câmpurile pe care le-ați adăugat la șablonul selectat.

2. Are un API să se îndrăgească cu

Codul din fișierele dvs. de șabloane va consta în principal din câteva constructe de bază PHP, cum ar fi atribuirea de valori variabilelor, dacă condiţii, pentru fiecare buclele și marcajul HTML pe de o parte și lucrul cu API-ul ProcessWire pe de altă parte. 

Vă puteți gândi la API ca jQuery pentru PHP. Oferă metode, selectori, legare (interfață fluentă) și capabilități de traversare.

API-ul este probabil singurul lucru care ma uimeste cel mai mult despre ProcessWire: este usor de folosit, usor de inteles, expresiv si puternic in acelasi timp. Dar, cel mai important, vă permite să vă dezvoltați într-un mod rapid și necomplicat și, de fapt, aveți distracţie interacționând cu acesta. Are sens.

API Cheatsheet este o referință excelentă. Acesta arată toate metodele disponibile cu care puteți lucra.

Acum permiteți-mi să vă prezint cele două variabile expuse API-ului pe care îl veți ocupa cel mai mult în timpul dezvoltării șablonului: pagina $ și $ pagini.

Pagina $ Variable

pagina $ variabila conține toate câmpurile specifice paginii pe care o vizualizați. Acestea includ câmpuri încorporate, care sunt comune tuturor paginilor, precum și câmpurile care sunt specifice acestei singure pagini.

Dar cum puteți accesa câmpurile unei pagini? Hai să ne aruncăm cu grijă, uitandu-ne la câteva exemple simple.

Executați conținutul câmpului text numit titlu:

echo $ page-> get ("titlu"); // sau echo $ page-> title;

Afișați numele șablonului paginii:

echo "Această pagină utilizează șablonul:". $ Web-> templat-> nume; // sau ecou "Această pagină utilizează șablonul: $ page-> template-> name";

Generați o navigare prin navigație:

ecou "
    "foreach ($ page-> părinți ca $ părinte) ecou"
  • url "> $ părinte-> titlu
  • "ecou"
„;

De la versiunea 2.5.27 puteți scrie și cele de mai jos, după cum urmează:

ecou "
    "; echo $ page-> parents-> each ("
  • titlu
  • "), echo"
„;

Efectuați o imagine numai dacă a fost efectiv încărcată:

dacă ($ page-> image) echo "";

Notă: Trebuie să setați câmpul de imagine să conțină doar o singură imagine pentru ca aceasta să funcționeze.

În cele ce urmează sunt câteva exemple pentru când un câmp de imagine este setat să conțină mai multe imagini.

Prindeți și scoateți prima imagine:

$ image = $ pagină-> imagini-> prima (); dacă ($ image) echo "";

Prindeți și scoateți o imagine aleatoare:

$ image = $ pagină-> imagini-> getRandom (); dacă ($ image) echo ""; 

Rotiți prin toate imaginile, creați o imagine mare la o lățime de 500 pixeli cu înălțime proporțională și o miniatură la 100 × 100 cu setări specifice de calitate și decupare și apoi faceți legătura miniatură cu varianta mare:

$ opțiuni = array ("calitate" => 90, "decupare" => "sud-est"); foreach ($ page-> imagini ca $ image) $ mare = $ imagine-> lățime (500); $ thumb = $ imagine-> dimensiune (100, 100, opțiuni $); echo "url">"; 

Notă: ProcessWire vă va crea imaginile la orice mărime în zbor și apoi păstrați o memorie cache a acestora.

Cele $ pagini Variabilă

$ pagini variabila este o referință a tuturor paginilor din site-ul dvs. Acest lucru vă permite să accesați tot conținutul și paginile site-ului dvs. de oriunde doriți.

Pentru următoarele exemple mă voi referi la site-ul demo standard al ProcessWire, care oferă o colecție de zgârie-nori în Statele Unite.

Obțineți o anumită pagină și obțineți titlul:

echo $ pages-> get ("/ cities / chicago / sears-tower /") -> titlu;

Notă: / Orașe / chicago / Sears-turn / este calea completă îndreptată către pagina Turn Sears din ierarhia arborelui de pagină ProcessWire.

Găsiți toți zgârie-norii cu o înălțime mai mare de 500 ft și mai mici sau egali cu 1.000 ft:

$ skyscrapers = $ pages-> find ("template = skyscraper, înălțime> 500, înălțime<=1000");

Notă: înălţime este un câmp conținut în interiorul șablonului zgârie-nori.

Găsiți toți zgârie-norii construiți înainte de 1950 cu 10+ etaje, ordonate după un an descendent, apoi etaje descendent:

$ zgârie-nori = $ pages-> find ("template = skyscraper, year<1950, floors>= 10, sort = an, sortare = -ploante ");

Notă: an și etaje sunt câmpurile conținute în interiorul șablonului zgârie-nori.

Găsiți toți zgârie-nori din Chicago cu 60+ etaje, sortate după etaje ascendent:

$ skyscrapers = $ pages-> get ("/ cities / chicago /") -> găsiți ("floors> = 60, sort = floors");

Găsiți toți zgârie-nori de către arhitecții David Childs sau Renzo Piano și sortați după înălțimea descendentă:

$ david = $ pages-> get ("/ architects / david-childs /"); $ renzo = $ pages-> get ("/ arhitecți / renzo-pian /"); $ skyscrapers = $ pagini-> găsi ("template = skyscraper, architects = $ david | $ renzo, sort = -height");

Notă: arhitecți este un câmp conținut în interiorul șablonului zgârie-nori.

3. Este construit în jurul unei arhitecturi modulare și ușor de extins

ProcessWire în sine constă într-un cadru de bază mic (considerați acest lucru esența ProcessWire care permite funcționalitățile de bază) și un set de module pre-ambalate, care vin cu fiecare instalare. Unele dintre aceste module de bază sunt instalate, iar altele sunt dezinstalate, în mod implicit. Gândiți-vă la modulele ProcessWire ca pluginuri WordPress: Ele extind și personalizează sistemul.

Natura modulară a ProcessWire are câteva avantaje frumoase:

  • Baza de cod este mai mult mentenabile deoarece funcționalitățile principale sunt izolate și decuplate de celelalte părți ale sistemului, ceea ce duce și la o creștere semnificativă a numărului total Securitate.
  • Dezvoltarea de noi caracteristici este simplificată, iar bug-urile pot fi direcționate și fixate mult mai ușor și rapid.
  • Actualizările la versiuni mai noi ale proceselor ProcessWire sau ale modulelor individuale sunt, de obicei, un no-brainer, și nu trebuie să vă faceți griji că după un upgrade totul este rupt.

Instalarea modulelor

Instalarea unui modul este la fel de ușoară ca tragerea fișierelor modulului la / Site / module / director și apoi faceți clic pe Instalare în administrarea GUI. Dar există de fapt mai multe moduri de a instala un modul din directorul de module. 

De exemplu, puteți instala modulul Modules Manager, care vă permite să răsfoiți, să descărcați, să instalați și să actualizați module chiar în GUI admin.

Cantitatea de module: Calitate peste cantitate

La momentul redactării, există aproximativ 370 de module pentru ProcessWire. Acum puteți compara acest număr cu cele aproximativ 40.500 de pluginuri WordPress care sunt acolo și această comparație este într-adevăr interesantă și dezvăluită în același timp. În urma acestui lucru, se pot trage câteva concluzii privind natura generală a ProcessWire și a modulelor sale și cum se compară cu pluginurile altor CMS:

  • ProcessWire nu este la fel de popular și răspândit ca WordPress, Joomla, Drupal și altele.
  • Modulele ProcessWire au de obicei o calitate a codului destul de mare. Ei fac un singur lucru și fac bine acest lucru.
  • Miezul ProcessWire de la sine este atât de puternic și flexibil, încât pur și simplu nu este necesar să adăugați o tona de module suplimentare pentru ao extinde. De exemplu, nu aveți nevoie de module pentru a crea prezentări de galerie, module pentru obținerea primului copil de ceva, module pentru generarea miniaturilor etc. Toate acestea (și multe altele) sunt deja acoperite cu funcționalitățile de bază ale ProcessWire.

Hooks

În timp ce cârligele sunt un subiect destul de avansat, este demn de remarcat și arată că funcționalitatea ProcessWire este menită să fie foarte ușor de modificat și extins. ProcessWire conține sute de metode pe care le puteți introduce, pentru a modifica comportamentul unei metode.

Să presupunem că am construit un simplu formular de contact utilizând API-ul sau Form Builder, iar unele dintre câmpuri sunt marcate după cum este cerut de back-end. Ceea ce vrem să realizăm este de a adăuga, de asemenea, marcajul corespunzător HTML5 front-end pentru câmpurile de formular cerute. ProcessWire face acest lucru destul de ușor. Suntem pur și simplu conectați la metoda de redare a câmpurilor de intrare și definiți ce vrem să personalizăm: Întrebați dacă este necesar câmpul, adăugați atributul front-end dorit și puneți un asterisc la sfârșitul etichetei de intrare.

$ formule-> addHookBefore ("Inputfield :: render", functie ($ event) $ field = $ event-> object; daca ($ field-> required) $ field-> attr ); $ field-> label. = "*";);

4. Nu ajunge în cale și oferă instrumente pentru a crea interfețe personalizate și ușor de utilizat

Unul dintre principalele lucruri pe care oamenii le place despre ProcessWire: Nu te împiedică. Se comportă așa cum doriți și se adaptează stilului dvs. de dezvoltare a unui site web. 

De exemplu, aveți control complet asupra rezultatelor marcajului și nu sunteți forțat să faceți o modalitate specifică de a dezvolta un șablon pe sistemul de fișiere. Dacă sunteți familiarizat cu stilul WordPress de a dezvolta lucruri, puteți continua așa cum sunteți obișnuiți. Sau dacă doriți să creați o arhitectură mai sofisticată, puteți utiliza o abordare inspirată de MVC și va funcționa la fel de bine.

După cum am menționat mai devreme, paginile nu au un set de câmpuri obligatorii, pentru ca ProcessWire să înțeleagă structura unei pagini. (Cel puțin nu sunt vizibile. Există câțiva câmpuri încorporate, cum ar fi referințele la părintele paginii sau numărul copiilor paginii etc.) Puteți să plasați 100 de câmpuri pe o pagină dacă doriți, să le comandați în orice mod doriți, specificați care sunt cerințele și care nu sunt, și le puteți pune în seturi de câmpuri diferite sau file pentru o experiență mai bună a interfeței utilizator.

Celălalt lucru pe care oamenii îl plac despre ProcessWire: Acesta oferă în mod natural instrumente pentru a crea interfețe personalizate, ușor de utilizat. V-am dat o scurtă privire la acest lucru în paragraful anterior. Nivelul de personalizare pentru șabloane este minunat. Odată ce ați experimentat acest lucru singur, veți înțelege de ce ProcessWire este mai mult un CMF decât un CMS. 

De exemplu: Fiecare câmp are atașat un context specific șablonului. Aceasta înseamnă că puteți specifica faptul că același câmp are o anumită etichetă, descriere și comportament într-un singur șablon și o etichetă, descriere și comportament complet diferite în alt șablon.

Un alt exemplu sunt dependențele de câmpuri de intrare: Acestea vă permit să specificați condițiile în care un anumit câmp din editorul de pagini este afișat sau necesar.

Și un alt exemplu este modulul PageTableExtended: permite utilizatorului să vizualizeze, să editeze și să modifice diferite părți ale paginii dvs. de pe site (pe care dvs., în calitate de dezvoltator, le definiți) într-un mod vizual și intuitiv.

Aceasta pentru mine este definiția de eleganță și profundă împuternicire.

Concluzie

Acest articol poate doar să zgârie suprafața a ceea ce puteți face cu ProcessWire și ce are de oferit. Lista marilor caracteristici este, pur și simplu, prea lungă și ar depăși domeniul de aplicare al acestui articol. Permiteți-mi să vă dau câteva zicale:

  • ProcessWire are mecanisme de caching mari (de exemplu, șablon și cache de marcare sau ProCache) și funcționează foarte bine. Scalabilitatea este, de asemenea, destul de impresionantă. Puteți avea literalmente milioane de pagini pe o singură instalare.
  • ProcessWire are o comunitate mică, dar fantastică. Consiliul de discuții este locul central pentru a discuta orice întrebări și probleme.
  • ProcessWire beneficiază de un suport multiplu lingvistic. Modulele multilingvistice fac parte din modulele de bază pre-ambalate. Este foarte ușor de configurat și menținut.
  • ProcessWire are capabilități excelente de gestionare a utilizatorilor, cu setări care sunt foarte detaliate și ușor de gestionat în același timp. De exemplu, puteți crea un rol pentru utilizatorii care au permisiunea exclusivă de a edita câmpurile în limba franceză și în nici o altă limbă.
  • Există o grămadă de teme de admin pe care le puteți alege pentru a schimba aspectul administrației GUI.
  • Securitatea este o prioritate pentru ProcessWire.
  • ProcessWire are o foaie de parcurs transparentă și dezvoltarea este foarte activă. Există noi versiuni minore aproape în fiecare săptămână.

Cu cât utilizați mai mult ProcessWire și cu cât internalizați mai mult conceptele de bază, API și arhitectura modulară, cu atât mai mult vă veți bucura să o utilizați. Veți realiza cât de puternice sunt instrumentele și fluxurile de lucru ale ProcessWire incredibil de puternice. S-ar putea spune că singurul lucru care te limitează în atingerea unui anumit scop cu ProcessWire este imaginația ta.

Permiteți-mi să termin prin citarea creatorului ProcessWire, Ryan Cramer: 

ProcessWire este un sistem care vă răsplătește prin a fi curios. Scopul nostru este să vă arătăm cum să pescuiți, astfel încât să puteți prinde peștii mari.

Unde să mergeți de aici

Link-uri utile și instrumente în jurul ProcessWire: 

  • Secțiunea de documentare a site-ului ProcessWire este o modalitate excelentă de a vă începe călătoria pentru a afla mai multe despre ProcessWire. Veți găsi informații despre API, structura directoarelor, fișiere șablon, selectori, suport multi-lingvistic și securitate.
  • ProcessWire Weekly este  sursă săptămânală de știri și actualizări ProcessWire.
  • ProcessWire.tv este o colecție care poate fi căutată cu ajutorul videoclipurilor tutorial ProcessWire.
  • wireshell este o interfață de linie de comandă pentru ProcessWire bazată pe componenta Symfony Console.
  • Padloper este o platformă de e-commerce construită pe partea de sus a ProcessWire.
  • ProcessWire Module Generator este o modalitate vizuală de a începe dezvoltarea modulelor cu o mulțime de exemple de bune practici de dezvoltare a modulelor.
  • ProcessWire Recipes este un director care își propune să colecteze mini-tutoriale pentru sarcinile și problemele obișnuite și nesoluționate ale ProcessWire, prezentate într-un format concis și spot-on, pentru a vă ajuta să vă dezvoltați cunoștințele despre ProcessWire.
  • ProcessWire Cheatsheet este o cheatchetă foarte utilă pentru toate metodele API disponibile.
  • Vizitați grap.pw pentru a descărca ultima versiune stabilă a ProcessWire.
  • Veți găsi o mulțime de conținut util și interesant care navighează prin conținutul cel mai placut al forumurilor oficiale de discuții ale ProcessWire.
  • Vezi ce alții au de spus despre ProcessWire în recenziile ProcessWire.
  • Check out unele site-uri alimentate de ProcessWire.
Cod