Trasformiamo un tema PhpNuke in un tema di Maximus
Un article de Wiki Maximus CMS.
redazione in corso
Introduzione
Il sistema di Maximus BS prevede, per la gestione dei blocchi dei suoi temi specifici ( MaX_Colors, MaX_Blue, ecc. ), una gestione centralizzata i cui files sono posizionati nella cartella kernel\templates.
Una delle caratteristiche più evidenti di questa gestione unica di Maximus BS è quella di consentire in automatico la gestione ON/OFF di apertura e chiusura della colonna destra e sinistra dei blocchi e, singolarmente, di ogni blocco (sinistro, destro, centro alto, centro basso) e dei messaggi.
Ogni tema di PhpNuke già adattato e funzionante sulle precedenti versioni di Maximus può essere reso compatibile, con opportune modifiche, con questa particolare caratteristica di Maximus BS.
Come il Sitema riconosce se un tema è PhpNuke o Maximus BS
Il Sistema di Maximus accetta temi PhpNuke resi compatibili con poche modifiche alle linee di codice (variazione codice banner e variazione delle query per l'utilizzo della variabile $db in sostituzione della vecchia $dbi ) trattandoli con delle routines scritte appositamente per mantenere la compatibilità con PhpNuke ( kernel\templates\themes_phpnuke.php ).
Nella stessa cartella è inserito anche il file contenente le routines per la gestione dei temi specifici di Maximus BS ( kernel\templates\themes_maximus.php ).
La scelta tra i due files viene effettuata nel mainfile.php dove alle righe
il sistema controlla se nella root del tema esiste il file credits.php, nel qual caso gestisce il tema come specifico di maximus caricando le funzioni del file blocks_maximus.php ... in caso contrario vengono attivate le funzioni per i temi di phpnuke includendo il file blocks_phpnuke.php.
A questo punto dovreste aver capito che l'aggiunta di un file credits.php nella root del vostro tema fa scattare il caricamento delle routine per i temi di Maximus BS ... a tal fine è sufficiente ricopiarlo da uno dei temi BS cambiandone, se volete, i dati o, al limite, lasciandolo vuoto !!!
Modifica dei files di sistema
Al fine di poter utilizzare alcune delle caratteristiche specifiche dei temi PhpNuke ( per esempio le OpenTable/CloseTable molto spesso personalizzate ai fini del design del tema ), si rendono necessarie delle modifiche da effettuare su tre files di sistema
mainfile.php kernel/blocks_maximus.php kernel\templates\themes_maximus.php
Nel ricordarvi che i files già modificati potrete prelevarli da qui, andiamo ad esaminare in dettaglio queste modifiche.
Modifica delle OpenTable/CloseTable ( kernel\templates\themes_maximus.php )
Nei temi di maximus le funzioni OpenTable(), OpenTable2(), CloseTable() e CloseTable2() sono state sostituite dalle funzioni standardizzate Max_OpenTable(), Max_OpenTable2(), Max_CloseTable() e Max_CloseTable2(), richiamate in automatico dal sistema.
Per poter utilizzare le funzioni OpenTable/CloseTable del vostro tema (e quindi la vostra grafica preferita), dovete:
- separare le quattro funzioni dal file theme.php del vostro tema, raccogliendole in un nuovo file chiamato table.php posto nella stessa directory
- quindi aprire il file kernel\templates\themes_maximus.php e sostituire le righe
con le seguenti
Modifiche al mainfile.php al fine di associare alle colonne delle immagini ON/OFF diverse da quelle di default
Nel mainfile.php, il Sistema predispone e mette in memoria nelle variabili $cacheblocsr e $cacheblocsr il codice delle frecce ON/OFF da associare alle colonne dei blocchi, prelevando le immagini standard presenti nella cartella images/blocks.
Al fine di consentire al Sistema di utilizzare delle immagini specifiche del tema, nel file aggiornato il 25-10-2007, bisogna modificare la routine esistente (linee 204/213)
con queste linee di codice
if (is_file(INCLUDE_PATH."themes/".$ThemeSel."/images/droite.gif")) { $droite = "themes/".$ThemeSel."/images/droite.gif";
} else { $droite = "images/blocks/droite.png";
}
if (is_file(INCLUDE_PATH."themes/".$ThemeSel."/images/gauche.gif")) { $gauche = "themes/".$ThemeSel."/images/gauche.gif";
} else { $gauche = "images/blocks/gauche.png";
}
if ($_COOKIE['blo']['900'] == "1"){
$cacheblocsl = "<a href='index.php?g&bloc=900&actif='><img src='".$droite."' border='0' alt=\""._OPENPANEL."\" title=\""._OPENPANEL."\" /></a>";
} else {
$cacheblocsl ="<a href='index.php?g&bloc=900&actif=1'><img src='".$gauche."' border='0' alt=\""._CLOSEPANEL."\" title=\""._CLOSEPANEL."\" /></a>";
}
if ($_COOKIE['blo']['901'] == "1"){
$cacheblocsr = "<a href='index.php?g&bloc=901&actif='><img src='".$gauche."' border='0' alt=\""._OPENPANEL."\" title=\""._OPENPANEL."\" /></a>";
} else {
$cacheblocsr = "<a href='index.php?g&bloc=901&actif=1'><img src='".$droite."' border='0' alt=\""._CLOSEPANEL."\" title=\""._CLOSEPANEL."\" /></a>";
}
Modifiche alla function Max_Template_Block del file themes_Maximus al fine di associare ai blocchi delle immagini ON/OFF diverse da quelle di default
Come per il paragrafo precedente, con questa modifica predisporremo il codice per la visualizzazione delle frecce ON/OFF dei blocchi utilizzando, se esistenti, le immagini specifiche del nostro tema
sostituiamo le linee
con
Modifiche alla funzione di verifica e di inserimento dei blocchi ( kernel/blocks_maximus.php )
Nel file kernel/blocks_maximus.php è inserita la function blockfileinc che controlla l'esistenza del file del blocco da visualizzare, includendone il codice (reale o in cache che sia) ... ma questa funzione carica sempre la variabile $content del blocco anche quando questo è in posizione OFF.
In questo caso, con una modifica del codice possiamo risparmiare del tempo dicendo al Sistema di caricare il codice solo se il blocco è in posizione ON.
Andiamo alla function blockfileinc e sostituiamo le prime righe
con le seguenti
Modifiche di base da apportare al nostro tema
Predisposizione delle varie tipologie dei blocchi di Maximus
Maximus BS gestisce, nel file theme_maximus.php, le varie tipologie dei blocchi ed i messaggi con funzioni differenti
- function themesidebox blocchi generici
- function themerightbox blocchi di destra
- function themeleftbox blocchi di sinistra
- function thememessagebox messaggi
- function themecenterbox blocchi centrali alti
- function themecenterbox_low blocchi centrali bassi
Queste funzioni passano alla funzione Max_template_block i dati necessari a verificare il tipo di immagine ON/OFF da inserire nella variabile $control_blocks e comporre, nella variabile $tmpl_file, il nome del file in html da visualizzare.
Premesso quanto sopra, per visualizzare i blocchi con la relativa icona ON/OFF linkabile, dovremo inserire nella root del tema i files in html di ogni tipo di blocco, sia in modo aperto sia in modo chiuso e precisamente:
- blocks.html blocco generico ON
- blocks_mini.html blocco generico OFF
- blocks_right.html blocco colonna destra ON
- blocks_right_mini.html blocco colonna destra OFF
- blocks_left.html blocco colonna sinistra ON
- blocks_left_mini.html blocco colonna sinistra OFF
- message.html messaggio ON
- message_mini.html messaggio OFF
- blocks_hight.html blocco centrale alto ON
- blocks_hight_mini.html blocco centrale alto OFF
- blocks_low.html blocco centrale basso ON
- blocks_low_mini.html blocco centrale basso OFF
Per la predisposizione di questi files in html torneremo più in dettaglio in seguito con l'analisi delle modifiche effettuate su di un tema campione.
Al momento sappiate che,
- per i blocchi di destra, di sinistra e generici utilizzeremo il codice html della function themesidebox ( a meno che il tema non abbia già codici differenziati per i vari blocchi )
- per i Messaggi ed i blocchi Centrali Alti e Bassi utilizzeremo il codice html delle funzioni OpenTable e CloseTable
- a meno che il tema non sia già predisposto con file in html per i blocchi, dovremo creare i file prelevando dalla funzione in php solo il codice in html,
- prima del titolo deve essere aggiunta la variabile $control_blocks per la visualizzazione dell'immagine ON/OFF
- per creare il file in html dei blocchi chiusi ( OFF ) dovremo fare una copia del relativo file in ON ed eliminare il codice relativo alla variabile $content (contenuto del blocco) comprensivo dei relativi tag di formattazione
- dopo aver predisposto tutti i blocchi, potrete eliminare dal file Theme.php del vostro tema la funzione function themesidebox e le altre eventualmente presenti.
- tenete presente che, con questo sistema, potrete anche modificare ( per ogni tipo ) il codice di visualizzazione in html dei blocchi e dei messaggi, personalizzandoli a vostro piacere ... ne riparleremo in seguito.
Visualizziamo le frecce ON OFF delle colonne
Maximus BS prevede anche la possibilità di aprire e chiudere le colonne dei blocchi di destra e/o di sinistra ... questo viene fatto con due variabili ( $cacheblocsl, $cacheblocsr ) che gestiscono le due colonne (left e right) e vengono inizializzate nel mainfile.php.
Nella modifica del nostro tema PhpNuke, abbiamo due possibili soluzioni
1. Procedura standard: visualizziamo sempre le frecce ON OFF delle colonne
Questa procedura fa apparire sempre le immagini ON/OFF della colonna, anche quando questa è inesistente (moduli a tutta pagina o privi della colonna destra)
Per inserire questa procedura, dobbiamo aprire il file theme.php del nostro tema e fare le seguenti modifiche :
- a - inserire tra le global della function themeheader le tre variabili $cacheblocsl, $cacheblocsr e $module_name;
- b - aggiungere il codice html della routine di visualizzazione, nella posizione scelta
- - tra la chiusura dell'header e l'inizio della parte sottostante ( per far apparire le frecce sopra alle rispettive colonne )
- - subito dopo l'apertura del tag relativo alla parte centrale della pagina ( per far apparire le frecce di lato alle rispettive colonne, al di sopra dei messaggi )
- - nel tag centrale, si può anche inserire la visualizzazione dei Banners o dei Public Message (ricordandoci di inserire anche le relative variabili nelle global ed il richiamo delle specifiche funzioni)
2. Procedura modificata: visualizziamo le frecce ON OFF delle colonne solo se sono presenti dei blocchi attivi
Per mezzo di questa procedura, il sistema verifica l'effettiva presenza di blocchi attivi, inserendo le frecce ON/OFF solo nel caso in cui le colonne possono essere visualizzate.
Per aggiungere questa opzione, deve essere effettuata una verifica dell'esistenza di blocchi attivi nella colonna e questo comporta due richieste SQL che,nella procedura standard sono evitate.
A tal fine dobbiamo aprire il file theme.php del nostro tema e fare le seguenti modifiche :
- a - inserire tra le global della function themeheader le tre variabili $cacheblocsl, $cacheblocsr e $module_name;
- b - inserire, sempre nella function themeheader prima della riga del body, la routine di verifica dell'esistenza della colonna
if (defined('HOME_FILE')) {
$fleshblockl="$cacheblocsl";
$fleshblockr="$cacheblocsr";
} else {
$resultl = $GLOBALS['db']->sql_query( "SELECT m.bid, m.title, m.bposition, b.bid, b.active FROM ".TABLE_BLOCKSMANAGER." m, ".TABLE_BLOCKS." b WHERE (m.bid = b.bid) AND (m.title = '$module_name') AND (b.active='1') AND (m.bposition='l')" );
$resultl1 = $GLOBALS['db']->sql_numrows($resultl);
if ($resultl1 != ){ $fleshblockl="$cacheblocsl"; }
$resultr = $GLOBALS['db']->sql_query( "SELECT m.bid, m.title, m.bposition, b.bid, b.active FROM ".TABLE_BLOCKSMANAGER." m, ".TABLE_BLOCKS." b WHERE (m.bid = b.bid) AND (m.title = '$module_name') AND (b.active='1') AND (m.bposition='r')" );
$resultr1 = $GLOBALS['db']->sql_numrows( $resultr );
if (($resultr1 != ) and ($module_name != 'News')){ $fleshblockr="$cacheblocsr"; }
}
- c - aggiungere il codice html della routine di visualizzazione, nella posizione scelta
- - tra la chiusura dell'header e l'inizio della parte sottostante ( per far apparire le frecce sopra alle rispettive colonne )
- - subito dopo l'apertura del tag relativo alla parte centrale della pagina ( per far apparire le frecce di lato alle rispettive colonne, al di sopra dei messaggi )
- - nel tag centrale, si può anche inserire la visualizzazione dei Banners o dei Public Message (ricordandoci di inserire anche le relative variabili nelle global ed il richiamo delle specifiche funzioni)
NB - Ricordatevi di adattare le linee di codice al tipo di file utilizzato in quanto quelle riportate in esempio sono valide se inserite in un file html
- - se inserite come php in un file php sono del seguente tipo:
- - se inserite come html in un file php sono del seguente tipo:
Modifica della funzione di richiamo delle colonne dei blocchi
- nella function themeheader sostituire la riga di richiamo della funzione blocks(left) con
if ($_COOKIE['blo']['900'] == "") { blocks(left); }
- nella function themefooter sostituire la riga di richiamo della funzione blocks(right) con
if ($_COOKIE['blo']['901'] == "") { blocks(right); }
Una volta fatte tutte le modifiche, il nostro tema dovrebbe funzionare con gli ON/OFF sulle colonne dei blocchi, su ogni blocco e sui messaggi ... visualizzando le immagini delle freccette di default dei temi di Maximus BS
... ma, se come frecce vogliamo utilizzare delle immagini più appropriate al nostro tema, sarà sufficiente predisporle e, una volta inserite nella cartella images del nostro tema, saranno automaticamente rilevate dal Sistema ed utilizzate al posto di quelle di default.
Eliminazione della colonna destra nella pagina del singolo Articolo
Quando si apre la pagina di un articolo per leggerlo nella sua interezza, viene visualizzata sulla destra una colonna di blocchi specifici delle News (Link Correlati, Articolo più letto, Valutazione Articolo ed Opzioni)... per tale motivo, allorquando si aprono queste pagine, è preferibile eliminare di default la colonna di destra dei blocchi associati al modulo news, lasciandola invece visibile nel caso di News in home page.
Analizziamo passo passo l'ottimizzazione di un tema da Php-Nuke a Maximus BS
Premessa
- prima di cominciare il vostro lavoro di ottimizzazione predisponetevi in locale una copia di Maximus BS attivando pochi e semplici blocchi (uno/due per ogni tipo) ... questo consentirà di fare delle verifiche veloci sulla bontà del codice che via via andrete a modificare;
- disponete subito nel file kernel/config.php il $display_errors = '1' ... questo settaggio visualizzerà subito eventuali errori, dando degli utili riferimenti;
- dopo ogni singola procedura di modifica, ricordatevi sempre di salvare il file ed affettuare un refresh della pagina per vedere se ciò che avete modificato è stato scritto giusto (se andate troppo avanti ... poi è più difficile ritrovare eventuali errori);
- come esempio, andremo a modificare il tema bluetabs scaricabile qui ... pertanto ogni codice ed ogni modifica sarà sempre relativa a questo tema preso a campione
- al fine di confrontare le modifiche affettuate, nel download del tema bluetabs troverete il file theme originale (theme_orig.php), lo stesso file con le modifiche apportate in questo tutorial (theme_moda.php) ed il file finale (theme.php) ricomprendente le ulteriori modifiche apportate a seguito del paragrafo "Differenziamo la grafica ed i colori di ogni modulo".
Installazione del tema
- installiamo ed attiviamo il tema bluetabs ... questo verrà riconosciuto come un tema nuke ed il sistema utilizzerà le specifiche routines predisposte per la compatibilità con Php-Nuke;
- al primo refresh usciranno fuori i primi errori dovuti alla compatibilità con Maximus ... quasi sempre sono le linee di codice dei banners ed eventuali query utilizzanti le vecchie routines $dbi e non le più recenti $db;
- -- nel nostro caso viene visualizzato l'errore del banner;
- -- apriamo il file theme.php e, individuata la riga del banners
include("banners.php");
- per ora commentiamola
//include("banners.php");
- -- nel caso in cui uscissero errori di query, bisognerà procedere al cambio del codice da $dbi a $db (per vedere come modificare le varie tipologie delle query, fate riferimento ai tutorial specifici );
- -- a volte potreste trovare, all'interno del file theme.php, tutta la procedura per la gestione dei banners ... potete eliminarla tranquillamente in quanto il sistema utilizzerà la propria procedura (modulo banners della NSN) rendendo del tutto inutile e ridondante questo codice ... con inevitabile perdita di tempo;
- -- stessa cosa per eventuali altre procedure proprietarie del tema ... per il momento commentatele ... poi in seguito valuterete se ripristinarle o eliminarle;
- rifacendo il refresh vedremo che ora il tema non presenta più errori e potrebbe già essere utilizzato anche se ancora non ottimizzato.
Attivazione delle routines di Maximus
- dall'unico file theme.php ricaviamo altri due file
- -- table.php dove lasceremo solo le funzioni delle tabelle ( normalmente OpenTable, OpenTable2, CloseTable, CloseTable2 );
- -- news.php dove lasceremo le funzioni relative alle news ( normalmente function themeindex e function themearticle, a volte - come nel nostro esempio - esiste anche la function FormatStory );
- nel file theme.php lasciamo solo i codici dei colori, la function themeheader, la function themefooter e le varie funzioni dei blocchi ( nel nostro caso esiste solo la function themesidebox ) queste ultime, però, le commentiamo ( senza cancellarle, per il momento le rendiamo inattive mettendo /* all'inizio della funzione e */ alla sua fine );
- prendiamo il file credits.php di un tema di default di Maximus BS ( per esempio MaX_Blue) e copiatelo nella cartella root del vostro tema (potete cambiarne i riferimenti o anche lasciarlo in bianco ... l'importante è che il sistema trovi nella cartella un file di nome credits.php );
- a questo punto il sistema riconosce il tema come tema di Maximus ed attiva i codici specifici abbandonando quelli di nuke ... ma non spaventatevi di quel che vedrete se fate un refresh ... il sistema cerca i file in html dei blocchi ma ancora non li avete predisposti ... e visualizza una serie di errori !!!
Preparazione dei file HTML dei blocchi di destra, di sinistra e del blocco generico
- apriamo un nuovo file in HTML chiamandolo blocks_left.html ed inseriamoci le righe di codice prelevate dalla funzione del blocco che abbiamo commentato nel file theme.php (ricordatevi che il codice qui riportato è il codice del tema in esempio ... il codice del vostro tema sarà certamente diverso !!!)
- convertiamo il codice in html ricordandoci di sostituire eventuali variabili di colore con il codice del colore effettivo
- alle linee del titolo aggiungiamo la variabile $control_blocks e modifichiamo eventuali parametri dei tag
... facendo dei refresh potremo controllare la formattazione dei blocchi di sinistra (è ovvio che tutti gli altri blocchi continueranno a dare solo errori)
- una volta trovata la giusta formattazione del blocco, ricaviamone altre due copie che chiameremo blocks_right.html e blocks.html
- Per predisporre i blocchi chiusi, partiamo da una copia del file blocks_left.html dove, sempre dallo stesso codice, eliminiamo la variabile $content ed i suoi relativi tag, variandoli se necessario
- al fine di ottenere il codice del blocco chiuso
- una volta messo a punto il blocco chiuso, salviamolo ricavandone tre copie che chiameremo blocks_left_mini.html, blocks_right_mini.html e blocks_mini.html
- a questo punto, un refresh comincia a far apparire il tema con i blocchi di sinistra e di destra funzionanti con gli ON/OFF ... però mancano ancora i blocchi centrali, i messaggi e gli ON/OFF alle colonne !!!
Preparazione dei file HTML dei blocchi Centrali Alti/Bassi e dei Messaggi
Per la predisposizione dei blocchi centrali ( alti e bassi ) e dei messaggi, sarebbe sufficiente convertire in html solo il codice delle function Opentable e function Closetable ma, nell'ottica di una ottimizzazione che renda il CMS il più veloce possibile e tenendo conto che il sistema quando trova codice di visualizzazione in php deve, comunque, tradurlo in html, convertiamo sin da ora in html anche il codice di visualizzazione delle altre funzioni ( OpenTable2 e CloseTable2 );
- apriamo il file table.php
- e convertiamo il codice in html
- apriamo un nuovo file in html chiamandolo message.html ed inseriamoci le righe di codice html prelevate dalle funzioni OpenTable e Close Table
- tra i codici delle due funzioni inseriamo quelli relativi al $title ed al $content ricopiati da uno dei blocchi precedentemente predisposti ( tutto il codice delle due variabili ricompreso tra i rispettivi tag <td> e )
- con dei refresh verifichiamo l'eventuale necessità di aggiustare qualche caratteristica (nel nostro caso abbiamo aggiunto solo dei tags br per separare il titolo dal contenuto) in modo da ottenere il file completo
- una volta trovata la giusta formattazione, ricaviamone altre due copie che chiameremo blocks_hight.html e blocks_low.html
- per ricavare il codice dei messaggi in OFF, da una copia del file in ON eliminiamo la variabile $content e variati i parametri dei tag, se necessario, otterremo il codice del blocco dei messagi in OFF
- ricopiamo questo codice in tre file che chiameremo message_mini.html, blocks_hight_mini.html e blocks_low_mini.html
- con un ultimo refresh vedremo che tutti i blocchi laterali e centrali sono stati sistemati.
Conclusioni
Nel prossimo pragrafo passeremo ad analizzare le modifiche da effettuare nelle due funzioni rimaste nel file theme (function themeheader e function themefooter), modifiche che, oltre ad ottimizzare il codice, consentiranno la gestione ON/OFF delle colonne, il ritorno al top pagina, la visualizzazione dei banners ed altro.
Per quanto riguarda il codice dei blocchi trattato sino ad ora, è bene tenere presente che:
- se non ci piacciono le immagini di default delle frecce ON/OFF che il sistema visualizza, potremo sempre utilizzarne altre di nostra scelta ... è sufficiente mettere le nostre tre immagini (solo gif) dentro alla cartella images del tema ed il sistema provvede alla loro sostituzione;
- se vogliamo, non solo potremmo cambiare i colori e le immagini dei file in html per differenziare i vari blocchi tipo per tipo ma anche associare ad ogni modulo dei blocchi con grafica e colori diversi;
- - per fare questo sarà sufficiente, una volta predisposto il codice, assegnare al blocco un nome del tipo blocks_left_Downloads.html o blocks_left_Downloads_mini.html cioè aggiungere il nome del modulo nel nome del blocco ... ed anche qui il sistema fa tutto da solo associando questo file al modulo indicato ... l'unica controindicazione è che si rischia di fare centinaia di files :)
- - esempi di questo tipo di sviluppo potete vederli su Maximus Italia, selezionando con il Preview Theme i temi MaX_MultiColor e NSN-Nuke_mc ... quest'ultimo, realizzato integrando i dieci temi della serie NSN-Nuke, consente di avere per ogni modulo pagine di colore differente ... lo trovate nei downloads !!! :)
Piermin 11 mar 2007 h 11:20































