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.
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.
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.
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:
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.
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.
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 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 "
Sinds versie 2.5.27 kun je het bovenstaande ook als volgt schrijven:
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
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
.
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:
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.
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:
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. = "*";);
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.
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:
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.
Handige links en tools rond ProcessWire: