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.
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.
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:.
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:
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.
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.
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 $
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 "
De la versiunea 2.5.27 puteți scrie și cele de mai jos, după cum urmează:
ecou "
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.
$ 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
.
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:
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.
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:
Î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. = "*";);
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.
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:
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.
Link-uri utile și instrumente în jurul ProcessWire: