Nei giorni passati sono dovuto tornare a sviluppare un sitarello in Wordpress, chi mi conosce sa bene quanto sia profondo l'odio che nutro per questo cms, tuttavia ho deciso di approfittare dell'esperienza - definiamola così - per stilare quelli che sono per me i punti critici dello sviluppo attraverso questo sistema.
Wordpress implementa un sistema di plugin alquanto limitato in quanto non è presente, o è difficilmente realizzabile, una componente modulare in cui i moduli siano organizzati attraverso gerarchie e possano interfacciarsi tra loro. Data la natura del cms questo non è un grosso problema, il problema sorge quando (nella maggior parte dei casi) si voglia strutturare un progetto di una certa entità sopra questa limitata piattaforma.
Wordpress implementa di base due sole tipologie di contenuti: articolo e pagina. E' possibile creare differenti strutture di dati ma la procedura non è ne elegante e neppure semplice, sembra quasi sia stata implementata come pezza per gli smanettoni dato che non è presente alcuna interfaccia grafica per la loro strutturazione, tutto deve essere implementato da codice. Di conseguienza riuscire a gestire strutture di media complessità - magari con relazioni molti a molti - si trasforma presto in un'esperienza traumatica.
Questo è senza ombra di dubbio uno dei limiti più forti della piattaforma perché di fatto limita fortemente lo sviluppo di un progetto web, questo deve infatti essere strutturato per calzare a pennello nel cms, deve quindi essere limitato quando il buon senso indica che dovrebbe essere il cms a fornire una struttura semplice e funzionale per la strutturazione dei dati (Drupal, Symphony Cms, Expression Engine e Processwire ... implementano semplici interfacce grafiche per la strutturazione dei dati).
Come nel punto precedente mi sento in dovere di affermare che neanche questo sarebbe un grosso problema data la natura del cms, ovvero quella di gestire esclusivamente un weblog. Tuttavia la mia esperienza personale e la moltitudine di articoli sparsi anche su blog affermati nel settore indicano come sia crescente l'utilizzo di questo povero cms per progetti di media complessità (vogliamo elencare i plugin per la gestione di un webstore ecommerce ?).
In definitiva, la falsa credenza che Wordpress sia flessibile deve morire in quanto oggettivamente falsa.
Un altro pessimo esempio che fornisce Wordpress è la gestione delle cosidette 'viste' e del suo modello di templating engine che avviene quasi esclusivamente attraverso chiamate a funzioni php e non attraverso un linguaggio di markup intermedio (es: twig) che renderebbe i file dei temi facilmente leggibili, chi di voi ha mai acquistato un tema di media complessità sa quello che intendo se mai si è degnato di aprire i vari file .php presenti nei pacchetti.
Il fattore che più penalizza Wordpress sotto questo aspetto è che non viene fornita alcun sistema per la separazione della logica (il cosidetto 'controller' nei framework mvc) dalla vista e a meno di non riuscire ad arrangiarsi attraverso qualche inclusione di file ci si ritrova con dei file 'obesi' di codice procedurale mescolato a tag html.
Questo punto si commenta da solo, all'alba del 2012 non possono esistere sistemi che funzionino ancora attraverso codice procedurale. Questa non è la sede per esporre tutti i benefici della programmazione ad oggetti ma se ancora avete qualche dubbio, beh, Wordpress è il vostro cms.
Mi domando chi abbia avuto la faccia tosta di inserire nell'home page di wordpress.org la frase 'Code is poetry'.
Pochi mesi fa ho dovuto integrare Wordpress in un sito web sviluppato attraverso il noto framework CakePhp, l'ostacolo più duro da affrontare è stato sicuramente comprendere per filo e per segno la strutturazione del database, veramente 'particolare', definiamola così.
Tutti i contenuti del sito sono salvati in un unica tabella, gli altri dati seguono strane referenze ad altre tabelle e non è semplice eseguire query dirette al database, meglio usare un layer di astrazione (ne esistono sicuramente in giro per la rete).
Piccola domanda provocatoria. Come può essere flessibile un sistema che salva tutti i contenuti in un unica tabella del database ?
Ah, dimenticavo. Non ho mai compreso l'utilità di salvare tutti gli url delle pagine nel database, questo rende la pubblicazione (da un server locale, ad esempio) di un progetto sviluppato in Wordpress alquanto complessa dato che tutti gli url presenti nel db sono assoluti, potevano almeno renderli relativi.
Ebbene si, per quanto sia tanto carina da vedere l'interfaccia del backend di Wordpress è sicuramente ed oggettivamente confusionaria in quanto sono presenti a video troppi elementi, ne è la prova le decine di clienti che non capiscono come funziona (esperienze personali). Date un'occhiata al backend di Symphony Cms per comprendere cosa intendo per funzionale e semplice.
Un maniaco del minimalismo quale è l'autore non poteva sorvolare su questo aspetto :)
Questa è la cosa che più mi sta a cuore sottolineare. Wordpress è un sistema che fa del 'subito pronto' la sua arma principale (onore e merito, nessun'altro cms si preoccupa di questo aspetto) ma tutto è cambiato con l'avvento dei temi premium, dei framework per Wordpress e dei pannelli di gestione personalizzati, ognuno ha dovuto interpretare in maniera differente un determinato processo di implementazione di determinate feature.
Un esempio veloce: hai appena comprato un bellissimo tema premium perché ti piaceva quel simpatico slider di immagini, Ignori il fatto che Wordpress non gestisca nativamente questa funzione e dopo aver installato il tema noti che lo slider non compare, apri quindi la documentazione e comprendi che per attivare lo slider devi aprire il pannello di configurazione del tema, attivare l'opzione 'display slider' e selezionare la categoria di riferimento... occhio però che gli articoli in quella categoria devono avere il campo 'slider_image' compilato con l'url (magari relativo alla cartella 'porn_images' del tema, ok sto esagerando) dell'immagine precedentemente caricata nella sezione media. Mmmh, ok, hai già una discreta dimestichezza con Wordpress ed in 2 minuti riesci a caricare un bellissimo slider con le foto di Sophie Ellis Bextor (che il sottoscritto adora), Britney Spears e Paris Hilton in abiti succinti. Tutto bellissimo. Il problema è che devi spiegare al cliente la procedura il quale capisce ben poco quando gli parli di 'url', 'sezione media' e 'thumbnail'. Se tutto va bene il cliente ti scriverà una mail di spiegazioni ogni volta che vorrà aggiornare lo slider (credete veramente che possa ricordarsi tutta la procedura?), nella peggiore delle ipotesi ti chiederà di implementare un altro tema. Quest'ultimo ovviamente implementa una procedura totalmente differente, le conseguenze sono facilmente immaginabili.
Il mio odio verso Wordpress è nato dall'utilizzo della piattaforma, non mi sono mai schierato contro a priori anzi, in un primo periodo del mio processo di crescita come web designer ne ero totalmente estasiato, tanto che ho sviluppato e venduto online un paio di temi guadagnando anche una discreta sommetta.
Tuttavia per chi di design e sviluppo se ne intende un minimo è facile rendersi conto di tutti i limiti della piattaforma, basta utilizzare altri cms, basta conoscere un minimo di programmazione, basta quantificare le scocciature che permeano il processo di sviluppo di un progetto web con Wordpress. In definitiva, mi sento di consigliare Wp solamente a chi di sviluppo web non ne capisce nulla ed ha bisogno di un semplice weblog o di un portfolio lavori.
Fine ! Ora a voi la parola.