For noen uker siden snublet jeg på en A List Apart-artikkel med tittelen "Administrere Content Management System". Det gir anbefalinger om hvordan du begrenser og skreddersy brukerens frihet i en CMS-backend (Content Management System) med sikte på å gjøre det så enkelt som mulig å bruke.
Når jeg leser disse anbefalingene og sammenligner dem med de tekniske mulighetene til de store aktørene i dagens CMS-landskap, ser jeg mange begrensninger. De fleste av disse CMSene har rett og slett ikke slike muligheter og kan ikke gi nivået på alternativer for å ideelt tilpasse et back-end brukergrensesnitt. Men jeg jobber med ProcessWire i noen år, jeg tror jeg har funnet helligdommen for utviklere og brukere som vil ha det.
ProcessWire er en oppdatert, gratis, åpen kildekode PHP CMS og Content Management Framework (CMF). I hjertet er det basert på noen få enkle konsepter, og det gir verktøy som er super enkle å bruke og ekstremt kraftige samtidig. I denne oversiktsartikkelen vil jeg introdusere deg til noen av disse verktøyene og konseptene. Her er fire grunner til å velge ProcessWire som ditt neste CMS.
Datainngang og -utgang er basert på bare tre kjernekonsepter, og ingenting annet. Dette betyr at når du forstår disse konseptene, forstår du i utgangspunktet alt om ProcessWire og filosofien bak den. Ganske kul, ikke sant? Så, la meg introdusere deg til sider, Enger og maler.
På startsiden av ProcessWire-installasjonen ser du et enkelt, hierarkisk sidetre:
Koblingene du ser i treet kalles sider. Sider i back-endene reflekterer vanligvis siden som er sett i fronten. For eksempel er "Om" -siden i skjermbildet tilgjengelig i fronten ved å åpne your-domain.com/about/
.
Men sider trenger ikke å ha en motpart på fronten. De kan også bare eksistere i back-end, og fungere som databeholdere for andre sider. La setningen du nettopp har lest synkronisering i: Begrepet sider som bare er tilgjengelige i back-end er ganske kraftig fordi det åpner for uendelige muligheter for hvordan du kan strukturere nettstedet ditt og samhandle med innputtede data.
Du kan og bør bruke sider for nesten alt. For eksempel kan du ha en skjult innstillingsside der du lagrer ting som hovednavigasjon eller generell tekst som navn, slagord, opphavsrettsvarsel etc. på nettstedet ditt. Et annet eksempel ville være tagger og kategorier av blogginnlegg (tilsvarende taxonomier i WordPress). Du vil bare opprette sider for hver enkelt tag eller kategori av et blogginnlegg. La meg sitere Joss Sanglier med hensyn til sider i ProcessWire:
Sider i ProcessWire brukes til alle slags ting. De kan brukes som en markør i sidelisten. De kan brukes som en gruppeforelder for andre sider. De kan brukes som kategorier, koder eller lister eller brukere. Og de kan til og med brukes til enkle rullegardinvalg - bare for å levere en etikett og verdi.
La oss åpne og redigere ovennevnte "Om" -siden.
Du ser nå på neste kjernekonsept av ProcessWire: felt.
Sider inneholder Enger. Men felt må ses fra to forskjellige vinkler. Optisk er de en del av siden, fordi når du åpner en side, ser du felt du kan jobbe med. Teknisk er disse feltene en del av sidens mal. Jeg vil beskrive konseptet av maler senere; la oss først forstå feltene.
Felt i ProcessWire er beholderne som du legger inn data eller hvor du velger data, som tekst, tekstområder, tall, e-post, filopplastinger, andre sider, etc. Det er helt opp til deg hvor mange felt en side inneholder. Den kan bare ha en (for eksempel et felt for sidetittelen), eller ingen felt som helst (ikke veldig praktisk), eller mer enn 50 eller 100 felt.
ProcessWire har ikke begrepet tilpassede felt som WordPress gjør, fordi hvert felt i ProcessWire er et tilpasset felt. Du lager et felt og bestemmer hvilken type du vil ha (se skjermbilde nedenfor). Det er det!
Et felt kan få en etikett, en beskrivelse og noen notater for tilleggsinformasjon som vises under den. Hver felttype har sine egne innstillinger. La oss se på tre felttyper og noen innstillinger du kan gjøre for å få en følelse for dette:
Bunnlinjen er dette: Alle feltene du lager, er svært tilpassbare for å passe dine behov og behovene til de som lager og rediger innholdet i følgende.
Men hvordan vet en side hvilke felt det har i seg selv? Så, la oss se på maler.
Når du oppretter en ny side, må du velge en mal. Malen inneholder all informasjonen siden trenger å vite om innholdet (hvilke felt det har, hvordan disse feltene gjengis og hvordan de oppfører seg).
Nedenfor ser du feltene i malen basic-side
.
Ved å klikke på et felt åpnes et modalt vindu, der du kan endre innstillingene til feltet nøyaktig for den aktuelle malen.
En mal kan ha en fysisk PHP-fil med samme navn som er knyttet til det. Disse malfilene er plassert i / Site / templates /
. I en slik fil skriver du PHP-koden og HTML-merket som til slutt utgiver sidens innhold og gjør elementene en besøkende ser på siden på nettstedet ditt.
Hvis en mal ikke har en tilsvarende fil, kan en side i tilknytning til den ikke gjengis i frontenden som står på egen hånd. Det betyr ikke at du ikke kan få dataene på siden og skrive den ut et annet sted - du kan gjøre det ved å bruke en eksisterende malfil på en annen side.
La oss oppsummere det tekniske forholdet mellom sider, felt og maler: Du legger til felt i maler, og du velger en mal når du oppretter nye sider. Feltene du ser når du redigerer en side, er feltene du har lagt til den valgte malen.
Koden i malfilene dine vil for det meste bestå av noen få grunnleggende PHP-konstruksjoner som å tildele verdier til variabler, hvis
forhold, for hver
sløyfer og HTML-markering på den ene siden, og arbeider med ProcessWire API på den annen side.
Du kan tenke på API som en jQuery for PHP. Det gir metoder, selektorer, kjetting (flytende grensesnitt) og traversing evner.
API-en er trolig den eneste tingen som forbløffer meg mest om ProcessWire: Det er enkelt å bruke, lett å forstå, uttrykksfulle og kraftige på samme tid. Men viktigst, det lar deg utvikle raskt og ukomplisert, og du har faktisk moro samhandle med det. Det er bare fornuftig.
API Cheatsheet er en flott referanse. Den viser alle tilgjengelige metoder du kan jobbe med.
La meg nå introdusere deg til de to variablene som er utsatt for API som du vil håndtere mest under malutvikling: $ side
og $ sider
.
De $ side
variabel inneholder alle feltene som er spesifikke for siden som vises. Dette inkluderer innebygde felt, som er vanlige for alle sider, samt feltene som er spesifikke for denne ene siden alene.
Men hvordan kan du få tilgang til feltene til en side? La oss dykke rett inn ved å se på noen enkle eksempler.
Skriv ut innholdet i tekstfeltet som heter tittel
:
ekko $ side-> få ("tittel"); // eller ekko $ side-> tittel;
Vis navnet på sidens mal:
ekko "Denne siden bruker malen:". $ Side-> templat-> navn; // eller ekko "Denne siden bruker malen: $ side-> mal-> navn";
Lag en breadcrumb-navigasjon:
ekko "
Siden versjon 2.5.27 kan du også skrive ovenstående som følger:
ekko "
Bare utfør et bilde hvis det faktisk er lastet opp:
hvis ($ side-> bilde) ekko "";
Merk: Du må angi bildefeltet for å inneholde bare ett bilde for at dette skal fungere.
I det følgende er noen eksempler for når et bildefelt er satt til å inneholde flere bilder.
Ta tak i og skriv ut det første bildet:
$ image = $ side-> images-> first (); hvis ($ bilde) ekko "";
Ta tak i og skriv ut et tilfeldig bilde:
$ image = $ side-> images-> getRandom (); hvis ($ bilde) ekko "";
Syklus gjennom alle bildene, opprett et stort bilde med bredde på 500 piksler med proporsjonal høyde, og en miniatyrbilde på 100 × 100 med spesifikke kvalitets- og beskjæringsinnstillinger, og så har miniatyrlinken til den store varianten:
$ options = array ("quality" => 90, "cropping" => "sørøst"); foreach ($ side-> bilder som $ bilde) $ large = $ image-> width (500); $ thumb = $ image-> størrelse (100, 100, $ alternativer); ekko "url" ">";
Merk: ProcessWire vil lage bildene dine i hvilken størrelse som helst, og deretter beholde en cache av dem.
De $ sider
variabel er en referanse for alle sidene på nettstedet ditt. Dette gir deg tilgang til alt nettstedets innhold og sider fra hvor som helst du vil.
For de neste eksemplene refererer jeg til ProcessWires standard demo nettsted som gir en samling skyskrapere i USA.
Få en bestemt side og skriv ut tittelen:
ekko $ sider-> få ("/ byer / chicago / sears-tower /") -> tittel;
Merk: / Byer / Chicago / Sears-tower /
er den komplette banen som peker på Sears Tower-siden i hierarkiet av ProcessWires sidetre.
Finn alle skyskrapere med en høyde større enn 500 fot, og mindre enn eller lik 1000 fot:
$ skyskrapere = $ sider-> finn ("mal = skyskraper, høyde> 500, høyde<=1000");
Merk: høyde
er et felt inne i malen skyskraper
.
Finn alle skyskrapere bygget før 1950 med 10+ etasjer, sortert etter år nedstigende, deretter gulv nedstigende:
$ skyskrapere = $ sider-> finn ("mal = skyskraper, år<1950, floors>= 10, sorter = -år, sorter = -floors ");
Merk: år
og etasjer
er felt inne i malen skyskraper
.
Finn alle skyskrapere i Chicago med 60 + etasjer, sortert etter gulv stigende:
$ skyskrapere = $ sider-> få ("/ byer / chicago /") -> finn ("gulv> = 60, sorter = gulv");
Finn alle skyskrapere av arkitektene David Childs eller Renzo Piano, og sorter etter høyde synkende:
$ david = $ pages-> get ("/ architects / david-childs /"); $ renzo = $ sider-> få ("/ arkitekter / renzo-piano /"); $ skyskrapere = $ sider-> finn ("mal = skyskraper, arkitekter = $ david | $ renzo, sort = -høyde");
Merk: arkitekter
er et felt inne i malen skyskraper
.
ProcessWire selv består av en liten kjerne rammeverk (vurdere dette essensen av ProcessWire som gjør det mulig for de grunnleggende funksjonalitetene) og et sett med ferdigpakket moduler, som følger med hver installasjon. Noen av disse kjernemodulene er installert, og andre blir avinstallert som standard. Tenk på ProcessWire-moduler som WordPress-plugins: De utvider og tilpasser systemet.
ProcessWires modulære natur har noen gode fordeler:
Installere en modul er like enkelt som å dra modulens filer til / Site / moduler /
katalog og deretter klikke Installere i admin GUI. Men det er faktisk mange flere måter å installere en modul fra modulkatalogen på.
For eksempel kan du installere Modules Manager, som lar deg bla gjennom, laste ned, installere og oppdatere moduler rett i admin GUI.
På tidspunktet for skrivingen eksisterer rundt 370 moduler for ProcessWire. Du kan nå sammenligne det nummeret med de ca. 40 500 WordPress-pluginene som er der ute, og den sammenligningen er faktisk interessant og avslørende samtidig. Etter dette kan man trekke noen få konklusjoner om å tenke på prosessens generelle karakter og moduler, og hvordan de sammenligner med plugins for andre CMSs:
Mens kroker er et ganske avansert emne, er det bemerkelsesverdig og viser at funksjonaliteten til ProcessWire er ment å være super lett å endre og utvide. ProcessWire inneholder hundrevis av metoder du kan hekte inn, for å endre oppførselen til en metode.
La oss si at vi har bygget et enkelt kontaktskjema ved hjelp av API eller Form Builder, og noen av feltene er markert som kreves av backend. Det vi ønsker å oppnå, er å også legge til riktig HTML5 front-end markup for nødvendige skjemafelter. ProcessWire gjør dette ganske enkelt. Vi knytter ganske enkelt til gjengivelsesmetoden til inntastingsfelter og definerer hva vi vil tilpasse: Spør om feltet er påkrevd, legg til ønsket frontend-attributt og sett en stjerne på slutten av innskrivingsetiketten.
$ form-> addHookBefore ("Inputfield :: render", funksjon ($ event) $ field = $ event-> objekt; if ($ field-> required) $ field-> attr ("required", "required" ); $ field-> label. = "*";);
En av de viktigste tingene folk liker om ProcessWire: Det kommer ikke i veien. Det oppfører seg på den måten du vil ha det til og tilpasser seg stilen din med å utvikle et nettsted.
For eksempel har du full kontroll over utgangen av markup, og du blir ikke tvunget til en bestemt måte å utvikle en mal på filsystemet. Hvis du er kjent med WordPress-stilen med å utvikle ting, kan du fortsette akkurat som du er vant til. Eller hvis du vil lage en mer sofistikert arkitektur, kan du bruke en MVC-inspirert tilnærming, og det vil fungere like bra.
Som nevnt tidligere, har sidene ikke et sett med obligatoriske felt for at ProcessWire skal forstå strukturen på en side. (I det minste ikke synlige. Det er noen innebygde felt som referanser til sidens foreldre eller nummeret til sidens barn osv.) Du kan sette 100 felt på en side hvis du vil, bestille dem på noen måte du vil ha, angi hvilke som kreves og hvilke som ikke er, og du kan sette dem i forskjellige feltsett eller faner for en bedre brukergrensesnittopplevelse.
Den andre viktigste tingen folk liker om ProcessWire: Det gir naturlig verktøy for å skape skreddersydde, brukervennlige grensesnitt. Jeg ga deg et glimt av det i forrige avsnitt. Nivået på tilpasning for maler er tankegang. Når du har opplevd dette selv, vil du forstå hvorfor ProcessWire er mer en CMF enn et CMS.
For eksempel: Hvert felt har en malsspesifikke kontekst knyttet til den. Det betyr at du kan angi at ett og samme felt har en bestemt etikett, beskrivelse og oppførsel i en mal, og en helt annen etikett, beskrivelse og oppførsel i en annen mal.
Et annet eksempel er inputfeltavhengigheter: De lar deg spesifisere vilkårene der et bestemt felt i sideditoren vises eller kreves.
Og enda et eksempel er modulen PageTableExtended: den lar en bruker vise, redigere og endre de ulike delene av nettsiden din (som du definerer som utvikler) på en visuell og intuitiv måte.
Det for meg er definisjonen av elegant og dypt empowering.
Denne artikkelen kan bare skrape overflaten av hva du kan gjøre med ProcessWire og hva den har å tilby. Listen over flotte funksjoner er ganske enkelt satt for lang og vil gå utover omfanget av denne artikkelen. La meg gi deg et glimt av noen av disse:
Jo mer du bruker ProcessWire, og jo mer du internaliserer kjernekonceptene, API og dens modulære arkitektur, desto mer vil du ha det gøy å bruke det. Du vil innse hvor utrolig effektive ProcessWires verktøy og arbeidsflyter egentlig er. Man kan si at det eneste som begrenser deg i å oppnå et bestemt mål med ProcessWire, er din egen fantasi.
La meg fullføre ved å sitere skaperen av ProcessWire, Ryan Cramer:
ProcessWire er et system som belønner deg ved å være nysgjerrig. Vi tar sikte på å vise deg hvordan du skal fiske slik at du kan fange den store fisken.
Nyttige lenker og verktøy rundt ProcessWire: