 La prima delle due lati in talk è quella di Matteo, Matteo è un conterraneo, quindi bello, vivo il medio campidano, è un full stack livello per the open source evangelist, ha appassionato di informatica ma ha trovato praticamente il suo cammino dopo una stash che gli ha aperto le porte di warpress e quindi ora è anche un affezionato frequentatore della community e dei war camp e oggi ci offre un punto di vista interessante partendo dall'esperienza di Drupal che è direcente, è diventato un CMF, un content manager framework e quindi Matteo ci dirà come anche warpress ha il potenziale per andare verso la stessa strada. Ok, grazie Matteo. Ciao a tutti, oggi parleremo come anticipato la differenza tra CMS e CMF con un particolare occhio al back-end e quindi come se lisano moduli, plugin, le regole di rooting, il pattern model via controller, la differenza tra post type e tessonomia e content management. Inizio prima a presentarmi, sono un sviluppatore web e open source evangelist. Come sviluppatore web mi occupo principalmente di PHP, con warpress mi piace saltare tra il back e il front invece su Drupal mi sono formato come back-end. Quelli a fianco alla mia faccia sono alcuni dei progetti con cui lavoro. Tra questi c'è doing, una platforma in cui dedicò quasi il 90% del mio tempo. Con questa startup, inizialmente utilizzavamo un CMS proprietario, con un cambio di CTO abbiamo iniziato a una migrazione con Drupal. Una cosa particolare è che Drupal dalla versione 8 è diventato un CMF, quindi togliendo la S e mettendo la F di framework. Come tutti sviluppatori conosciamo, lavorare con un framework ci dà moltissime comodità. Drupal per chi non lo conoscesse è un CMS open source, un famosissimo in ambito al government e i company. Drupal della versione 8 come ho detto ha integrato symphony, symphony è uno dei framework PHP più utilizzati, è rilasciato tramite una licenza Meet quindi open source. Solitamente per lavorare su Drupal si fanno le classificazioni che facciamo anche con WordPress per esempio, creiamo i moduli oppure creiamo i tassoni da CMS e lo avremo sui temi. Con la creazione dei moduli, per esempio, creò la mia directory, inizio a metterci file principali, un info yaml e un modules, questi due servono come l'intestazione del nostro punto PHP di WordPress e poi creo le mie funzioni che possono essere o una rotta o il path che noi troviamo in alto oppure ci aggancio un hook, un uncino, ha una determinata azione io eseguo altre. Le tassonomie sono come nel WordPress delle categorizzazioni dei nostri oggetti tipo i tag o le categorie, i custom type invece sono gli articoli e i nostri post, custom fieldi invece sono tutti gli attributi che i nostri articoli e post utilizzano. Una delle funzionalità che mi piace particolarmente di Drupal è Drash. Drash è purtroppo un modulo quindi non è installato nel core però mi permette tramite riga di comando di eseguire backup, di fare export e import sia di file che delle configurazioni e agire sulla cache. Una cosa interessante della cache di Drupal è che non solo mi permette di memorizzare i template ma mi permette anche di salvarmi i metadata. Il database di Drupal è un po' particolare, è un po' particolare. Come su WordPress per esempio abbiamo le nostre tabelle in cui salviamo tutti i dati dei nostri post, dei nostri articoli eccetera. Purtroppo Drupal utilizza una una tabella per ogni per ogni field quindi se il nostro custom type ha dieci attributi quando mostrerò il mio attributo dovrà fare dieci join. Se per esempio un utente personalizzato è a 25, 30, 50 a field deve fare 50 a field. La cache di Drupal ci permette anche di mettere in cache un oggetto non per forza una vista quindi per risfermare tanto tutto il tempo che utilizziamo per generare. Partiamo subito con esempio essendo un lightning talk ho preferito mettere in pratica un esempio pratico. In questo caso il nostro plugin sono le Quotes del giorno. La funzionalità consisteva in questi punti sono composte da una frase, un utente, la data. Queste Quotes posso vederle sia singolarmente che dentro un archivio. Ogni volta che visite una pagina, qualsiasi pagina sia voglio che me ne straga una casualmente. Ok, primo punto. Drupal permette semplicemente da CMS la creazione di un custom type con tutti field. Non vi ho detto prima che nell'esempio io cerco anzi non voglio utilizzare plug-in esterni o moduli esterni quindi tutto nativo. Quindi secondo punto la visualizzazione del nostro custom field in poche parole e Drupal in automatico mi crea la singola pagina, la vista della singola pagina però purtroppo non esiste la pagina archivio quindi andremo ne a crearlo con un modulo. Anche per la creazione della visualizzazione di una Quotes casuale d'avremo bisogno di modificare il nostro modulo. Quindi imposto il file in questo modo. Creo la cartella Quotes, dentro ci metto Quotes.yaml, QuotesRooting.yaml, Quotes.moodles e QuotesController.php. Quest'ultimo lo metto dentro Quotes SRC controller. Più o meno sulla destra vediamo come saranno strutturati i testi dei nostri file. Il primo è soltanto un'intestazione, quello che vedremo nel nostro pannello di controllo per rattivare e disattivare il nostro modulo. Il secondo è quello che giustice la rotta in poche parole andando su slash hub Quotes mi genera il nostro archivio di Quotes e poi abbiamo le nostre funzioni. La prima funzione è quella che ci serve per generale il nostro hub. Quindi in modo abbastanza aggressivo, subito una quì nel database con le classi che ci offre Drupal. Chiediamo il dato che ci interessa, questo è l'id del nostro custom type, la condizione quindi deve essere di tipo quota, come ordinarle, che deve essere pubblico in una bozza e poi esegue la nostra query. Qua l'ha formato in modo che ci fiene più comodo e questo serve in poche parole per passare quello che noi abbiamo trovato con questa query al nostro tema. Questo invece è Quotes.moodles. Quotes.moodles è uno dei file molto simile a nostro function PHP. Appena che noi avviamo una pagina, queste azioni vengono sempre calcolate. Questo in poche parole ci serve in particolar modo per assegnare al controller che abbiamo generato prima il template. Invece questo è l'uncino. Questo ci servirà invece per generare una Quotes casuale. Come vediamo abbiamo sempre la solita query, mettiamo l'entità che ci serve, la condizione, l'ordine in cui la vogliamo, l'eseguiamo e poi assegniamo a variable l'idi dell'oggetto. Variables è una variabile che noi ci passiamo per tutto l'accaricamento della nostra pagina di Drupal. Ok, adesso sicuramente vi siete chiedendo questa domanda. Siamo al Drupalcon oppure a Worldcamp. Penso che tu ti sappiamo che il padrone di casa qua è il Worldcamp. Quindi, come si dice da le mie parti, hai io a casa. Quindi Warpress è un CMS leggermente più giovane, tre anni più giovane, che senza dubbio, visto che siamo qua, è il nostro preferito. Come sviluppo su Warpress? Creo il mio plugin oppure agisco sul ChildTemps. Anche se modifico il mio tema, preferisco sempre farlo nel ChildTemps. La vera forza di Warpress è che c'è tutto. Esistono plugin per tutto quanto. È del CMS, compresi CMF, che ne ha di più. Qualsiasi cosa ne vogliamo fare, molto probabilmente c'è già. E poi ha una gestione KISS, keep it simple, gesti in cui è molto facile comunque per uno sviluppatore creare i nostri fil, le nostre funzioni oppure aggiornare i temi, aggiornare i plugin o qualsiasi altra componente noi abbiamo. Purtroppo Warpress nativamente non ha un sistema molto forte come quello di Drupal per gestire la cache. Di solito questi sono tre plugin che utilizzo spesso per ottimizzare. L'ho messo in ordine con quale frequenza li uso. Una cosa bellissima di Warpress è il suo terminale. WPcli è già intregato dentro Warpress e già integrato, anzi una cosa interessante è che uno può installare WPcli direttamente da Composer senza avere Warpress e da WPcli installare Warpress. Questo comunque ci permette dentro WPcli anche di fare tutte le attività che noi facciamo da pannello di controllo. Disattivare, attivare plugin, gestire i temi, aggiornarli e questo tipo di attività. In altrettutto anche comunque ci permette di fare le copie di backup, di fare manutenzione oppure anche in modo abbastanza invasivo, modificare drasticamente il contenuto delle nostre odidi. Per esempio in caso di una migrazione noi possiamo semplicemente fare un controllo tramite WPcli tutte le volte che appare il vecchio path è sostituirlo. Tassonomie, ok una cosa brutta di Warpress bisogna dirlo è che il CMS non ci permette nattivamente di creare nuove tassonomie. A meno che noi non installiamo un tema, uno per esempio è simple taxonomy oppure apriamo il nostro function PHP oppure il nostro modulo e ci l'aggiungiamo direttamente tramite codice. Content types funzionano nel stesso esatto modo. Warpress non ci permette di farlo nattivamente però sempre con un plugin come custom post type Ui, uno di quelli che usò più spesso oppure sempre da function PHP nel nostro shell temps. Quando mi capita di lavorare con altri sviluppatori io utilizzo questo plugin. Questo plugin WP model via controller ci permette di dividere il codice del nostro plugin in modo molto severo la vista, il modello e il controller. Per chi non lo sapesse il modello è tutta la gestione del database, la vista dell'interfaccia e il controller sono tutte le chiamate che ci sono tra la nostra vista e il modello. Molto semplice creare nuove tabelle, creare tutti i form, tutte le viste e ci dà la possibilità di trasformare Warpress in proprio vero framework. Però torniamo all'esempio di prima. Qui ripeto i nostri punti, il nostro eQuots sono composte da una frase, il nome dell'autore della data, possiamo vederle singolarmente e dentro un archivio ogni volta che visite una pagina menesterè una casualmente. Questo come lo faccio? Allora il CMS nativamente non mi permette di creare un custom post type e neanche sui field. Quindi creeremo il nostro plugin. Ogni custom type su Warpress però nativamente ha già le regole di routing sia per il singolo oggetto che per l'archivio. Possiamo poi aggiungere nel questo nostro plugin che noi creeremo anche la possibilità di estrarre casualmente una Quots. Iniziamo la composizione del nostro file. Quindi creo la nostra cartella Quots, ci metto dentro soltanto un file Quots.php. Uno delle cose bellissime di Warpress è che è molto meno prolisso. Dentro Quots iniziamo a metterci la nostra intestazione, il nome del plugin e i vari dati e poi iniziamo con la parte di codice. Per il primo punto cioè creare il nostro custom type abbiamo queste righe. Inseriamo il nome, come vogliamo chiamarlo, come vogliamo che appagliate il nostro backend e tutti gli altri dati. E poi diciamo che questa funzione ad action si parte all'avvio grazie al nostro unit. Qui in rosso invece sono i due punti che mi permettono di realizzare il secondo punto, ovvero come chiamarlo da rotta e come chiamare il nostro archivio. Quindi abbiamo già risolto con una semplice funzione i primi due punti. Il terzo punto è sempre abbastanza semplice. In poche parole genero la query. Qua dico che voglio l'ordinamento random, voglio un solo elemento, il boss type e poi faccio il loop di quello che mi ho genero. Per poi visualizzarlo abbiamo io optato per un shortcode che mi chiama la funzione. Quindi basterà inserire al nostro frontender questa stringa dove vuole che appaia la nostra quotes. Abbiamo realizzato questo in modo abbastanza semplice. Quindi al volo le conclusioni. Abbiamo visto in questi piccolissimi esempi questi 6 punti. Quindi ricordiamoci non esiste un CMS, CMS è migliore. Al massimo non esiste uno adatto. Ogni CMS, CMS ci permetcita due vie o tramite codice o adminare a. Questi due CMS hanno due curve di apprendimento molto diverse. WordPress magari per task semplici ha bisogno di impredimento molto più veloce, molto più veloce. Strupa invece già dall'inizio è molto difficile. Stack Overflow e Community fanno parte del science M e io vi chiedo che quando potete collaborate e facciamo parte sempre del software libero. Questa è una slide che per abitudine metto sempre le quattro libertà che ci hanno dato vita. Io vi ringrazio, volevo ringraziare anche queste tre persone. I work camps sono belli perché sono nodi della sarette. Io per alcuni spunti ho interrogato queste tre persone in tre work camp diversi. Vi ringrazio, questi sono i tre punti in cui dovrei poter trovarmi. Vi trovate in qualsiasi social network anche quelli improbabili tipo mixi o quell'altro che non so neanche nominare. Vi trovate qua in giro nel work camp o lafter party oppure tramite email. Grazie.