“Prérequis : notions de PHP/MYSQL”
Dans un site SPIP, quand les secteurs servent comme entrées pour les langues (rubriques français, anglais, chinois, etc), le critère racine n’est pas utilisable dans la BOUCLE RUBRIQUES pour afficher des menus cohérents. La balise #RUBRIQUEPRINCIPALE permet d’assimiler les rubriques de niveau 1 à des secteurs et donc d’afficher les menus désirés.
Exemple :
Niveau 0 : FRANÇAIS
Niveau 1 : DÉCOUVRIR ; S’ORIENTER ; PARTICIPER ;
Dans cet exemple (voir en ligne http://forum-china-europa.net/spip.php?article1 ), une boucle avec le critère racine afficherait toutes les rubriques de niveau 1 avec leurs sousrubriques, ce qui n’est pas souhaitable. #RUBRIQUEPRINCIPALE permet d’afficher uniquement les sous-rubriques des rubriques de niveau1.
La syntaxe de base utilisée pour la boucle servant à générer les différents sous menus est la suivante :
<BOUCLE_rubriques(RUBRIQUES) {id_rubrique=#RUBRIQUEPRINCIPALE}{lang} {par titre}>
<BOUCLE_sous_rubriques(RUBRIQUES){id_parent} {par num titre}>
<a href="liensouhaité">#TITRE</a> ou tout autre balise
</BOUCLE_sous_rubriques>
</BOUCLE_rubriques>
Le code de la balise (à insérer dans le fichier mes_fonctions.php situé dans le répertoire squelettes ) est le suivant :
Function balise_RUBRIQUEPRINCIPALE($p){
$_id_rubrique = interprete_argument_balise(1,$p);
if (!$_id_rubrique)
$_id_rubrique = champ_sql('id_rubrique',$p);
$p->code = "fce_getRubriquePrincipale($_id_rubrique)" ;
$p->interdire_scripts = false;
return $p;
}
function fce_getRubriquePrincipale($idrubrique) {
$requete = "SELECT id_parent, id_secteur FROM nomdevotretable_rubriques WHERE id_rubrique = $idrubrique";
$query = mysql_query($requete);
$row = mysql_fetch_row($query);
$idparent = $row[0];
$idsecteur = $row[1];
if ($idparent == $idsecteur) return $idrubrique;
return fce_getRubriquePrincipale($idparent, $idsecteur);
}
Discussions par date d’activité
4 discussions
OK j’avais bien noté :)
Je me suis mal exprimé.
Moi aussi spip_rubriques est le nom de ma table (prefixe par defaut « spip_ »).
Pour le moment je ne vois pas ce qui merde...
Faut que je trouve ce qui me génère cette erreur.
Merci encore Thomas ;)
PS :
Est il possible que tu m’envoie ton mes_fonction.php ?
Arthegone,
Pour que celà fonctionne, il faut que la boucle contenant #RUBRIQUEPRINCIPALE soit incluse dans une boucle mère. Alors ça marchera ;)
Jérémie.
Répondre à ce message
Bonjour !
Merci pour cette contribution !! Très interessante.
Existe-t-il quelque chose de similaire pour les brèves ?
Comment faire dans un cas de multilinguisme avec des rubrique racine par langue pour insérer des brèves associée, aux rubriques principale, justement ....
Si quelqu’un a une idée...
Répondre à ce message
Salut Thomas,
Suite à l’utilisation de ton PREMIER code, pour commencer, j’ai une erreur sur mes_fonctions.php
message :
Warning : mysql_fetch_row() : supplied argument is not a valid MySQL result resource in F :\PortableApps\EasyPHP 2.0b1\www\spipjuin2008\mes_fonctions.php on line 13
Mon fichier mes_fonctions.php
il n’y a rien d’autre que ton script.
Je ne comprend pas l’erreur en fait.
La balise #INSERT_HEAD est presente dans ma page (sommaire.html)
Et j’ai ton code de base pour le bouclage.
Bizarre...
As-tu au préalable modifié le code en fonction du nom de ta table ?
Je m’explique : dans le code suivant tu dois remplacer spip_rubriques par le nom de ta table Mysql.
Thomas, je ne comprends pas pourquoi je dois changer ma table spip_rubriques. Il me semble que c’est elle qui gere justement les rubriques.
Par contre (je ne suis pas un pro de SQL) mais jamais on ne met le nom de la base SQL c’est normal ?
sinon je ne vois pas pourquoi cela merde aussi bien en local que sur le web.
Tu as quelle version de spip exactement ?
Spip_rubriques est le nom de MA table. Il faut bien sur adapter le code en fonction de ta configuration.
Répondre à ce message
Bonjour Thomas, contribution très interessante.
En ce qui me concerne (ne maitrisant pas trop le php) mes secteurs serait plutot de niveau 3.
Quelle est la valeur à changer dans mes_fonctions.php ?
Bonjour, ce code ne fonctionne que pour des rubriques de niveau 1 (dont le parent est id_secteur). En effet, le principe de la boucle est d’effectuer une récursivité jusqu’à ce que id_parent soit égal à id_secteur. Maintenant si tu veux récuperer les id des rubriques de niveau 3 je te propose le code suivant un peu différent :
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |