You are hereDrupal: separare il tema di amministrazione.
Drupal: separare il tema di amministrazione.
Una delle più importanti caratteristiche che un buon CMS deve avere è quella di consentire una separazione tra il tema di amministrazione e quello del frontend. Spesso infatti il tema di presentazione contiene troppi elementi grafici per gestire agevolmente tutti i task che un gestore di contenuti deve svolgere. Un altro requisito importante (a volte fondamentale nel caso di siti dui pubblica amministrazione) è che il tema di amministrazione sia realizzato con un template XHTML validato. Vediamo come sia possibile realizzare questo obiettivo con Drupal 5. La nuova versione del cms nasce con uno switch nativo dei due temi. Lo switch però non copre a mio avviso tutti i casi in cui si passa da una pagina di frontend ad una di backend. Prendiamo ad esempio il caso in cui dobbiamo creare un nuovo contenuto sul portale: questa azione ci porta alla pagina node/add che presenta il tema di presentazione del sito. La stessa cosa vale per la pagina di gestione dei blocchi o per qualsiasi pagina di modifica del contenuto (node/edit). Sono tutte funzionalità amministrative che devono presentare un loro tema dedicato.
Per risolvere questo problema, utilizziamo il motore phptemplate dei temi di Drupal. Immaginiamo ad esempio di voler utilizzare come tema di amministrazione il tema di default "Garland" e come tema di presentazione il tema "Pushbutton".Per prima cosa impostiamo l'administration theme nella pagina admin/settings/admin su "system default" mentre scegliamo come tema del sito il tema Pushbutton alla pagina admin/build/themes. In questo modo Drupal utilizzerà solamente il tema Pushbutton. A questo punto passiamo allo switch vero e proprio. Facciamo una copia del page template che troviamo nella cartella /themes/pushbutton (page.tpl.php) e rinominiamolo come "page-default.tpl.php". Apriamo page.tpl.php e inseriamo questo codice.
if (arg(0)=="admin") {/* se siamo nel pannello di amministrazione*/ include 'page-admin.tpl.php'; /*carica page-admin.tpl.php */ return; } if ((arg(0)=='node') && (arg(1)=='add')) { /* se stiamo creando un contenuto*/ include 'page-admin.tpl.php'; return; } if ((arg(0)=='user') && (arg(1)=='')) { /* se siamo nella pagina di login*/ include 'page-admin.tpl.php'; return; } include 'page-default.tpl.php'; /*altrimenti carica il page-default.tpl.php */ return;
Arg(0) legge la prima parte dell'url del sito. Grazie a delle semplici condizioni, possiamo dire a Drupal di usare un page template diverso per tutte le pagine "amministrative" (admin, node/add/, user ecc...). Non ci rimane che creare il page-admin. Abbiamo deciso di utilizzare il tema Garland. Andiamo quindi nella cartella del tema e rinominiamo il page.tpl.php in page-admin.tpl.php. Copiamo il page-admin.tpl.php dentro la cartella di pusbutton, avendo cura di copiare anche tutti i files che riguardano il tema. In questo caso dobbiamo includere anche la cartella images e il file garland.css. Il page-admin richiede qualche piccola modifica, in particolare sulla chiamata che aggiunge i fogli stile al page template. La funzione carica automaticamente tutti i fogli stile presenti nel tema. Noi vogliamo che page admin richiamo solo gli stili di sistema di Drupal ed il nostro garland.css. Per far questo eliminiamo la chiamata e colleghiamo manualmente i diversi fogli stile.
<style type="text/css" media="all">@import "modules/node/node.css";</style> <style type="text/css" media="all">@import "modules/system/admin.css";</style> <style type="text/css" media="all">@import "modules/system/defaults.css";</style> <style type="text/css" media="all">@import "modules/system/system.css";</style> <style type="text/css" media="all">@import "modules/user/user.css";</style> <style type="text/css" media="all">@import "themes/pushbutton/garland.css";</style>
Salviamo il file page-admin.tpl.php andiamo su Drupal e verifichiamo il funzionamento dello switch. Spesso occore qualche altro accorgimento per far funzionare tutto al meglio. Verifichiamo ad esempio che i due temi non utilizzino regioni con lo stesso nome, come "sidebar_left" o sidebar_right". In questo caso rinominiamo esclusivamente le regioni del template di FE utilizzando il file di configurazione template.php che troviamo nella cartella del tema.
Definiamo le nostre regioni utilizzando questo codice.
function pushbutton_regions() { return array( 'header' => t ('header'), 'content' => t('content'), 'sidebar_left' => t('sidebar_left'), 'sidebar_right' => t('sidebar_right'), 'footer' => t('footer') 'sinistra' => t('sinistra'), ); }
Sinistra diventerà in pushbutton quella che prima era la sua sidebar-left. Per far questo apriamo il nostro page-default.tpl.php e sostituiamo "sidebar_left" con "sinistra". E' buona norma utilizzare regioni distinte per il frontend e per il backend in modo da evitare potenziali conflitti, lasciando esclusivamente la regione "content" in comune. Verificato il funzionamento dello switch possiamo sbizzarrirci nel definire il comportamento del nostro cambio di tema. Ad esempio inserendo condizioni come.
if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'workflow') {/* se siamo nel workflow*/ include 'page-admin.tpl.php'; /*load a custom page-admin.tpl.php */ return; } if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'outline') {/* se siamo in una pagine del libro*/ include 'page-admin.tpl.php'; /*load a custom page-admin.tpl.php */ return; } if (arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'votes') {/* se siamo nei sondaggi*/ include 'page-admin.tpl.php'; /*load a custom page-admin.tpl.php */ return; } if (arg(0) == 'user' && is_numeric(arg(1)) && arg(2) == '') {/* se siamo nel profilo utente */ include 'page-admin.tpl.php'; /*load a custom page-admin.tpl.php */ return; }
A questo punto nulla ci vieta di creare un template xhtml ad hoc ed utilizzarlo come template di amministrazione. Forte Drupal vero?



La nuova versione del
Online il
E' stato rilasciato il
Marinelli arriva alla versione 2.0. Ho apportato miglioramenti poco appariscenti ma di grande impatto sulla possibilità di personalizzazione e gestione del tema. Il css principale è stato scomposto in 4 css distinti ( layout.css, graphics.css, links.css, typography.css). Ogni css è stato rivisto e ottimizzato per evitare dichiarazioni ridondanti o superflue. In particolare ho riscritto la tipografia e la...
Da un po di tempo il codice del badge di flickr stampa un'immagine vuota di 1px per 1px prima delle solite anteprime. Avendo definito le dimensioni delle immagini nel css, la nuova immagine rompe l'allineamento delle miniature. Per ovviare al problema ho utilizzato jquery per rimuovere solamente il tag img interessato.
Stavo cercando una reale alternativa a lightbox da integrare in Drupal. Lightbox infatti è abbastanza pesante e la configurazione non è proprio banale. Ho trovato un nuovo script basato su jQuery
Nel caso si utilizzi chameleon come template cosa si modifica?
il .theme? che risulta essere un php mascherato da theme Cheap Web Hosting
ciao a tutti....
volevo chiedere dopo aver eseguito tutto le operazioni sopra descritte perchè mi appare il seguente errore quando cerco di premere qualsiasi pulsante all'interno di admin....
il tema f.e. che uso è uno mio personale, mentre quello di admin è garland...
Fatal error: Call to undefined function phptemplate_body_class() in C:\xampplite\htdocs\suburbanlab\themes\suburbanTemp\page-admin.tpl.php on line 19
nella linea 19 c'è la seguente linea di codice:
<body>
cosa può significare?
grazie
emanuele
Ciao
Nel caso si utilizzi chameleon come template cosa si modifica?
il .theme? che risulta essere un php mascherato da theme :P
Grazie per la risposta che so arriverà
Tra l'altro ho scoperto questo interessante meccanismo nella 5.x
http://drupal.org/node/104316
Ciao
ciao, grazie per la segnalazione, c'era un errore di trascrizione nel codice ;)
Ottimo articolo!
Ti segnalo che...
if ((arg(0)=='user') && (arg(1)==")) { /* se siamo nella pagina di login*/
include 'page-admin.tpl.php';
return;
}
I've got an error ;)
arg(1)=="
Bell'articolo... interessante, anche per la possibilità di creare temi differenti per vedere sezioni differenti del sito ;)
Ciao
Mavimo