stampa questa pagina feed di signalkuppe.com/

You are hereDrupal: separare il tema di amministrazione.

Drupal: separare il tema di amministrazione.

By admin - Posted on 23 April 2007

logo drupalUna 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?

Anonymous's picture

Nel caso si utilizzi chameleon come template cosa si modifica?
il .theme? che risulta essere un php mascherato da theme Cheap Web Hosting

emanuele's picture

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

disc_nr's picture

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à

djordj's picture

Tra l'altro ho scoperto questo interessante meccanismo nella 5.x

http://drupal.org/node/104316

Ciao

leoni.matteo's picture

ciao, grazie per la segnalazione, c'era un errore di trascrizione nel codice ;)

djordj's picture

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)=="

Mavimo's picture

Bell'articolo... interessante, anche per la possibilità di creare temi differenti per vedere sezioni differenti del sito ;)

Ciao
Mavimo

Post correlati

icona che rappresenta il pluginLa nuova versione del noto Framework javascript (la 1.3) ha introdotto l'interessantissimo metodo "live()" per gestire gli eventi su gli elementi presenti e generati del DOM. Ho testato questo metodo per un mini-applicativo che dovevo realizzare; quello che mi serviva era una tabella nella quale doveva essere possibile editare al volo alcuni dei suoi valori senza ricaricare...

logo del sito lagruba.comOnline il nuovo sito realizzato per l'amico Alberto che ha aperto da poco questo bellissimo Dortoir poco sopra Gaby nella valle di Gressoney. Le esigenze di Alberto erano diverse: voleva certamente valorizzare la struttura, ma anche raccontare la storia di questo luogo ed evidenziare le possibili escursioni praticabili nella valle. Lo studio del sito ha seguito 5 fasi...

Logo Regione LombardiaE' stato rilasciato il nuovo portale della Regione Lombardia. In Plurimedia ho avuto il compito di realizzare i template xhtml a partire da mockup psd forniti da una società esterna. In tutto ho sviluppato 23 templates XHTML integrati in seguito sul CMS incaricato di gestire la...

screenshot del temaMarinelli 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...

logo flickrDa 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.

logo di fancyboxStavo 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 (Fancybox) e ne sono rimasto entusiasta. La grafica a mio avviso è molto più curata rispetto a lightbox e l'integrazione in Drupal non presenta alcun problema visto che il CMS integra nativamente jQuery.
...