Accueil Boite à Outils Scripts PHP Gestion d’une rubrique... en attendant SPIP

Publié le : 10 septembre 2004
Imprimer Imprimer cet article

Auteur :
Alain Sichel

Alain Sichel
Gestion d’une rubrique... en attendant SPIP

Voici quelques idées de solutions pour ceux qui n’ont pas (encore) un site sous SPIP et qui en ont assez à chaque changement (nouvelle page, etc) de devoir reprendre toutes les pages d’une rubrique pour mettre à jour les liens internes [1].

Une rubrique, quelle galère !

Lorsqu’on gère un site contenant de nombreuses pages, à chaque nouvelle page dans une rubrique, il faut reprendre reprendre toutes les pages de la rubrique pour mettre à jour les liens internes, sans oublier les pages de présentation, le plan du site...

Evidemment, la solution idéale, c’est de rendre le site dynamique, en utilisant par exemple SPIP, car le système des boucles SPIP permet la mise à jour automatique. Maintenant, tout le monde n’est pas prêt à passer sous SPIP, car,

- il faut un hébergement permettant PHP et MySQL (c’est une mauvaise raison car ce n’est pas difficile à trouver !),

- il faut du temps pour modifier un gros site, et souvent le maître-toile utilise le seul temps dont il dispose pour enrichir le contenu de son site,

- c’est dur de renoncer à des URL bien référencées, et c’est aussi très dur d’envisager la réécriturer des URL de SPIP pour garder les anciennes [2],

- c’est dur aussi de renoncer aux scripts PHP ou Javascript que l’on a placés dans ses pages, car ils ne vont plus fonctionner sous SPIP. Les adapter ou trouver d’autres solutions demande beaucoup de recherches...

Pour toutes ces raisons, alors que je suis convaincu des avantages de SPIP, je n’ai pas encore mis les sites CYES et RESSY sous ce CMS. Alors, en attendant que je sois satisfait de mes essais sous SPIP, j’ai utilisé quelques solutions alternatives que je vous propose ici.


Une boucle en PHP

La principale solution que j’utilise est un script PHP qui utilise une boucle pour afficher les pages d’une rubrique.

- La boucle de base :

Voici le code par exemple pour la rubrique "Alcool" :

<?php
$alcool= array(
array("/cirdd/alcool/definitions_alcool.php","Quelques définitions"),
array("/cirdd/alcool/chiffres_alcool.php","Quelques chiffres"),
array("/cirdd/alcool/calcul_alcoolemie.php","Calcul du taux d'alcoolémie"),
array("/cirdd/alcool/consequences_alcool.php","<abbr title=\"Conséquences de votre consommation d'alcool\">Conséquences conso. d'alcool</abbr>"),
array("/cirdd/alcool/reduire_consommation.php","Réduire sa consommation"),
array("/cirdd/alcool/reglementation_alcool.php","Réglementation sur l'alcool"),
array("/cirdd/alcool/faq_alcool.php","Foire Aux Questions"),
array("/cirdd/alcool/quizz_alcool.php","Quizz"),
array("/cirdd/alcool/documentation_alcool.php","Documentation")
);
$deb= '<b>.</b> <a href="';
for ($i=0; $i<count($alcool); $i++) {
        print $deb.$alcool[$i][0].'">';
        print $alcool[$i][1]."</a><br />\n";
}
?>

La variable $alcool contient l’adresse et le nom de chaque page. Ici, parce que ce menu doit s’afficher dans une place réduite, j’ai utilisé les balises <abbr title=""></abbr> pour réduire la longueur du titre tout en permettant l’affichage complet grâce à l’élément title="" (attention à l’échappement devant les quotes simples ou doubles).

La boucle affiche les éléments de présentation, ici un point gras en début de ligne et un retour à la ligne <br /> (mais on aurait pu aussi bien faire une liste à puces <li>... </li>), la boucle affiche chaque page, avec son nom et le lien correspondant.

- Différencier la page affichée :

Si on veut que la page sur laquelle on se trouve soit mise en évidence dans la liste, il faut la reconnaître, ce qui est facile en la comparant à $PHP_SELF, il suffit alors d’utiliser une des classes de sa feuille de style pour l’indiquer. L’image jointe à cet article montre comment ce menu s’affiche pour la page "Foire Aux Questions". Cela donne pour la boucle le code suivant :

<?php
$deb= '<b>.</b> <a href="';
for ($i=0; $i<count($alcool); $i++) {
        if ($alcool[$i][0]==$PHP_SELF) {
        print $deb.$alcool[$i][0].'" class="grey" title="Vous êtes sur cette page">';
        } else {
        print $deb.$alcool[$i][0].'">';
       }
        print $alcool[$i][1]."</a><br />\n";
}
?>

Revoici le code complet pour la rubrique "Alcool" [3] :

<?php
$alcool= array(
array("/cirdd/alcool/definitions_alcool.php","Quelques définitions"),
array("/cirdd/alcool/chiffres_alcool.php","Quelques chiffres"),
array("/cirdd/alcool/calcul_alcoolemie.php","Calcul du taux d'alcoolémie"),
array("/cirdd/alcool/consequences_alcool.php","<abbr title=\"Conséquences de votre consommation d'alcool\">Conséquences conso. d'alcool</abbr>"),
array("/cirdd/alcool/reduire_consommation.php","Réduire sa consommation"),
array("/cirdd/alcool/reglementation_alcool.php","Réglementation sur l'alcool"),
array("/cirdd/alcool/faq_alcool.php","Foire Aux Questions"),
array("/cirdd/alcool/quizz_alcool.php","Quizz"),
array("/cirdd/alcool/documentation_alcool.php","Documentation")
);
$deb= '<b>.</b> <a href="';
for ($i=0; $i<count($alcool); $i++) {
        if ($alcool[$i][0]==$PHP_SELF) {
        print $deb.$alcool[$i][0].'" class="grey" title="Vous êtes sur cette page">';
        } else {
        print $deb.$alcool[$i][0].'">';
   }
        print $alcool[$i][1]."</a><br />\n";
}
?>

- Fichier inclus :

Voilà, le script avec le menu de la rubrique est réalisé, qu’est-ce qu’on en fait ?

Eh bien, le plus simple, c’est de l’inclure dans chacune de vos pages, en écrivant dans le code à l’endroit choisi [4] :

<?php include("alcool.inc.php"); ?>

Dans cet exemple, j’ai placé le code du script dans un fichier nommé alcool.inc.php que j’ai placé dans mon dossier "alcool". A chaque nouvelle page, il n’y a donc qu’à mettre à jour ce fichier.

- Alternative : un modèle

On peut aussi utiliser les modèles de Dreamweaver, pour ceux qui utilisent ce logiciel : je peux créer un modèle (par exemple "alcool.dwt"). Ce modèle dans sa partie non modifiable contient le script PHP permettant l’affichage de la rubrique. Evidemment, toutes les pages de ma rubrique alcool dépendent du modèle "alcool.dwt".

Lorsque je modifie le script dans le modèle "alcool.dwt", Dreamweaver propose de mettre à jour toutes les pages de la rubrique alcool. Ensuite, il n’y a plus qu’à sélectionner le dossier alcool, et faire "Site" puis "Synchroniser" et demander la mise à jour sur le serveur des pages qui viennent d’être modifiées.


Autres solutions

Pour ceux qui ne peuvent pas utiliser le PHP, voici d’autres pistes :

- Les SSI :

Si vous pouvez utiliser les SSI sur votre site, il faut créer un fichier avec le menu de la rubrique [5], par exemple :

<b>.</b> <a href="/cirdd/alcool/definitions_alcool.shtml">Quelques définitions</a><br />
<b>.</b> <a href="/cirdd/alcool/chiffres_alcool.shtml">Quelques chiffres</a><br />
<b>.</b> <a href="/cirdd/alcool/calcul_alcoolemie.shtml">Calcul du taux d'alcoolémie</a><br />
<b>.</b> <a href="/cirdd/alcool/consequences_alcool.shtml"><abbr title="Conséquences de votre consommation d'alcool">Conséquences conso. d'alcool</abbr></a><br />
<b>.</b> <a href="/cirdd/alcool/reduire_consommation.shtml">Réduire sa consommation</a><br />
<b>.</b> <a href="/cirdd/alcool/reglementation_alcool.shtml">Réglementation sur l'alcool</a><br />
<b>.</b> <a href="/cirdd/alcool/faq_alcool.shtml">Foire Aux Questions</a><br />
<b>.</b> <a href="/cirdd/alcool/quizz_alcool.shtml">Quizz</a><br />
<b>.</b> <a href="/cirdd/alcool/documentation_alcool.shtml">Documentation</a>

Ce code est placé dans un fichier nommé par exemple "menu.htm". Il faut ensuite écrire à l’endroit choisi pour afficher le menu le code :

<!--#include file="menu.htm"-->

Et ne pas oublier que pour que cela marche, il faut que les pages de la rubrique aient l’extension .shtml, à moins que vous aillez accès aux fichiers de configuration de votre serveur (car on peut préciser pour quels type de fichiers les SSI sont autorisés).

En cas de mise à jour, il suffit d’envoyer le nouveau fichier menu.htm sur le serveur.

- La librairie de Dreamweaver :

Dreamweaver propose une librairie pour les éléments de page répétitifs (ces fichiers sont placés dans un dossier "Library"). On peut donc reprendre le même code que pour le fichier menu.htm indiqué ci-dessus en faisant : Modifier/Bibliothèque/Ajouter un objet dans la bibliothèque. Ce nouvel objet pourra ensuite être inclus dans chaque page de la rubrique (en sélectionnant l’objet dans la liste des actifs et en cliquant sur insérer) [6].

En cas de mise à jour de l’objet, toutes les pages l’utilisant seron modifiées. Il suffit ensuite de synchroniser le dossier local avec celui du serveur comme indiqué plus haut (utilisation de modèle Dreamweaver).


 

[1] Cet article a été modifié le 7/02/2005 pour rendre le code PHP plus fonctionnel.

[2] Voir par exemple Afficher des url php3 en html.

[3] La présentation faite ici se limite au principe, pour le site du CYES, le script contient aussi le contenant de la liste, qui n’est pas un tableau (pour éviter les tableaux imbriqués), mais un <div>, ainsi que les commandes du script d’affichage ou de masquage du menu.

[4] Evidemment, pour que ce script fonctionne il faut le mettre sur une page avec l’extension .php ou .php3, elle-même placée sur un serveur interprétant le PHP.

[5] J’utilisais ce système pour le haut de page de toute la partie Partenaires du site ressy.org. Ce site n’existe plus, mais vous pouvez voir ici une page d’exemple sur un site d’archives. A noter qu’OVH qui hébergeait ce site permet d’utiliser les SSI pour des pages ayant l’extension.htm

[6] Toujours pour le site ressy.org, ce système me permettait la mise à jour des menus déroulants pour naviguer dans le site, exemple de page.




Cliquez ici pour réagir à cet article

Imprimer Imprimer cet article


Réactions à l'article :