Qualche settimana fa sono incappato in un articolo di A List Apart intitolato "Gestione del sistema di gestione dei contenuti". Fornisce raccomandazioni su come limitare e adattare la libertà degli utenti in un back-end del Content Management System (CMS) con l'obiettivo di renderlo il più semplice possibile da usare.
Leggendo queste raccomandazioni e confrontandole con le possibilità tecniche dei principali attori nell'attuale panorama CMS, vedo molte limitazioni. La maggior parte di questi CMS semplicemente non ha questo tipo di funzionalità e non può fornire il livello di opzioni per personalizzare idealmente un'interfaccia utente di back-end. Ma lavorando con ProcessWire per alcuni anni, penso di aver trovato il rifugio per sviluppatori e utenti che vogliono esattamente questo.
ProcessWire è un CMS PHP e Content Management Framework (CMF) open source, gratuito, open source. Fondamentalmente si basa su alcuni semplici concetti e fornisce strumenti estremamente semplici da usare ed estremamente potenti allo stesso tempo. In questo articolo di sintesi voglio presentarvi alcuni di questi strumenti e concetti. Ecco quattro motivi per scegliere ProcessWire come prossimo CMS.
L'input e l'output dei dati si basa su solo tre concetti chiave e nient'altro. Ciò significa che una volta compresi questi concetti, si capisce praticamente tutto su ProcessWire e la filosofia alla base. Piuttosto interessante, vero? Quindi, lascia che ti presenti pagine, i campi e modelli.
Nella pagina iniziale dell'installazione di ProcessWire viene visualizzato un singolo albero di pagine gerarchico:
I link che vedi nell'albero sono chiamati pagine. Le pagine nel back-end solitamente riflettono la pagina visualizzata nel front-end. Ad esempio, la pagina "Informazioni" nello screenshot è accessibile nel front-end aprendosi your-domain.com/about/
.
Ma le pagine non devono avere una controparte sul front-end. Possono anche esistere semplicemente nel back-end e fungere da contenitori di dati per altre pagine. Lascia che la frase che hai appena letto affondi: il concetto di pagine disponibili solo nel back-end è piuttosto potente perché apre infinite possibilità su come strutturare il tuo sito web e interagire con i dati immessi.
Puoi e dovresti usare le pagine per quasi tutto. Ad esempio, è possibile avere una pagina delle impostazioni nascoste, in cui si salvano elementi come la navigazione principale o un testo generale come il nome, lo slogan, le note sul copyright, ecc. Del proprio sito Web. Un altro esempio potrebbe essere tag e categorie di post del blog (equivalente a tassonomie in WordPress). Dovresti semplicemente creare pagine per ogni singolo tag o categoria di un post sul blog. Lasciatemi citare Joss Sanglier per quanto riguarda le pagine in ProcessWire:
Le pagine in ProcessWire sono utilizzate per tutti i tipi di cose. Possono essere usati come marker nella lista delle tue pagine. Possono essere usati come genitore di gruppo per altre pagine. Possono essere usati come categorie, tag o liste o utenti. E possono anche essere usati per semplici selezioni a discesa - solo per fornire un'etichetta e un valore.
Apriamo e modificiamo la sopracitata pagina "Informazioni".
Stai ora esaminando il prossimo concetto di base di ProcessWire: fields.
Le pagine contengono i campi. Ma i campi devono essere visti da due diversi angoli. Otticamente fanno parte della pagina, perché quando apri una pagina vedi campi su cui puoi lavorare. Tecnicamente questi campi fanno parte del modello della pagina. Descriverò il concetto di modelli più tardi; cerchiamo prima di capire i campi.
I campi in ProcessWire sono i contenitori in cui vengono inseriti i dati o dai quali si selezionano i dati, come testo, textareas, numeri, e-mail, caricamenti di file, altre pagine, ecc. È totalmente a vostra discrezione quanti campi contiene una pagina. Può avere solo uno (ad esempio un campo per il titolo della pagina), o nessun campo (non molto conveniente), o più di 50 o 100 campi.
ProcessWire non ha la nozione di campi personalizzati come fa WordPress, perché ogni campo in ProcessWire è un campo personalizzato. Crei un campo e decidi quale tipo vuoi (vedi screenshot qui sotto). Questo è tutto!
A un campo può essere assegnata un'etichetta, una descrizione e alcune note per ulteriori informazioni visualizzate sotto di essa. Ogni tipo di campo ha le proprie impostazioni. Diamo un'occhiata a tre tipi di campo e alcune impostazioni che puoi fare per avere un'idea di questo:
La linea di fondo è questa: ogni campo che crei è altamente personalizzabile per soddisfare esattamente le tue esigenze e le esigenze delle persone che creano e modificano il contenuto nel seguente.
Ma come fa una pagina a sapere quali campi ha in sé? Quindi, diamo un'occhiata ai modelli.
Quando crei una nuova pagina devi selezionare a modello. Il modello contiene tutte le informazioni che la pagina deve conoscere sul suo contenuto (quali campi ha, come sono resi questi campi e come si comportano).
Di seguito puoi vedere i campi del modello basic-page
.
Facendo clic su un campo si apre una finestra modale, in cui è possibile modificare le impostazioni del campo con precisione per quel modello.
Un modello può avere un file PHP fisico con lo stesso nome associato ad esso. Questi file di modello si trovano in / Site / templates /
. In tale file scrivi il codice PHP e il markup HTML che alla fine restituisce il contenuto della pagina e rende visibili gli elementi che un visitatore vede nella pagina del tuo sito web.
Se un modello non ha un file corrispondente, una pagina ad essa associata non può essere visualizzata in modo autonomo sul front-end. Ciò non significa che non puoi ottenere i dati di quella pagina e inviarla da qualche altra parte, puoi farlo usando un file modello esistente di un'altra pagina.
Riassumiamo la relazione tecnica tra pagine, campi e modelli: aggiungi campi ai modelli e selezioni un modello quando crei nuove pagine. I campi che vedi quando modifichi una pagina sono i campi che hai aggiunto al modello selezionato.
Il codice nei file del tuo modello consisterà principalmente in alcuni costrutti PHP di base come l'assegnazione di valori alle variabili, Se
condizioni, per ciascuno
loop e HTML markup da un lato, e lavorando con l'API ProcessWire dall'altro.
Puoi pensare all'API come a jQuery per PHP. Fornisce metodi, selettori, concatenamento (interfaccia fluente) e capacità di movimento.
L'API è probabilmente l'unica cosa che mi stupisce di più di ProcessWire: è facile da usare, facile da capire, espressivo e potente allo stesso tempo. Ma soprattutto ti permette di svilupparti in modo veloce e semplice, e in effetti lo hai divertimento interagendo con esso. Ha senso.
Il Cheatsheet API è un ottimo riferimento. Mostra tutti i metodi disponibili su cui puoi lavorare.
Ora lascia che ti presenti le due variabili esposte all'API che ti occuperai maggiormente durante lo sviluppo dei modelli: $ page
e $ pagine
.
Il $ page
variabile contiene tutti i campi specifici per la pagina visualizzata. Ciò include i campi predefiniti, comuni a tutte le pagine, nonché i campi specifici di questa sola pagina.
Ma come puoi accedere ai campi di una pagina? Entriamo nel vivo osservando alcuni semplici esempi.
Emettere il contenuto del campo di testo denominato titolo
:
echo $ page-> get ("title"); // o echo $ page-> title;
Mostra il nome del modello della pagina:
echo "Questa pagina sta usando il modello:". $ Page-> template-> nome; // o echo "Questa pagina sta usando il modello: $ page-> template-> name";
Genera una navigazione breadcrumb:
eco "
Dalla versione 2.5.27 puoi anche scrivere quanto sopra come segue:
eco "
Emetti un'immagine solo se è stata effettivamente caricata:
se ($ page-> image) echo "";
Nota: è necessario impostare il campo dell'immagine in modo che contenga solo un'immagine per far funzionare tutto questo.
Di seguito sono riportati alcuni esempi per quando un campo immagine è impostato per contenere più immagini.
Afferra e visualizza la prima immagine:
$ image = $ page-> images-> first (); if ($ image) echo "";
Afferra e genera un'immagine casuale:
$ image = $ page-> images-> getRandom (); if ($ image) echo "";
Scorri tutte le immagini, crea un'immagine grande a 500 pixel di larghezza con altezza proporzionale e una miniatura a 100 × 100 con impostazioni di qualità e ritaglio specifiche, quindi disponi del collegamento di anteprima alla variante più grande:
$ options = array ("quality" => 90, "cropping" => "southeast"); foreach ($ page-> immagini come $ immagine) $ grande = $ immagine-> larghezza (500); $ thumb = $ image-> size (100, 100, $ options); echo "url">";
Nota: ProcessWire creerà le tue immagini in qualsiasi dimensione al volo e ne manterrà una cache.
Il $ pagine
variabile è un riferimento di tutte le pagine del tuo sito. Ciò ti consente di accedere a tutti i contenuti e alle pagine del tuo sito da qualsiasi luogo tu voglia.
Per i prossimi esempi farò riferimento al sito demo standard di ProcessWire che fornisce una collezione di grattacieli negli Stati Uniti.
Ottieni una pagina specifica e produci il suo titolo:
echo $ pages-> get ("/ cities / chicago / sears-tower /") -> title;
Nota: / Città / Chicago / sears-tower /
è il percorso completo che punta alla pagina Sears Tower nella gerarchia dell'albero della pagina di ProcessWire.
Trova tutti i grattacieli con un'altezza superiore a 500 ft e inferiore o uguale a 1.000 ft:
$ skyscrapers = $ pages-> find ("template = skyscraper, height> 500, height<=1000");
Nota: altezza
è un campo contenuto all'interno del modello grattacielo
.
Trova tutti i grattacieli costruiti prima del 1950 con più di 10 piani, ordinati per anno decrescente, quindi piani decrescenti:
$ skyscrapers = $ pages-> find ("template = skyscraper, year<1950, floors>= 10, sort = -year, sort = -floors ");
Nota: anno
e piani
sono campi contenuti all'interno del modello grattacielo
.
Trova tutti i grattacieli di Chicago con più di 60 piani, ordinati per piani in ordine crescente:
$ skyscrapers = $ pages-> get ("/ cities / chicago /") -> find ("floors> = 60, sort = floors");
Trova tutti i grattacieli degli architetti David Childs o Renzo Piano e ordina per altezza decrescente:
$ david = $ pages-> get ("/ architects / david-childs /"); $ renzo = $ pages-> get ("/ architects / renzo-piano /"); $ skyscrapers = $ pages-> find ("template = skyscraper, architects = $ david | $ renzo, sort = -height");
Nota: architetti
è un campo contenuto all'interno del modello grattacielo
.
ProcessWire è costituito da un piccolo framework core (consideralo l'essenza di ProcessWire che abilita le funzionalità di base) e una serie di moduli preconfezionati, forniti con ogni installazione. Alcuni di questi moduli principali sono installati e altri vengono disinstallati per impostazione predefinita. Pensa ai moduli ProcessWire come plugin WordPress: estendono e personalizzano il sistema.
La natura modulare di ProcessWire presenta alcuni vantaggi:
Installare un modulo è facile come trascinare i file del modulo su / Site / modules /
directory e quindi facendo clic Installare nella GUI di amministrazione. Ma ci sono molti più modi per installare un modulo dalla directory dei moduli.
Ad esempio, è possibile installare Modules Manager, che consente di sfogliare, scaricare, installare e aggiornare i moduli direttamente nella GUI di amministrazione.
Al momento della scrittura, esistono circa 370 moduli per ProcessWire. Ora puoi confrontare quel numero con circa 40.500 plugin WordPress che sono là fuori, e quel confronto è davvero interessante e rivelatore allo stesso tempo. A seguito di ciò, si possono trarre alcune conclusioni sulla natura generale di ProcessWire e dei suoi moduli e su come si confrontano con i plugin di altri CMS:
Sebbene gli hook siano un argomento piuttosto avanzato, è degno di nota e mostra che la funzionalità di ProcessWire è stata concepita per essere super facile da modificare ed estendere. ProcessWire contiene centinaia di metodi che è possibile collegare, al fine di modificare il comportamento di un metodo.
Diciamo che abbiamo creato un semplice modulo di contatto utilizzando l'API o il Generatore di moduli e alcuni campi sono contrassegnati come richiesto dal back-end. Ciò che vogliamo ottenere è anche aggiungere il markup di front-end HTML5 appropriato per i campi di modulo richiesti. ProcessWire rende questo abbastanza facile. Semplicemente colleghiamo il metodo di rendering dei campi di input e definiamo ciò che vogliamo personalizzare: chiedi se il campo è richiesto, aggiungi l'attributo front-end desiderato e inserisci un asterisco alla fine dell'etichetta di input.
$ forms-> addHookBefore ("Inputfield :: render", function ($ event) $ field = $ event-> object; if ($ field-> required) $ field-> attr ("required", "required" ); $ campo-> etichetta. = "*";);
Una delle cose principali che piace alla gente su ProcessWire: Non ti ostacola. Si comporta nel modo in cui lo desideri e si adatta al tuo stile di sviluppo di un sito web.
Ad esempio, hai il controllo completo sull'output del markup e non sei obbligato a sviluppare un modello specifico sul file system. Se hai familiarità con lo stile di sviluppo WordPress, puoi continuare come sei abituato. O se vuoi creare un'architettura più sofisticata potresti usare un approccio ispirato a MVC e funzionerà altrettanto bene.
Come accennato in precedenza, le pagine non hanno un set di campi obbligatori per consentire a ProcessWire di comprendere la struttura di una pagina. (Almeno quelli non visibili Ci sono alcuni campi predefiniti come i riferimenti al genitore della pagina o il numero dei bambini della pagina, ecc.) Se vuoi, puoi mettere 100 campi in una pagina, ordinarli in qualsiasi modo vuoi, specifica quali sono richiesti e quali no, e puoi inserirli in insiemi di campi o schede diversi per una migliore esperienza di interfaccia utente.
L'altra cosa principale alla gente piace su ProcessWire: Fornisce naturalmente strumenti per creare interfacce personalizzate e user-friendly. Ti ho dato un assaggio di ciò nel paragrafo precedente. Il livello di personalizzazione per i modelli è strabiliante. Una volta sperimentato questo, capirai perché ProcessWire è più un CMF che un CMS.
Ad esempio: a ogni campo è associato un contesto specifico del modello. Ciò significa che è possibile specificare che uno e lo stesso campo ha una determinata etichetta, descrizione e comportamento in un modello e un'etichetta, una descrizione e un comportamento completamente diversi in un altro modello.
Un altro esempio sono le dipendenze di inputfield: consentono di specificare le condizioni in base alle quali viene mostrato o richiesto un determinato campo nell'editor di pagine.
E ancora un altro esempio è il modulo PageTableExtended: consente all'utente di visualizzare, modificare e modificare le diverse parti della pagina del sito Web (definite dall'utente come sviluppatore) in modo visivo e intuitivo.
Questo per me è la definizione di elegante e profondamente empowering.
Questo articolo può solo scalfire la superficie di ciò che puoi fare con ProcessWire e ciò che ha da offrire. L'elenco di grandi funzionalità è, in poche parole, troppo lungo e andrebbe oltre lo scopo di questo articolo. Permettetemi di darvi un'idea di alcuni di questi:
Più usi ProcessWire e più interiorizzi i concetti principali, l'API e la sua architettura modulare, più ti divertirai ad usarlo. Ti renderai conto di quanto siano incredibilmente potenti gli strumenti ei flussi di lavoro di ProcessWire. Si potrebbe dire che l'unica cosa che ti limita nel raggiungere un certo obiettivo con ProcessWire è la tua immaginazione.
Lasciatemi concludere citando il creatore di ProcessWire, Ryan Cramer:
ProcessWire è un sistema che ti ricompensa essendo curioso. Miriamo a mostrarti come pescare in modo da poter catturare il grosso pesce.
Link utili e strumenti intorno a ProcessWire: