4 redenen om ProcessWire als uw volgende CMS te kiezen

Een paar weken geleden struikelde ik over een artikel in A List Apart getiteld "Managing Your Content Management System". Het geeft aanbevelingen over het beperken en aanpassen van de vrijheid van gebruikers in een back-end van het Content Management Systeem (CMS) met als doel het zo eenvoudig mogelijk te maken om te gebruiken. 

Als ik deze aanbevelingen lees en ze vergelijk met de technische mogelijkheden van de grote spelers in het huidige CMS-landschap, zie ik veel beperkingen. De meeste van deze CMS's hebben eenvoudigweg niet dit soort mogelijkheden en kunnen niet het niveau van opties bieden om op ideale wijze een back-end gebruikersinterface aan te passen. Maar nu ik een paar jaar met ProcessWire samenwerk, denk ik dat ik het toevluchtsoord heb gevonden voor ontwikkelaars en gebruikers die precies dat willen.

ProcessWire is een up-to-coming, gratis, open source PHP CMS en Content Management Framework (CMF). Het is gebaseerd op een paar eenvoudige concepten en het biedt tools die super eenvoudig te gebruiken en extreem krachtig zijn op hetzelfde moment. In dit overzichtsartikel wil ik u kennis laten maken met enkele van deze hulpmiddelen en concepten. Hier zijn vier redenen om ProcessWire als uw volgende CMS te kiezen.

1. Het is gebaseerd op drie eenvoudige kernbegrippen: pagina's, velden en sjablonen

De invoer en uitvoer van gegevens is gebaseerd op slechts drie kernbegrippen en niets anders. Dit betekent dat u, eenmaal u deze concepten begrijpt, in essentie alles begrijpt over ProcessWire en de filosofie erachter. Best cool, toch? Dus laat me je voorstellen pagina's, velden en templates.

Pages

Op de startpagina van uw ProcessWire-installatie ziet u een enkele, hiërarchische paginaboom:

De koppelingen die u in de structuur ziet, worden gebeld pagina's. Pagina's in de back-end weerspiegelen meestal de pagina die in de front-end wordt weergegeven. De "Over" -pagina in de schermafbeelding is bijvoorbeeld toegankelijk via de opening your-domain.com/about/

Maar pagina's hoeven geen tegenhanger te hebben aan de voorkant. Ze kunnen ook gewoon in de back-end bestaan ​​en dienen als gegevenscontainers voor andere pagina's. Laat de zin die je net hebt gelezen inzinken: het concept van pagina's dat alleen beschikbaar is in de back-end is behoorlijk krachtig omdat het eindeloze mogelijkheden opent voor het structureren van je website en het werken met ingevoerde gegevens.

U kunt-en zou-pagina's voor bijna alles moeten gebruiken. U kunt bijvoorbeeld een pagina met verborgen instellingen hebben, waarin u dingen zoals de hoofdnavigatie of algemene tekst zoals de naam, de slogan, de copyrightkennisgeving, enz. Van uw website kunt opslaan. Een ander voorbeeld zijn tags en categorieën blogposts (equivalent aan taxonomieën in WordPress). U zou gewoon pagina's maken voor elke afzonderlijke tag of categorie van een blogpost. Laat me Joss Sanglier citeren met betrekking tot pagina's in ProcessWire:

Pagina's in ProcessWire worden voor allerlei dingen gebruikt. Ze kunnen worden gebruikt als een markering in uw lijst met pagina's. Ze kunnen worden gebruikt als groepsouder voor andere pagina's. Ze kunnen worden gebruikt als categorieën, tags of lijsten of gebruikers. En ze kunnen zelfs worden gebruikt voor eenvoudige vervolgkeuzemenu's - alleen om een ​​label en waarde te leveren.

Laten we de eerder genoemde "Over" -pagina openen en bewerken.

U kijkt nu naar het volgende kernconcept van ProcessWire: fields.

Fields

Pagina's bevatten velden. Maar velden moeten vanuit twee verschillende hoeken worden bekeken. Optisch maken ze deel uit van de pagina, omdat je bij het openen van een pagina velden ziet waarmee je kunt werken. Technisch gezien maken deze velden deel uit van de sjabloon van de pagina. Ik zal het concept van sjablonen later beschrijven; Laten we eerst de velden begrijpen.

Velden in ProcessWire zijn de containers waarin u gegevens plaatst of waaruit u gegevens selecteert, zoals tekst, tekstgebieden, nummers, e-mails, bestandsuploads, andere pagina's, enz. Het is aan u om te bepalen hoeveel velden een pagina bevat. Het kan er maar één hebben (bijvoorbeeld een veld voor de paginatitel), of geen velden (niet erg handig), of meer dan 50 of 100 velden. 

ProcessWire heeft niet het idee van aangepaste velden zoals WordPress doet, omdat elk veld in ProcessWire is een aangepast veld. U maakt een veld en beslist welk type u wilt (zie screenshot hieronder). Dat is het!

Een veld kan een label, een beschrijving en enkele opmerkingen krijgen voor aanvullende informatie die eronder staat. Elk veldtype heeft zijn eigen instellingen. Laten we kijken naar drie veldtypen en een aantal instellingen die u kunt maken om een ​​gevoel te krijgen voor dit:

  • textarea veldtype: u kunt bepalen of het wordt weergegeven als een eenvoudig tekstveld of als een rich-text-editor (standaard CKEditor). U kunt beslissen welke knoppen in de CKEditor-werkbalk moeten verschijnen en zelfs aangepaste configuratie-opties rechtstreeks in de beheerdersinterface moeten invoeren.
  • Pagina veldtype: u kunt een pagina aan een andere pagina koppelen en zo een relatie tussen deze pagina's maken. U kunt een pagina (één-op-één-relatie) of meerdere pagina's (een-op-veel-relatie) koppelen. U kunt zelfs het maken van nieuwe pagina's vanuit een paginaveld toestaan.
  • Beeld veldtype: u kunt opgeven welk beeldtype (extensie) kan worden geüpload. U kunt de minimale of / en maximale hoogte en breedte opgeven die deze moet hebben om in aanmerking te komen voor uploaden.

De bottom line is dit: elk veld dat u maakt, is in hoge mate aanpasbaar om exact te passen bij uw behoeften en de behoeften van de mensen die de inhoud maken en bewerken in het volgende.

Maar hoe weet een pagina welke velden hij op zich heeft? Laten we eens kijken naar sjablonen.

templates

Wanneer u een nieuwe pagina maakt, moet u a selecteren sjabloon. De sjabloon bevat alle informatie die de pagina over de inhoud moet weten (welke velden zijn er, hoe deze velden worden weergegeven en hoe ze zich gedragen).

Hieronder ziet u de velden van de sjabloon basic-pagina.

Als u op een veld klikt, wordt een modaal venster geopend, waarin u de instellingen van het veld precies voor die sjabloon kunt wijzigen.

Op een sjabloon kan een fysiek PHP-bestand met dezelfde naam worden gekoppeld. Deze sjabloonbestanden bevinden zich in / Site / templates /. In zo'n bestand schrijf je de PHP-code en de HTML-markup die uiteindelijk de pagina-inhoud uitvoert en de elementen die een bezoeker op de pagina van je website ziet rendert. 

Als een sjabloon niet zo'n overeenkomend bestand heeft, kan een bijbehorende pagina niet worden gerenderd in het front-end dat op zichzelf staat. Dat betekent niet dat u de gegevens van die pagina niet kunt krijgen en deze ergens anders kunt uitvoeren - u kunt dat doen door een bestaand sjabloonbestand van een andere pagina te gebruiken.

Laten we de technische relatie tussen pagina's, velden en sjablonen samenvatten: u voegt velden toe aan sjablonen en u selecteert een sjabloon wanneer u nieuwe pagina's maakt. De velden die u ziet wanneer u een pagina bewerkt, zijn de velden die u aan de geselecteerde sjabloon hebt toegevoegd.

2. Het heeft een API om verliefd op te worden

De code in uw sjabloonbestanden bestaat meestal uit enkele eenvoudige PHP-constructies, zoals het toewijzen van waarden aan variabelen, als voorwaarden, foreach loops en HTML-markeringen enerzijds en het werken met de API van ProcessWire anderzijds. 

Je kunt de API zien als een jQuery voor PHP. Het biedt methoden, selectors, chaining (vloeiende interface) en traversing-mogelijkheden.

De API is waarschijnlijk het enige dat me het meest verbaast over ProcessWire: het is eenvoudig te gebruiken, gemakkelijk te begrijpen, expressief en krachtig tegelijkertijd. Maar het belangrijkste is dat je je op een snelle en ongecompliceerde manier kunt ontwikkelen en dat je dat ook daadwerkelijk hebt pret er interactie mee hebben. Het is gewoon logisch.

De API Cheatsheet is een goede referentie. Het toont alle beschikbare methoden waarmee u kunt werken.

Laat me u nu de twee variabelen voorstellen die worden blootgesteld aan de API waarmee u het meest te maken krijgt tijdens de ontwikkeling van de sjabloon: $ pagina en $ pagina's.

De $ pagina variabele

De $ pagina variabele bevat alle velden die specifiek zijn voor de pagina die wordt bekeken. Dit omvat ingebouwde velden die voor alle pagina's gelden, evenals de velden die specifiek zijn voor deze ene pagina alleen.

Maar hoe kunt u toegang krijgen tot de velden van een pagina? Laten we een duik nemen door enkele eenvoudige voorbeelden te bekijken.

Voer de inhoud van het genoemde tekstveld uit titel:

echo $ page-> get ("titel"); // of echo $ pagina-> titel;

Toon de naam van de paginasjabloon:

echo "Deze pagina gebruikt de sjabloon:". $ Pagina-> template> name; // of echo "Deze pagina gebruikt de sjabloon: $ page-> template-> name";

Genereer een broodkruimelnavigatie:

echo "
    "; foreach ($ page-> parents as $ parent) echo"
  • url "> $ ouder-> title
  • "; echo"
";

Sinds versie 2.5.27 kun je het bovenstaande ook als volgt schrijven:

echo "
    "; echo $ page-> parents-> each ("
  • titel
  • "); echo"
";

Geef een afbeelding alleen weer als deze daadwerkelijk is geüpload:

if ($ page-> image) echo "";

Opmerking: u moet uw afbeeldingsveld instellen op slechts één afbeelding om dit te laten werken.

Hierna enkele voorbeelden voor wanneer een afbeeldingsveld is ingesteld om meerdere afbeeldingen te bevatten.

Pak en voer de eerste afbeelding uit:

$ image = $ page-> images-> first (); if ($ afbeelding) echo "";

Grijp en voer een willekeurige afbeelding uit:

$ image = $ page-> images-> getRandom (); if ($ afbeelding) echo ""; 

Blader door alle afbeeldingen, maak een grote afbeelding met een breedte van 500 pixels met een proportionele hoogte en een miniatuur op 100 × 100 met specifieke instellingen voor kwaliteit en bijsnijden en vervolgens de miniatuurlink naar de grote variant:

$ options = array ("quality" => 90, "cropping" => "zuidoosten"); foreach ($ pagina-> afbeeldingen als $ afbeelding) $ large = $ image-> width (500); $ thumb = $ image-> size (100, 100, $ opties); echo "url">"; 

Opmerking: ProcessWire maakt uw afbeeldingen op elk gewenst moment op elk gewenst formaat en bewaart er vervolgens een cache van.

De $ pagina's Variable

De $ pagina's variabele is een verwijzing van alle pagina's op uw site. Hiermee kunt u vanaf elke gewenste locatie toegang krijgen tot alle inhoud en pagina's van uw site.

Voor de volgende voorbeelden verwijs ik naar de standaard demosite van ProcessWire, die een verzameling wolkenkrabbers in de Verenigde Staten biedt.

Krijg een specifieke pagina en voer de titel uit:

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

Notitie: / Steden / Chicago / schroeit-tower / is het volledige pad naar de Sears Tower-pagina in de hiërarchie van de paginaboom van ProcessWire.

Vind alle wolkenkrabbers met een hoogte van meer dan 500 ft en minder dan of gelijk aan 1.000 ft:

$ skyscrapers = $ pages-> find ("template = skyscraper, height> 500, height<=1000");

Notitie: hoogte is een veld binnen de sjabloon wolkenkrabber.

Vind alle wolkenkrabbers die vóór 1950 zijn gebouwd met 10 + verdiepingen, gesorteerd op jaaraflopend en daarna op verdiepingen:

$ skyscrapers = $ pages-> find ("template = skyscraper, jaar<1950, floors>= 10, sort = -jaar, sort = -floors ");

Notitie: jaar en vloeren zijn velden binnen de sjabloon wolkenkrabber.

Vind alle wolkenkrabbers in Chicago met 60+ verdiepingen, gesorteerd op verdiepingen in stijgende:

$ skyscrapers = $ pages-> get ("/ cities / chicago /") -> find ("floors> = 60, sort = floors");

Vind alle wolkenkrabbers van architect David Childs of Renzo Piano en sorteer op hoogte aflopend:

$ david = $ pages-> get ("/ architects / david-childs /"); $ renzo = $ pages-> get ("/ architects / renzo-piano /"); $ skyscrapers = $ pages-> find ("template = skyscraper, architects = $ david | $ renzo, sort = -height");

Notitie: architecten is een veld binnen de sjabloon wolkenkrabber.

3. Het is gebouwd rond een modulaire en eenvoudig uitbreidbare architectuur

ProcessWire zelf bestaat uit een klein kernraamwerk (beschouw dit als de essentie van ProcessWire die de basisfunctionaliteiten mogelijk maakt) en een set voorverpakte modules, die bij elke installatie worden meegeleverd. Sommige van deze kernmodules zijn standaard geïnstalleerd en andere zijn standaard gedeïnstalleerd. Denk aan ProcessWire-modules als WordPress-plug-ins: ze breiden het systeem uit en passen het aan.

Het modulaire karakter van ProcessWire heeft een paar aardige voordelen:

  • De codebasis is meer houdbaar omdat kernfunctionaliteiten geïsoleerd zijn en ontkoppeld van andere delen van het systeem, wat ook de algehele sterk verhoogt veiligheid.
  • De ontwikkeling van nieuwe functies wordt vereenvoudigd en bugs kunnen veel gemakkelijker en sneller worden getarget en gefixeerd.
  • Upgrades naar nieuwere versies van ProcessWire of enkele modules zijn meestal een goed idee en u hoeft zich geen zorgen te maken dat na een upgrade alles kapot is.

Modules installeren

Het installeren van een module is net zo eenvoudig als het slepen van de modulebestanden naar de / Site / modules / map en klik vervolgens op Installeren in de beheerdersinterface. Maar er zijn nog veel meer manieren om een ​​module uit de modules-directory te installeren. 

U kunt bijvoorbeeld Modules Manager installeren, waarmee u modules kunt doorbladeren, downloaden, installeren en bijwerken in de beheerdersinterface.

Aantal modules: Kwaliteit boven hoeveelheid

Op het moment van schrijven bestaan ​​er ongeveer 370 modules voor ProcessWire. Je kunt nu dat aantal vergelijken met de ongeveer 40.500 WordPress-plug-ins die er zijn, en die vergelijking is inderdaad interessant en onthullend op hetzelfde moment. Hierna kan een aantal conclusies worden getrokken met betrekking tot de algemene aard van ProcessWire en zijn modules, en hoe deze zich verhouden tot plug-ins van andere CMS's:

  • ProcessWire is lang niet zo populair en wijdverbreid als WordPress, Joomla, Drupal en anderen.
  • ProcessWire-modules hebben meestal een behoorlijk hoge codekwaliteit. Ze doen één ding en doen dat ding goed.
  • De ProcessWire-kern is op zichzelf zo krachtig en flexibel dat het eenvoudigweg niet nodig is om een ​​heleboel extra modules toe te voegen om deze uit te breiden. U hebt bijvoorbeeld geen modules nodig voor het maken van diavoorstellingen op een galerij, modules om het eerste kind van iets te krijgen, modules voor het genereren van miniaturen, enz. Dat alles (en nog veel meer) is al bedekt met de basisfunctionaliteiten van ProcessWire..

haken

Hoewel hooks een vrij geavanceerd onderwerp zijn, is het opmerkelijk en laat het zien dat de functionaliteit van ProcessWire supereenvoudig is om te veranderen en uit te breiden. ProcessWire bevat honderden methoden waarmee u kunt aanhaken om het gedrag van een methode te wijzigen.

Laten we zeggen dat we een eenvoudig contactformulier hebben gebouwd met behulp van de API of de Form Builder en sommige velden zijn gemarkeerd zoals vereist door de back-end. Wat we willen bereiken, is ook de juiste HTML5-frontendmarkering voor vereiste formuliervelden toe te voegen. ProcessWire maakt dit vrij eenvoudig. We nemen eenvoudigweg deel aan de weergavemethode van invoervelden en definiëren wat we willen aanpassen: vraag of het veld is vereist, voeg het gewenste kenmerk van de front-end toe en plaats een asterisk aan het einde van het invoerlabel.

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

4. Het komt niet op uw manier en het biedt hulpmiddelen om op maat gemaakte, gebruikersvriendelijke interfaces te maken

Een van de belangrijkste dingen die mensen leuk vinden aan ProcessWire: Het houdt je niet in de weg. Het gedraagt ​​zich zoals jij het wilt en past zich aan jouw stijl van ontwikkeling van een website aan. 

U hebt bijvoorbeeld volledige controle over de uitvoer van markup en u wordt niet gedwongen een specifieke manier te ontwikkelen om een ​​sjabloon in het bestandssysteem te ontwikkelen. Als u bekend bent met de WordPress-stijl van het ontwikkelen van dingen, kunt u doorgaan zoals u gewend bent. Of als u een meer geavanceerde architectuur wilt maken, kunt u een MVC-geïnspireerde benadering gebruiken en het zal net zo goed werken.

Zoals eerder vermeld, hebben pagina's geen verplichte velden om ProcessWire de structuur van een pagina te laten begrijpen. (Tenminste niet zichtbare velden.) Er zijn een paar ingebouwde velden zoals verwijzingen naar het bovenliggende object van de pagina of het aantal kinderen van de pagina, enz.) U kunt 100 velden op een pagina plaatsen als u wilt, op elke manier bestellen u wilt, specificeer welke benodigd zijn en welke niet, en u kunt ze in verschillende veldsets of tabs plaatsen voor een betere UI-ervaring.

Het andere belangrijkste wat mensen leuk vinden aan ProcessWire: Het biedt natuurlijk hulpmiddelen om op maat gemaakte, gebruikersvriendelijke interfaces te maken. Ik gaf je een glimp van dat in de vorige paragraaf. Het aanpassingsniveau voor sjablonen is verbluffend. Als u dit zelf hebt ervaren, begrijpt u waarom ProcessWire meer een CMF is dan een CMS. 

Bijvoorbeeld: elk veld heeft een sjabloonspecifieke context die eraan is gekoppeld. Dat betekent dat u kunt aangeven dat een en hetzelfde veld een bepaald label, beschrijving en gedrag heeft in één sjabloon en een geheel ander label, beschrijving en gedrag in een andere sjabloon.

Een ander voorbeeld zijn afhankelijkheid van invoervelden: hiermee kunt u de voorwaarden opgeven waaronder een bepaald veld in de pagina-editor wordt weergegeven of vereist.

En nog een ander voorbeeld is de module PageTableExtended: hiermee kan een gebruiker de verschillende delen van uw webpagina (die u als ontwikkelaar definieert) op een visuele en intuïtieve manier bekijken, bewerken en wijzigen.

Dat is voor mij de definitie van elegant en diep empowerend.

Conclusie

Dit artikel kan alleen maar de oppervlakte schetsen van wat u kunt doen met ProcessWire en wat het te bieden heeft. De lijst met geweldige functies is eenvoudigweg te lang en zou verder gaan dan de reikwijdte van dit artikel. Ik zal u een paar van deze dingen laten zien:

  • ProcessWire heeft geweldige caching-mechanismen (bijvoorbeeld template en markup cache of ProCache) en presteert erg goed. Schaalbaarheid is ook behoorlijk indrukwekkend. U kunt letterlijk miljoenen pagina's op één installatie hebben.
  • ProcessWire heeft een kleine maar fantastische community. Het discussiebord is de centrale plaats om eventuele vragen en problemen te bespreken.
  • ProcessWire heeft geweldige ondersteuning voor meerdere talen. De meertalige modules maken deel uit van de voorverpakte kernmodules. Het is heel gemakkelijk in te stellen en te onderhouden.
  • ProcessWire heeft geweldige ingebouwde gebruikersbeheermogelijkheden met instellingen die zeer gedetailleerd en eenvoudig te beheren zijn op hetzelfde moment. U kunt bijvoorbeeld een rol maken voor gebruikers die de enige rechten hebben om velden in het Frans en in geen enkele andere taal te bewerken.
  • Er zijn een heleboel beheersthema's waaruit u kunt kiezen om het uiterlijk van de beheerdersinterface te wijzigen.
  • Beveiliging is een topprioriteit voor ProcessWire.
  • ProcessWire heeft een transparante routekaart en de ontwikkeling is zeer actief. Er zijn bijna elke week nieuwe kleine releases.

Hoe meer u ProcessWire gebruikt en hoe meer u de kernconcepten, de API en de modulaire architectuur ervan internaliseert, hoe meer u er plezier aan zult beleven. U zult zich realiseren hoe ongelooflijk krachtig de tools en workflows van ProcessWire zijn. Je zou kunnen zeggen dat het enige wat je beperkt in het bereiken van een bepaald doel met ProcessWire, je eigen verbeeldingskracht is.

Ik wil afsluiten met een citaat van de maker van ProcessWire, Ryan Cramer: 

ProcessWire is een systeem dat u beloont door nieuwsgierig te zijn. We proberen je te laten zien hoe je kunt vissen, zodat je de grote vis kunt vangen.

Waar te gaan vanaf hier

Handige links en tools rond ProcessWire: 

  • Het documentatiegedeelte van de website van ProcessWire is een geweldige manier om uw reis te beginnen en meer te leren over ProcessWire. U vindt informatie over de API, de directorystructuur, sjabloonbestanden, selectors, meertalige ondersteuning en beveiliging.
  • ProcessWire Weekly is de wekelijkse bron van nieuws en updates van ProcessWire.
  • ProcessWire.tv is een doorzoekbare verzameling van Tutorial-video's van ProcessWire.
  • wireshell is een opdrachtregelinterface voor ProcessWire op basis van de Symfony Console-component.
  • Padloper is een e-commerce platform dat bovenop ProcessWire is gebouwd.
  • ProcessWire Module Generator is een visuele manier om moduleontwikkeling te starten met veel best practices voor het ontwikkelen van modules.
  • ProcessWire Recepten is een directory die minitutorials wil verzamelen voor veel voorkomende en minder algemene ProcessWire-taken en -problemen, gepresenteerd in een beknopt en aanklikbaar formaat om u te helpen uw ProcessWire-beheersing te laten groeien.
  • ProcessWire Cheatsheet is een zeer bruikbare cheatsheet voor alle beschikbare API-methoden.
  • Ga naar grap.pw om de nieuwste stabiele versie van ProcessWire te downloaden.
  • U zult veel nuttige en interessante inhoud vinden die door de meest geliefde inhoud van de officiële discussieforums van ProcessWire bladert.
  • Lees wat anderen te zeggen hebben over ProcessWire in de ProcessWire Reviews.
  • Bekijk enkele sites mogelijk gemaakt door ProcessWire.