Transformer un thème Phpnuke en un thème pour Maximus

Un article de Wiki Maximus CMS.

Rédaction en cours


Sommaire

Introduction

Pour gérer les blocs de ses thèmes spécifiques (MaX_Colors, MaX_Blue, etc.), le système de Maximus BS prévoit une gestion centralisée où les files sont positionnées dans le fichier kernel\templates.

Une des caractéristiques plus évidentes de cette unique gestion de Maximus BS est celle de permettre automatiquement la gestion ON/OFF d’ouverture et fermeture de la colonne droite et gauche des bloques et individuellement de chaque bloc (gauche, droit, centre haut, centre bas) et des messages.

Tout thème de PhpNuke qui a déjà été adapté et qui marche sur les versions précédentes de Maximus peut être rendu compatible, avec les modifications du cas, avec cette particulaire caractéristique de Maximus BS.


Comment le Système reconnait si un thème est PhpNuke ou Maximus BS

Le Système de Maximus accepte les thèmes de PhpNuke rendu compatibles avec peu de modifications aux lignes de code (variations code banner et variation des query pour l’utilisation de la variable $db en remplacent la vieille $dbi) en les traitant comme des routines écrites spécialement pout maintenir la compatibilité avec PhpNuke ( kernel\templates\themes_phpnuke.php ).

Vous trouverez le file contenant les routines pour la gestion des thèmes spécifiques de Maximus BS dans le même fichier ( kernel\templates\themes_maximus.php ).


Le choix entre les deux files se fait dans mainfile.php ou aux lignes


Image:theme_Nuke_00.jpg


Le système contrôle si le file credits.php se trouve dans la root du thème et en ce cas il considère le thème comme spécifique de maximus en chargeant les fonctions du file blocks_maximus.php. En cas contraire, les fonctions pour les thèmes de phpnuke seront activées en incluant le file blocks_phpnuke.php.


À ce point là vous devriez avoir compris que l'adjonction d’un file credits.php dans la root de votre thème déclenche le chargement des routines pour les thèmes de Maximus BS... pour cela il suffit de le recopier à partir d’un thème BS en changeant, si vous voulez, les données ou à la limite en le laissant vide!


Modification des files de système

Afin the pouvoir utiliser certaines des caractéristiques spécifiques des thèmes PhpNuke (par exemple les OpenTable/CloseTable, très souvent personnalisés pour le design du thème), il est nécessaire d’effectuer des modifications sur trois files de système

mainfile.php
kernel/blocks_maximus.php
kernel\templates\themes_maximus.php

Rappelez-vous que vous pouvez prélever les files déjà modifiés ici: qui. Examinons donc ces modifications en détail.


Modification des OpenTable/CloseTable ( kernel\templates\themes_maximus.php )

Dans les thèmes de maximus les fonctions OpenTable(), OpenTable2(), CloseTable() et CloseTable2() ont été remplacées par les fonctions standardisées Max_OpenTable(), Max_OpenTable2(), Max_CloseTable() et Max_CloseTable2(), rappelées en automatique par le système.


Afin de pouvoir utilisé les fonctions OpenTable/CloseTable de votre thème (et donc votre graphique préféré), vous devez:

  • séparer les quatre fonctions du file theme.php de votre thème et les réunir dans un nouveau file appelé table.php dans la même directory


  • en suite ouvrir le file kernel\templates\themes_maximus.php et remplacer les lignes


Image:theme_Nuke_01.jpg


avec les suivantes


Image:theme_Nuke_02.jpg


Modifications au mainfile.php afin d’associer aux colonnes des images ON/OFF différentes que celles de default

Dans le mainfile.php, le Système prépare et mémorise dans les variables $cacheblocsr et $cacheblocsr le code des flèches ON/OFF qui doivent être associés aux colonnes des blocs, en prélevant les images standards présentes dans le fichier images/blocks.


Afin de permettre au Système d’utiliser des images spécifiques du thème, dans le ficher ajourné le 25-10-2007, il faut modifier la routine existante (lignes 231/240)


Image:theme_Nuke_03.jpg


avec ces lignes de code


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>";
}

Modifications à la fonction _Template_Block du file themes_Maximus afin d’associer aux blocs des images ON/OFF différentes que celles de default

Comme dans le paragraphe précédent, avec cette modification on prépare le code pour la visualisation des flèches ON/OFF des blocs en utilisant, si elles existent, les images spécifiques de notre thème.


Remplaçons les lignes


Image:theme_Nuke_05.jpg


avec


Image:theme_Nuke_06.jpg


Modifications aux fonctions de vérification et d’insertion des blocs ( kernel/blocks_maximus.php )

Dans le file kernel/blocks_maximus.php il y a la function blockfileinc qui contrôle l’existence du file du bloc à visualiser en incluant le code (réel ou en cache)... mais cette fonction charge toujours la variable $content du bloc, même quand ceci est en position OFF.

En ce cas là on peut sauver du temps avec une modification du code, en disant au Système de charger le code seulement si le bloc est en position ON.


Allons à la fonction function blockfileinc et remplaçons les premières lignes


Image:theme_Nuke_07.jpg


avec les suivantes


Image:theme_Nuke_08.jpg


Modifications de base à apporter à notre système

Prédisposition des différentes typologies des blocs de Maximus

Maximus BS gère, dans le file theme_maximus.php, les différentes typologies de bloc et de message avec fonctions différentes

  • function themesidebox blocs génériques
  • function themerightbox blocs droits
  • function themeleftbox blocs gauches
  • function thememessagebox messages
  • function themecenterbox blocs centre haut
  • function themecenterbox_low blocs centre bas


Ces fonctions passent à la fonction Max_template_block les données nécessaires pour vérifier le type d’image ON/OFF à insérer dans la variable $control_blocks et composer, dans la variable $tmpl_file, le nom du file en html à visualiser.


Avec ces prémisses, pour visualiser les blocs avec leur icone ON/OFF linkable, on devra insérer dans la root du thème les files en html de chaque type de bloc, soit de façon ouverte que fermée et précisément :

  • blocks.html bloc générique ON
  • blocks_mini.html bloc générique OFF
  • blocks_right.html bloc colonne droite ON
  • blocks_right_mini.html bloc colonne droite OFF
  • blocks_left.html bloc colonne gauche ON
  • blocks_left_mini.html bloc colonne gauche OFF
  • message.html message ON
  • message_mini.html message OFF
  • blocks_hight.html bloc centre haut ON
  • blocks_hight_mini.html bloc centre haut OFF
  • blocks_low.html bloc centre bas ON
  • blocks_low_mini.html bloc centre bas OFF


Avec l’analyse des modifications effectuées sur un thème échantillon en reviendra en suite plus en détail sur la préparation de ces files en html.


Pour le moment sachez que

  • pour les blocs droits, gauches et génériques on utilisera le code html de la fonction themesidebox (à moins que le thème n’ait pas déjà des codes différentiés pour chaque bloc)
  • pour les Messages et les blocs Centre Haut et Bas on utilisera le code html des fonctions OpenTable e CloseTable
  • à moins que le thème ne soit pas déjà préparé avec des files en html pour les blocs, on devra créer les files en prélevant seulement le code en html de la fonction en php,
  • avant le titre il faut ajouter la variable $control_blocks pour visualiser l’image ON/OFF
  • pour créer le file des blocs fermés en html (OFF) on devra faire une copie du file relatif en ON et éliminer le code relatif à la variable $content (contenu du bloc) comprenant les tags de formatage relatifs.
  • après avoir préparé tous les blocs, vous pourrez éliminer du file Theme.php de votre thème la fonction function themesidebox et les autres éventuellement présentes.
  • rappelez vous que ce système vous permet aussi de modifier (pour chaque type) le code de visualisation en html des blocs et des messages, en les personnalisent à votre guise… on en parlera plus en avant.


Visualisation des flèches ON OFF des colonnes

Maximus BS prévoit aussi la possibilité d’ouvrir et de fermer les colonnes des blocs droits et/ou gauches. Ceci ce fait avec deux variables (‘‘‘$cacheblocsl, $cacheblocsr ) qui gèrent les deux colonnes (left et right) et sont initialisées dans mainfile.php.


Dans la modification de notre thème PhpNuke, il y a deux solutions possibles.


1. Procédure standard: les flèches ON OFF des colonnes sont toujours visualisées

Cette procédure fait toujours apparaitre les images ON/OFF de la colonne, même quand celle-ci n’existe pas (modules à pleine page ou sans colonne droite)


Pour insérer cette procédure, il faut ouvrir le file theme.php de notre thème et apporter les modifications suivantes:

  • a – insérer entre les global de la function themeheader les trois variables $cacheblocsl, $cacheblocsr et $module_name;


  • b – ajouter le code html de la routine de visualisation, dans la position choisie
- entre la fermeture du header et au début de la partie au-dessous (pour faire apparaitre les flèches sur les respectives colonnes)
- tout de suite après l’ouverture du tag relatif dans la partie centrale de la page (pour faire apparaitre les flèches à coté des respectives colonnes, au-dessus des messages)


Image:theme_Nuke_09a.jpg


- dans le tag central, on peut aussi insérer la visualisation des Banners ou des Public Message (en se rappelant d’insérer aussi les variables relatives dans les global et le rappel des fonctions spécifiques)


Image:theme_Nuke_10a.jpg


2. Procédure modifiée: les flèches ON OFF des colonnes sont visualisées seulement si des blocs actifs sont présents

Avec cette procédure le système vérifie l’effective présence de blocs actifs, en insérant les flèches ON/OFF seulement si les colonnes peuvent être visualisées.

Pour ajouter cette option, il faut vérifier qu’il y ait des blocs actifs dans la colonne et ceci implique deux requêtes SQL qui sont évitées dans la procédure standard.


Pour cela on doit ouvrir le file theme.php de notre thème et effectuer les modifications suivantes:

  • a – insérer entre les global de la function themeheader les trois variables $cacheblocsl, $cacheblocsr et $module_name;


  • b – insérer, toujours dans la function themeheader avant la ligne du body, la routine de vérifications de l’existence de la colonne
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 – ajouter le code html de la routine de visualisation, dans la position choisie
- entre la fermeture du header et au début de la partie au-dessous (pour faire apparaitre les flèches sur les colonnes respectives)
- tout de suite après l’ouverture du tag relatif à la partie centrale de la page (pour faire apparaitre les flèches à coté des colonnes respectives, en-dessus des messages)


Image:theme_Nuke_09.jpg


- dans le tag central, on peut aussi insérer la visualisation des Banners ou des Public Message (en se rappelant d’insérer aussi les variables relatives dans les global et le rappel des fonctions spécifiques)


Image:theme_Nuke_10.jpg



NB - Rappelez vous d'adapter les lignes du code au tipe de fichier utilisé parce que les lignes en exemple sont valides dans un fichier html

- pour des lignes php inserées dans un fichier php :

Image:theme_Nuke_10b.jpg


- pour des lignes html inseréès dans un fichier php :

Image:theme_Nuke_10c.jpg

Modification de la fonction de rappel des colonnes des blocs

  • dans la function themeheader remplacer la ligne de rappel de la fonction blocks(left) avec
if ($_COOKIE['blo']['900'] == "") { blocks(left); }


  • dans la function themefooter' remplacer la ligne de rappel de la fonction blocks(right) avec
if ($_COOKIE['blo']['901'] == "") { blocks(right); }


Une fois effectuées ces modifications, notre thème devrait marcher avec les ON/OFF sur les colonnes des blocs, sur chaque bloc e sur les messages… en visualisant les images des fléchettes de default de Maximus BS


Image:theme_Nuke_11.jpg


... mais si au lieu des flèche on veut utiliser des images plus appropriées à notre thème, il sera suffisant de les préparer et, une fois insérer dans le fichier des images de notre thème, elle seront automatiquement relevées par le Système et utilisées à la place de celle de default.


Elimination de la colonne droite dans la page de chaque article

Quand on ouvre une page d’un article pour le lire entièrement, on visualise sur la droite une colonne de blocs spécifiques des News (Link, Article le plus lu, Evaluation de l’Article et Options)... pour cette raison, quand on ouvre ces pages, il est mieux d’éliminer par default la colonne de droite des blocs associés au module news, en la laissant par contre visible dans le cas de News à la home page.


Analysons de près l’optimisation d’un thème de Php-Nuke à Maximus BS

Pour commencer

  • avant de commencer notre travail d’optimisation, préparez en local une copie de Maximus BS en activant quelque simple bloc (un ou deux pour chaque type)... ceci vous permettra de vérifier rapidement le code qu’à chaque fois vous modifierez;
  • préparez tout de suite dans le file kernel/config.php le $display_errors = '1'... ceci montrera aussi tôt les éventuelles erreurs, en donnant des références utiles;
  • après chaque procédure de modification, rappelez vous de sauvegarder toujours le file et de faire un refresh de la page pour voir si ce que vous avez modifié a été écrit correctement (si vous avancer trop il est difficile de retrouver d’éventuelles erreurs);
  • nous modifierons par exemple le tema bluetabs qui est téléchargeable ici ... Ainsi chaque code et chaque modification seront toujours relatifs à ce thème, considéré comme échantillon.
  • afin de comparer les modifications effectuées, en téléchargeant le thème bluetabs vous trouverez le file du thème original (theme_orig.php), le même file avec les modifications effectuées en ce tutorial (theme_moda.php) et le file final (theme.php) qui inclut les ultérieures modifications effectuées d’après le paragraphe "différencier la graphique et les couleurs de chaque module".


Installation du thème

  • installons et activons le thème... ceci sera reconnu comme un thème nuke et le système utilisera les routines spécifiques préparées pour la compatibilité avec Php-Nuke;


  • au premier refresh les premières erreurs dus à la compatibilité avec Maximus seront visibles... presque toujours ce sont les lignes de code des banners et éventuelles query qui utilisent les vieilles routines $dbi et non pas les plus récentes $db;
-- dans notre cas on utilise l’erreur du banner;


Image:theme_Nuke_12.jpg


-- ouvrons le file theme.php e, en individuant la ligne du banner
include("banners.php");
pour l’instant commentons-la
//include("banners.php");
-- au cas où il y aurait des erreurs de query, il faudra procéder au changement du code de $dbi à $db (pour voir comment modifier le différentes typologies des query, faites référence aux spécifique tutoriaux);
-- vous pourriez parfois trouver à l’intérieur du file theme.php toute la procédure pour la gestion des banners… vous pouvez tranquillement l’éliminer puisque le système utilisera sa propre procédure (module banner de la NSN) en rendant inutile et redondant ce code, avec un’inévitable perte de temps.
-- même chose pour des autres éventuelles procédures propriétaires du thème… pour l’instant commentez-les … en suite vous verrez si les rétablir ou les éliminer;


* en refaisant refresh on verra que maintenant le thème ne présente plus d’erreurs et pourrait déjà être utilisé même si il n’a pas encore été optimisé.


Image:theme_Nuke_13.jpg


Activation des routines de Maximus

  • du seul file theme.php on en tire deux
-- table.php où on laissera seulement les fonctions des tables (normalement OpenTable, OpenTable2, CloseTable, CloseTable2 );
-- news.php où on laissera les fonctions relatives aux news (normalement function themeindex et function themearticle, parfois - comme dans notre exemple – il existe même la function FormatStory );


  • dans le file theme.php on laisse seulement les “code des couleurs, la function themeheader, la function themefooter et les différentes fonctions des blocs (dans notre cas il existe seulement la function themesidebox ). Cependant ces dernières on les commente (sans les effacer, pour le moment on les rend inactives en mettant /* au début de la fonction et */ à la fin);


  • prenez le file credits.php d’un thème de default de Maximus BS (par exemple MaX_Blue) et copiez-le dans le dossier root de votre thème (vous pouvez aussi en changer les référence ou le laisser vide… l’important est que le système trouve un file nommé credits.php dans le dossier);


  • à ce point là le système reconnait le thème comme thème de Maximus et active les codes spécifiques en abandonnant ceux de nuke… mais ne vous effrayez pas pour ce que vous verrez si vous faites un refresh… le système cherche les files en html des blocs mais vous ne les avez pas encore préparés… et vous visualisé toute une série d’erreurs !


Image:theme_Nuke_14.jpg


Préparation des files HTML des blocs droit, gauche et du bloc générique

  • ouvrons un nouveau file en html et appelons-le blocks_left.html et insérons y les lignes de code prélevées de la fonction du bloc que nous avons commenté dans le file theme.php (rappelez-vous que le code rapporté ici est le code du thème pris par exemple… le code de votre thème sera certainement différent !)


Image:theme_Nuke_15.jpg


  • convertissons le code en html en nous souvenant de remplacer les éventuelles variables de couleur avec le code de la couleur effective


Image:theme_Nuke_16.jpg


  • aux ligne du titre ajoutons la variable $control_blocks et modifions les éventuels paramètres des tags


Image:theme_Nuke_17.jpg


... en faisant des refresh on pourra contrôler le formatage des blocs gauches (bien entendu tous les autres blocs continueront à donner seulement des erreurs)


  • une fois trouvé le juste formatage du bloc, on en tire deux autres copies que nous appellerons blocks_right.html et blocks.html


  • Pour préparer les bloc fermés, partons d’une copie du file blocks_left.html où, toujours du même code, on efface la variable $content et ces tags relatifs, en le modifiant si nécessaire


Image:theme_Nuke_19.jpg


afin d’obtenir le code du bloc fermé


Image:theme_Nuke_20.jpg


  • une fois mis au point le bloc fermé, sauvegardons-le en en tirant trois copies que nous appellerons blocks_left_mini.html, blocks_right_mini.html et blocks_mini.html


  • à ce point là un refresh commence à faire apparaitre le thème avec les blocs gauches et droits qui fonctionnent avec les ON/OFF… mais il manque encore les blocs centraux, les messages et les ON/OFF aux colonnes !


Image:theme_Nuke_21.jpg


Préparation des files HTML des blocs Centre haut et Centre bas et des Messages

Pour la préparation des blocs centraux (hauts e bas) et des messages, il serait suffisant de convertir en html seulement le code des function Opentable et function Closetable mais, en vue d’une optimisation qui rende le CMS le plus rapide possible et en tenant compte du fait que quand le système trouve le code de visualisation en php il doit en tous cas le traduire en html, on convertira dès maintenant en html même le code de visualisation des autres fonctions (OpenTable2 e CloseTable2 );


  • ouvrons le file table.php


Image:theme_Nuke_22.jpg


et convertissons le code en html


Image:theme_Nuke_23.jpg


  • ouvrons un nouveau file en html en l’appellent message.html et insérons y les lignes de code html prélevées des fonctions OpenTable et Close Table


  • entre les codes des deux fonctions insérons ceux relatifs à $title et à $content recopiés d’un des blocs précédemment préparés (tout le code des deux variables re-compris entre les respectifs tags <td> et )


  • avec des refresh vérifions l’éventuelle nécessité d’arranger quelque caractéristique (dans notre cas on a ajouté seulement des tags br pour séparer le titre du contenu) pour obtenir le file complet


Image:theme_Nuke_24.jpg


  • une fois trouvé le juste formatage, on en tire deux autres copies que l’on appelle blocks_hight.html et blocks_low.html


  • pour tirer le code des messages en OFF, d’une copie du file ON on élimine la variable $content et après avoir modifié le paramètres des tags, si nécessaire, on obtiendra le code du bloc des message en OFF


Image:theme_Nuke_25.jpg


  • recopions ce code en trois rangées que l’on appelle message_mini.html, blocks_hight_mini.html et blocks_low_mini.html


  • avec un dernier refresh on verra que tous les blocs latéraux et centraux ont été arrangés.


Image:theme_Nuke_26.jpg


Pour conclure

Dans le prochain paragraphe on analysera les modifications à apporter dans les deux dernières fonctions du file thème (function themeheader et function themefooter), qui non seulement optimisent le code, mais permettent la gestion ON/OFF des colonnes, le retour au top de la page, la visualisation des banners et bien autre.


En ce qui concerne le code des blocs traité jusqu’à présent, tenez compte que:

  • si l’on n’aime pas les images de default des flèches ON/OFF que le système visualise, on pourra toujours en utiliser d’autres de notre choix… il est suffisant de mettre nos trois images (seulement gif) dans le dossier images du thème et le système s’occupe de les remplacer;


Image:theme_Nuke_27.jpg


  • si l’on veut, non seulement on pourra changer les couleurs et les images des files en html pour différentier les blocs par type, mais aussi associer à chaque module des blocs avec une graphique et des couleurs différents;
- pour faire cela il sera suffisant, une fois préparé le code, d’attribuer au bloc un nom du type blocks_left_Downloads.html ou blocks_left_Downloads_mini.html, c’est-à-dire ajouter le nom du module au nom du bloc… et ici aussi le système fait tout seul en associant ce file au module indiqué… la seule contre-indication est que l’on risque de créer des centaines de files :)
- vous pouvez voir des exemples de ce type de développement sur Maximus Italia, en sélectionnant avec le Preview Theme les thèmes MaX_MultiColor et NSN-Nuke_mc... ce dernier, réalisé en intégrant les dix thèmes de la série NSN-Nuke, permet d’avoir des pages de différentes couleurs pour chaque module… vous le trouverez dans les downloads !!! :)


Piermin ( fr. trad. by Smin ) - 04 mai 2007 h 09:20