Changeset 70338 in spip-zone


Ignore:
Timestamp:
Mar 2, 2013, 4:00:37 PM (6 years ago)
Author:
cyril@…
Message:

le contrôle sur l'id_rubrique > 0 placé avant de calculer la hierarchie; ceci afin d'éviter un double "sep" sur les hiérarchies d'articles de type "pages uniques";

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fil_ariane/trunk/fil_ariane_fonctions.php

    r70336 r70338  
    2929function balise_FIL_ARIANE_dist($p){
    3030
    31     // il est possible qu'il y ait un tableau des valeurs souhaitées pour  le fil d'Ariane
    32     // il s'agit dans ce cas du 1er paramètre passé avec la balise "fil_ariane"
    33     $fil = interprete_argument_balise(1,$p);
    34 
    35     if (!$fil) {
    36         // On appele la fonction qui construit le fil d'Ariane
    37         // en prenant en compte seulement l'id de l'objet
    38         $_id_objet = $p->boucles[$p->id_boucle]->primary;
    39 
    40         // Code php mis en cache, et qui sera exécuté et qui est sensé ramener la valeur du champ
    41         $id_objet = champ_sql($_id_objet, $p);
    42 
    43         // L'objet issu du nom de la table
    44         $objet = $p->boucles[$p->id_boucle]->id_table;
    45 
    46         $p->code = "calcule_hierarchie_objet('$objet', $id_objet)";
    47     }
    48 
    49     else {
    50         // On décortique le tableau $fil et on appelle la fonction qui construit le fil
    51         // avec les valeurs du tableau
    52         $p->code = "construire_FIL_ARIANE($fil)";
    53 
    54     }
    55 
    56     return $p;
     31        // il est possible qu'il y ait un tableau des valeurs souhaitées pour le fil d'Ariane
     32        // il s'agit dans ce cas du 1er paramètre passé avec la balise "fil_ariane"
     33        $fil = interprete_argument_balise(1, $p);
     34
     35        if (!$fil) {
     36                // On appele la fonction qui construit le fil d'Ariane
     37                // en prenant en compte seulement l'id de l'objet
     38                $_id_objet = $p->boucles[$p->id_boucle]->primary;
     39
     40                // Code php mis en cache, et qui sera exécuté et qui est sensé ramener la valeur du champ
     41                $id_objet = champ_sql($_id_objet, $p);
     42
     43                // L'objet issu du nom de la table
     44                $objet = $p->boucles[$p->id_boucle]->id_table;
     45
     46                $p->code = "calcule_hierarchie_objet('$objet', $id_objet)";
     47        } else {
     48                // On décortique le tableau $fil et on appelle la fonction qui construit le fil
     49                // avec les valeurs du tableau
     50                $p->code = "construire_FIL_ARIANE($fil)";
     51
     52        }
     53
     54        return $p;
    5755}
    5856
     
    6462function calcule_hierarchie_objet($objet, $id_objet) {
    6563
    66     $objet = objet_type($objet); // pour obtenir le type d'objet au singulier
    67 
    68     if($f = charger_fonction ($objet , 'fil_ariane', true)){
    69         $fil = $f($id_objet);
    70         return construire_FIL_ARIANE($fil);
    71     }
    72 
    73     $fil_ariane_objet = charger_fonction ('objet' , 'fil_ariane');
    74     $fil = $fil_ariane_objet($objet, $id_objet);
    75     return construire_FIL_ARIANE($fil);
     64        $objet = objet_type($objet); // pour obtenir le type d'objet au singulier
     65
     66        if ($f = charger_fonction($objet, 'fil_ariane', true)) {
     67                $fil = $f($id_objet);
     68                return construire_FIL_ARIANE($fil);
     69        }
     70
     71        $fil_ariane_objet = charger_fonction('objet', 'fil_ariane');
     72        $fil = $fil_ariane_objet($objet, $id_objet);
     73        return construire_FIL_ARIANE($fil);
    7674
    7775}
     
    7977 * Construit le fil d'Ariane
    8078 */
    81 function construire_FIL_ARIANE($fil){
    82 
    83     $fil_ariane = '<div class="'. _FIL_ARIANE_STYLE .'">';
    84 
    85     if (!is_array($fil)) {
    86         return '';
    87     }
    88 
    89     // si on doit tracer le 1er élément, on l'ajoute au début du tableau
    90     if (_FIL_ARIANE_ACCUEIL)
    91         $fil = array(_T('public:accueil_site') => $GLOBALS['meta']['adresse_site']) + $fil;
    92 
    93 
    94     $nb= count($fil);
    95     $passe=0;
    96 
    97     foreach($fil as $titre => $lien) {
    98 
    99         // si on a déja tracé un élément, mais qu'on est pas encore arrivé au dernier
    100         if($passe>0)
    101             $fil_ariane.="<span class=\"sep divider\">" . _FIL_ARIANE_SEP . "</span>";
    102 
    103         // tant qu'on est pas encore arrivé au dernier élément
    104         if($passe<$nb-1)
    105             $fil_ariane.= "<a href='$lien'>$titre</a>";
    106 
    107         // si on arrive au dernier
    108         elseif ($passe >= $nb-1) {
    109             if (_FIL_ARIANE_LIEN)
    110                 $fil_ariane.= "<a class='on' href='$lien'>$titre</a>";
    111             else
    112                 $fil_ariane.= "<span class='on'>$titre</span>";
    113         }
    114 
    115         $passe++;
    116     }
    117 
    118     $fil_ariane.= '</div>';
    119     return $fil_ariane;
     79function construire_FIL_ARIANE($fil) {
     80
     81        $fil_ariane = '<div class="' . _FIL_ARIANE_STYLE . '">';
     82
     83        if (!is_array($fil)) {
     84                return '';
     85        }
     86
     87        // si on doit tracer le 1er élément, on l'ajoute au début du tableau
     88        if (_FIL_ARIANE_ACCUEIL)
     89                $fil = array(_T('public:accueil_site') => $GLOBALS['meta']['adresse_site']) + $fil;
     90
     91
     92        $nb = count($fil);
     93        $passe = 0;
     94
     95        foreach ($fil as $titre => $lien) {
     96
     97                // si on a déja tracé un élément, mais qu'on est pas encore arrivé au dernier
     98                if ($passe > 0)
     99                        $fil_ariane .= "<span class=\"sep divider\">" . _FIL_ARIANE_SEP . "</span>";
     100
     101                // tant qu'on est pas encore arrivé au dernier élément
     102                if ($passe < $nb - 1)
     103                        $fil_ariane .= "<a href='$lien'>$titre</a>";
     104
     105                // si on arrive au dernier
     106                elseif ($passe >= $nb - 1) {
     107                        if (_FIL_ARIANE_LIEN)
     108                                $fil_ariane .= "<a class='on' href='$lien'>$titre</a>";
     109                        else
     110                                $fil_ariane .= "<span class='on'>$titre</span>";
     111                }
     112
     113                $passe++;
     114        }
     115
     116        $fil_ariane .= '</div>';
     117        return $fil_ariane;
    120118}
    121119
     
    128126function fil_ariane_objet_dist($objet,$id_objet) {
    129127
    130     $url    = generer_url_entite($id_objet, $objet);
    131     $titre = generer_info_entite($id_objet, $objet, 'titre');
    132 
    133     $fil = array();
    134     $fil[$titre] = $url;
    135     return $fil;
     128        $url = generer_url_entite($id_objet, $objet);
     129        $titre = generer_info_entite($id_objet, $objet, 'titre');
     130
     131        $fil = array();
     132        $fil[$titre] = $url;
     133        return $fil;
    136134}
    137135
    138136function fil_ariane_organisation_dist($id_organisation) {
    139     return fil_ariane_hierarchie_objet('organisation', $id_organisation, 'nom', 'id_parent');
     137        return fil_ariane_hierarchie_objet('organisation', $id_organisation, 'nom', 'id_parent');
    140138}
    141139
    142140function fil_ariane_rubrique_dist($id_rubrique) {
    143     return fil_ariane_hierarchie_objet('rubrique', $id_rubrique, 'titre', 'id_parent');
     141        return fil_ariane_hierarchie_objet('rubrique', $id_rubrique, 'titre', 'id_parent');
    144142}
    145143
    146144function fil_ariane_article_dist($id_article) {
    147     // récupere l'id de la rubrique parent, le titre de l'article
    148     $item = sql_fetsel('id_rubrique, titre','spip_articles',"id_article = ".sql_quote($id_article));
    149 
    150     // récupère la hierarchie de la rubrique parent
    151     $fil_ariane_rubrique = charger_fonction ('rubrique' , 'fil_ariane');
    152     $fil = $fil_ariane_rubrique($item['id_rubrique']);
    153 
    154     // ajoute le titre et l'url de l'article
    155     $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_article,'article');
    156 
    157     return $fil;
     145        // récupere l'id de la rubrique parent, le titre de l'article
     146        $item = sql_fetsel('id_rubrique, titre', 'spip_articles', "id_article = " . sql_quote($id_article));
     147
     148        // récupère la hierarchie de la rubrique parent seulement si id_rubrique non nul (cas des pages uniques);
     149        if($item['id_rubrique'] > 0) {
     150                $fil_ariane_rubrique = charger_fonction('rubrique', 'fil_ariane');
     151                $fil = $fil_ariane_rubrique($item['id_rubrique']);
     152        }
     153
     154        // ajoute le titre et l'url de l'article
     155        $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_article, 'article');
     156
     157        return $fil;
    158158}
    159159
    160160function fil_ariane_produit_dist($id_produit) {
    161     // récupère l'id de la rubrique parent ainsi que le titre du produit
    162     $item = sql_fetsel('id_rubrique, titre','spip_produits',"id_produit = ".sql_quote($id_produit));
    163 
    164     // récupère la hierarchie de la rubrique du produit
    165     $fil_ariane_rubrique = charger_fonction ('rubrique' , 'fil_ariane');
    166     $fil = $fil_ariane_rubrique($item['id_rubrique']);
    167 
    168     // ajoute le titre et l'url du produit
    169     $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_produit,'produit');
    170 
    171     return $fil;
     161        // récupère l'id de la rubrique parent ainsi que le titre du produit
     162        $item = sql_fetsel('id_rubrique, titre', 'spip_produits', "id_produit = " . sql_quote($id_produit));
     163
     164        // récupère la hierarchie de la rubrique du produit
     165        $fil_ariane_rubrique = charger_fonction('rubrique', 'fil_ariane');
     166        $fil = $fil_ariane_rubrique($item['id_rubrique']);
     167
     168        // ajoute le titre et l'url du produit
     169        $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_produit, 'produit');
     170
     171        return $fil;
    172172}
    173173
    174174function fil_ariane_mot_dist($id_mot) {
    175     // récupère l'id du groupe, le titre du mot
    176     $item = sql_fetsel('id_groupe, titre','spip_mots', "id_mot = ".sql_quote($id_mot));
    177 
    178     // récupère la hierarchie du parent (si le plugin groupes de mots arborescents)
    179     # $fil = fil_ariane_hierarchie_objet('groupe' , $item['id_groupe'], 'titre', 'id_parent');
    180 
    181     // récupère le nom du groupe
    182     $groupe = sql_getfetsel('titre', 'spip_groupes_mots', "id_groupe = ".sql_quote($item['id_groupe']));
    183 
    184     // ajoute le titre et l'url du groupe
    185     $fil[typo(supprimer_numero($groupe))] = generer_url_entite($item['id_groupe'],'groupe');
    186 
    187    // ajoute le titre et l'url du mot
    188     $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_mot,'mot');
    189 
    190     return $fil;
     175        // récupère l'id du groupe, le titre du mot
     176        $item = sql_fetsel('id_groupe, titre', 'spip_mots', "id_mot = " . sql_quote($id_mot));
     177
     178        // récupère la hierarchie du parent (si le plugin groupes de mots arborescents)
     179        # $fil = fil_ariane_hierarchie_objet('groupe' , $item['id_groupe'], 'titre', 'id_parent');
     180
     181        // récupère le nom du groupe
     182        $groupe = sql_getfetsel('titre', 'spip_groupes_mots', "id_groupe = " . sql_quote($item['id_groupe']));
     183
     184        // ajoute le titre et l'url du groupe
     185        $fil[typo(supprimer_numero($groupe))] = generer_url_entite($item['id_groupe'], 'groupe');
     186
     187        // ajoute le titre et l'url du mot
     188        $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_mot, 'mot');
     189
     190        return $fil;
    191191}
    192192
    193193
    194194function fil_ariane_hierarchie_objet($objet, $id_objet, $col_titre, $col_parent){
    195     $fil = array();
    196 
    197     // trouver le nom du champ contenant la clé primaire de l'objet
    198     $col_id = id_table_objet($objet);
    199 
    200     // trouver le nom de la table contenant l'objet
    201     $table = table_objet_sql($objet);
    202 
    203     // trouver le titre et l'id du parent de l'objet en cours; on calcule son url;
    204     $item = sql_fetsel("$col_titre AS titre , $col_parent AS id_parent", $table, "$col_id = ".sql_quote($id_objet));
    205 
    206     $titre = typo(supprimer_numero($item['titre']));
    207     $id_parent = $item['id_parent'];
    208     $url = generer_url_entite($id_objet,$objet);
    209 
    210     // tant qu'il y a des parents, je place nom => url dans le tableau
    211     while ($id_parent > 0) {
    212         // on trouve le parent, son titre; on calcule son url
    213         $parent = sql_fetsel("$col_titre AS titre , $col_parent AS id_parent", $table, "$col_id = ".sql_quote($id_parent));
    214 
    215         $nom_parent = typo(supprimer_numero($parent['titre']));
    216         $url_parent = generer_url_entite($id_parent,$objet);
    217 
    218         $fil[$nom_parent] = $url_parent;
    219         $id_parent = $parent['id_parent'];
    220     }
    221 
    222     // on inverse le tableau
    223     $fil = array_reverse($fil,true);
    224 
    225     $fil[$titre] = $url;
    226 
    227     return $fil;
    228 
    229 }
     195        $fil = array();
     196
     197        // trouver le nom du champ contenant la clé primaire de l'objet
     198        $col_id = id_table_objet($objet);
     199
     200        // trouver le nom de la table contenant l'objet
     201        $table = table_objet_sql($objet);
     202
     203        // trouver le titre et l'id du parent de l'objet en cours; on calcule son url;
     204        $item = sql_fetsel("$col_titre AS titre , $col_parent AS id_parent", $table, "$col_id = " . sql_quote($id_objet));
     205
     206        $titre = typo(supprimer_numero($item['titre']));
     207        $id_parent = $item['id_parent'];
     208        $url = generer_url_entite($id_objet, $objet);
     209
     210        // tant qu'il y a des parents, je place nom => url dans le tableau
     211        while ($id_parent) {
     212                // on trouve le parent, son titre; on calcule son url
     213                $parent = sql_fetsel("$col_titre AS titre , $col_parent AS id_parent", $table, "$col_id = " . sql_quote($id_parent));
     214
     215                $nom_parent = typo(supprimer_numero($parent['titre']));
     216                $url_parent = generer_url_entite($id_parent, $objet);
     217
     218                $fil[$nom_parent] = $url_parent;
     219                $id_parent = $parent['id_parent'];
     220        }
     221
     222        // on inverse le tableau
     223        $fil = array_reverse($fil, true);
     224
     225        $fil[$titre] = $url;
     226
     227        return $fil;
     228
     229}
Note: See TracChangeset for help on using the changeset viewer.