Changeset 95960 in spip-zone
- Timestamp:
- Mar 13, 2016, 4:36:35 PM (5 years ago)
- Location:
- _plugins_/fil_ariane/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
_plugins_/fil_ariane/trunk/fil_ariane_fonctions.php
r72965 r95960 30 30 * et construit un fil d'Ariane. 31 31 */ 32 function balise_FIL_ARIANE_dist($p) 33 { 34 35 // il est possible qu'il y ait un tableau des valeurs souhaitées pour le fil d'Ariane 36 // il s'agit dans ce cas du 1er paramètre passé avec la balise "fil_ariane" 37 if ($fil = interprete_argument_balise(1, $p)) { 38 // si un id_objet est passé à la balise 39 if ($id_objet = interprete_argument_balise(2, $p)) { 40 $p->code = "calcule_hierarchie_objet($fil, $id_objet)"; 41 return $p; 42 } 43 } 44 45 if (!$fil) { 46 // On appele la fonction qui construit le fil d'Ariane 47 // en prenant en compte seulement l'id de l'objet 48 $_id_objet = $p->boucles[$p->id_boucle]->primary; 49 50 // Code php mis en cache, et qui sera exécuté et qui est sensé ramener la valeur du champ 51 $id_objet = champ_sql($_id_objet, $p); 52 53 // L'objet issu du nom de la table 54 $objet = $p->boucles[$p->id_boucle]->id_table; 55 56 $p->code = "calcule_hierarchie_objet('$objet', $id_objet)"; 57 } else { 58 // On décortique le tableau $fil et on appelle la fonction qui construit le fil 59 // avec les valeurs du tableau 60 $p->code = "construire_FIL_ARIANE($fil)"; 61 62 } 63 64 return $p; 32 function balise_FIL_ARIANE_dist($p) { 33 34 // il est possible qu'il y ait un tableau des valeurs souhaitées pour le fil d'Ariane 35 // il s'agit dans ce cas du 1er paramètre passé avec la balise "fil_ariane" 36 if ($fil = interprete_argument_balise(1, $p)) { 37 // si un id_objet est passé à la balise 38 if ($id_objet = interprete_argument_balise(2, $p)) { 39 $p->code = "calcule_hierarchie_objet($fil, $id_objet)"; 40 return $p; 41 } 42 } 43 44 if (!$fil) { 45 // On appele la fonction qui construit le fil d'Ariane 46 // en prenant en compte seulement l'id de l'objet 47 $_id_objet = $p->boucles[$p->id_boucle]->primary; 48 49 // Code php mis en cache, et qui sera exécuté et qui est sensé ramener la valeur du champ 50 $id_objet = champ_sql($_id_objet, $p); 51 52 // L'objet issu du nom de la table 53 $objet = $p->boucles[$p->id_boucle]->id_table; 54 55 $p->code = "calcule_hierarchie_objet('$objet', $id_objet)"; 56 } else { 57 // On décortique le tableau $fil et on appelle la fonction qui construit le fil 58 // avec les valeurs du tableau 59 $p->code = "construire_FIL_ARIANE($fil)"; 60 61 } 62 63 return $p; 65 64 } 66 65 … … 70 69 * Calcule la hierarchie d'un objet et la retourne sous forme d'un tableau 71 70 */ 72 function calcule_hierarchie_objet($objet, $id_objet) 73 { 74 75 $objet = objet_type($objet); // pour obtenir le type d'objet au singulier 76 77 if ($f = charger_fonction($objet, 'fil_ariane', true)) { 78 $fil = $f($id_objet); 79 return construire_FIL_ARIANE($fil); 80 } 81 82 $fil_ariane_objet = charger_fonction('objet', 'fil_ariane'); 83 $fil = $fil_ariane_objet($objet, $id_objet); 84 return construire_FIL_ARIANE($fil); 71 function calcule_hierarchie_objet($objet, $id_objet) { 72 73 $objet = objet_type($objet); // pour obtenir le type d'objet au singulier 74 75 if ($f = charger_fonction($objet, 'fil_ariane', true)) { 76 $fil = $f($id_objet); 77 return construire_FIL_ARIANE($fil); 78 } 79 80 $fil_ariane_objet = charger_fonction('objet', 'fil_ariane'); 81 $fil = $fil_ariane_objet($objet, $id_objet); 82 return construire_FIL_ARIANE($fil); 85 83 86 84 } … … 89 87 * Construit le fil d'Ariane 90 88 */ 91 function construire_FIL_ARIANE($fil) 92 { 93 94 $fil_ariane = '<div class="' . _FIL_ARIANE_STYLE . '">'; 95 96 if (!is_array($fil)) { 97 return ''; 98 } 99 100 // si on doit tracer le 1er élément, on l'ajoute au début du tableau 101 if (_FIL_ARIANE_ACCUEIL) 102 $fil = array(_T('public:accueil_site') => $GLOBALS['meta']['adresse_site']) + $fil; 103 104 // si le fil d'Ariane est court, on retire le dernier élément 105 if (_FIL_ARIANE_COURT) 106 array_pop($fil); 107 108 $nb = count($fil); 109 $passe = 0; 110 111 foreach ($fil as $titre => $lien) { 112 113 // si on a déja tracé un élément, mais qu'on est pas encore arrivé au dernier 114 if ($passe > 0) 115 $fil_ariane .= "<span class=\"sep divider\">" . _FIL_ARIANE_SEP . "</span>"; 116 117 // tant qu'on est pas encore arrivé au dernier élément 118 if ($passe < $nb - 1) 119 $fil_ariane .= "<a href='$lien'>$titre</a>"; 120 121 // si on arrive au dernier 122 elseif ($passe >= $nb - 1) { 123 if (_FIL_ARIANE_COURT) { // si court, lien off dans tous les cas 124 $fil_ariane .= "<a href='$lien'>$titre</a>"; 125 } else { // sinon, lien ou pas selon conf 126 if (_FIL_ARIANE_LIEN) 127 $fil_ariane .= "<a class='on' href='$lien'>$titre</a>"; 128 else 129 $fil_ariane .= "<span class='on'>$titre</span>"; 130 } 131 } 132 133 $passe++; 134 } 135 136 $fil_ariane .= '</div>'; 137 return $fil_ariane; 89 function construire_FIL_ARIANE($fil) { 90 91 $fil_ariane = '<div class="' . _FIL_ARIANE_STYLE . '">'; 92 93 if (!is_array($fil)) { 94 return ''; 95 } 96 97 // si on doit tracer le 1er élément, on l'ajoute au début du tableau 98 if (_FIL_ARIANE_ACCUEIL) 99 $fil = array(_T('public:accueil_site') => $GLOBALS['meta']['adresse_site']) + $fil; 100 101 // si le fil d'Ariane est court, on retire le dernier élément 102 if (_FIL_ARIANE_COURT) 103 array_pop($fil); 104 105 $nb = count($fil); 106 $passe = 0; 107 108 foreach ($fil as $titre => $lien) { 109 110 // si on a déja tracé un élément, mais qu'on est pas encore arrivé au dernier 111 if ($passe > 0) 112 $fil_ariane .= "<span class=\"sep divider\">" . _FIL_ARIANE_SEP . "</span>"; 113 114 // tant qu'on est pas encore arrivé au dernier élément 115 if ($passe < $nb - 1) 116 $fil_ariane .= "<a href='$lien'>$titre</a>"; 117 118 // si on arrive au dernier 119 elseif ($passe >= $nb - 1) { 120 if (_FIL_ARIANE_COURT) { // si court, lien off dans tous les cas 121 $fil_ariane .= "<a href='$lien'>$titre</a>"; 122 } else { // sinon, lien ou pas selon conf 123 if (_FIL_ARIANE_LIEN) 124 $fil_ariane .= "<a class='on' href='$lien'>$titre</a>"; 125 else 126 $fil_ariane .= "<span class='on'>$titre</span>"; 127 } 128 } 129 130 $passe++; 131 } 132 133 $fil_ariane .= '</div>'; 134 return $fil_ariane; 138 135 } 139 136 … … 144 141 * couples titre => url 145 142 */ 146 function fil_ariane_objet_dist($objet, $id_objet) 147 { 148 149 $url = generer_url_entite($id_objet, $objet); 150 $titre = generer_info_entite($id_objet, $objet, 'titre'); 151 152 $fil = array(); 153 $fil[$titre] = $url; 154 return $fil; 155 } 156 157 function fil_ariane_organisation_dist($id_organisation) 158 { 159 return fil_ariane_hierarchie_objet('organisation', $id_organisation, 'nom', 'id_parent'); 160 } 161 162 function fil_ariane_rubrique_dist($id_rubrique) 163 { 164 return fil_ariane_hierarchie_objet('rubrique', $id_rubrique, 'titre', 'id_parent'); 165 } 166 167 function fil_ariane_article_dist($id_article) 168 { 169 // récupere l'id de la rubrique parent, le titre de l'article 170 $item = sql_fetsel('id_rubrique, titre', 'spip_articles', "id_article = " . sql_quote($id_article)); 171 172 // récupère la hierarchie de la rubrique parent seulement si id_rubrique non nul (cas des pages uniques); 173 $fil = array(); 174 if ($item['id_rubrique'] > 0) { 175 $fil_ariane_rubrique = charger_fonction('rubrique', 'fil_ariane'); 176 $fil = $fil_ariane_rubrique($item['id_rubrique']); 177 } 178 179 // ajoute le titre et l'url de l'article 180 $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_article, 'article'); 181 182 return $fil; 183 } 184 185 function fil_ariane_produit_dist($id_produit) 186 { 187 // récupère l'id de la rubrique parent ainsi que le titre du produit 188 $item = sql_fetsel('id_rubrique, titre', 'spip_produits', "id_produit = " . sql_quote($id_produit)); 189 190 // récupère la hierarchie de la rubrique du produit 191 $fil_ariane_rubrique = charger_fonction('rubrique', 'fil_ariane'); 192 $fil = $fil_ariane_rubrique($item['id_rubrique']); 193 194 // ajoute le titre et l'url du produit 195 $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_produit, 'produit'); 196 197 return $fil; 198 } 199 200 function fil_ariane_mot_dist($id_mot) 201 { 202 // récupère l'id du groupe, le titre du mot 203 $item = sql_fetsel('id_groupe, titre', 'spip_mots', "id_mot = " . sql_quote($id_mot)); 204 205 // récupère la hierarchie du parent (si le plugin groupes de mots arborescents) 206 # $fil = fil_ariane_hierarchie_objet('groupe' , $item['id_groupe'], 'titre', 'id_parent'); 207 208 // récupère le nom du groupe 209 $groupe = sql_getfetsel('titre', 'spip_groupes_mots', "id_groupe = " . sql_quote($item['id_groupe'])); 210 211 // ajoute le titre et l'url du groupe 212 $fil[typo(supprimer_numero($groupe))] = generer_url_entite($item['id_groupe'], 'groupe'); 213 214 // ajoute le titre et l'url du mot 215 $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_mot, 'mot'); 216 217 return $fil; 218 } 219 220 221 function fil_ariane_hierarchie_objet($objet, $id_objet, $col_titre, $col_parent) 222 { 223 $fil = array(); 224 225 // trouver le nom du champ contenant la clé primaire de l'objet 226 $col_id = id_table_objet($objet); 227 228 // trouver le nom de la table contenant l'objet 229 $table = table_objet_sql($objet); 230 231 // trouver le titre et l'id du parent de l'objet en cours; on calcule son url; 232 $item = sql_fetsel("$col_titre AS titre , $col_parent AS id_parent", $table, "$col_id = " . sql_quote($id_objet)); 233 234 $titre = typo(supprimer_numero($item['titre'])); 235 $id_parent = $item['id_parent']; 236 $url = generer_url_entite($id_objet, $objet); 237 238 // tant qu'il y a des parents, je place nom => url dans le tableau 239 while ($id_parent) { 240 // on trouve le parent, son titre; on calcule son url 241 $parent = sql_fetsel("$col_titre AS titre , $col_parent AS id_parent", $table, "$col_id = " . sql_quote($id_parent)); 242 243 $nom_parent = typo(supprimer_numero($parent['titre'])); 244 $url_parent = generer_url_entite($id_parent, $objet); 245 246 $fil[$nom_parent] = $url_parent; 247 $id_parent = $parent['id_parent']; 248 } 249 250 // on inverse le tableau 251 $fil = array_reverse($fil, true); 252 253 $fil[$titre] = $url; 254 255 return $fil; 256 257 } 143 function fil_ariane_objet_dist($objet, $id_objet) { 144 145 $url = generer_url_entite($id_objet, $objet); 146 $titre = generer_info_entite($id_objet, $objet, 'titre'); 147 148 $fil = array(); 149 $fil[$titre] = $url; 150 return $fil; 151 } 152 153 function fil_ariane_organisation_dist($id_organisation) { 154 return fil_ariane_hierarchie_objet('organisation', $id_organisation, 'nom', 'id_parent'); 155 } 156 157 function fil_ariane_rubrique_dist($id_rubrique) { 158 return fil_ariane_hierarchie_objet('rubrique', $id_rubrique, 'titre', 'id_parent'); 159 } 160 161 function fil_ariane_article_dist($id_article) { 162 // récupere l'id de la rubrique parent, le titre de l'article 163 $item = sql_fetsel('id_rubrique, titre', 'spip_articles', "id_article = " . sql_quote($id_article)); 164 165 // récupère la hierarchie de la rubrique parent seulement si id_rubrique non nul (cas des pages uniques); 166 $fil = array(); 167 if ($item['id_rubrique'] > 0) { 168 $fil_ariane_rubrique = charger_fonction('rubrique', 'fil_ariane'); 169 $fil = $fil_ariane_rubrique($item['id_rubrique']); 170 } 171 172 // ajoute le titre et l'url de l'article 173 $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_article, 'article'); 174 175 return $fil; 176 } 177 178 function fil_ariane_produit_dist($id_produit) { 179 // récupère l'id de la rubrique parent ainsi que le titre du produit 180 $item = sql_fetsel('id_rubrique, titre', 'spip_produits', "id_produit = " . sql_quote($id_produit)); 181 182 // récupère la hierarchie de la rubrique du produit 183 $fil_ariane_rubrique = charger_fonction('rubrique', 'fil_ariane'); 184 $fil = $fil_ariane_rubrique($item['id_rubrique']); 185 186 // ajoute le titre et l'url du produit 187 $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_produit, 'produit'); 188 189 return $fil; 190 } 191 192 function fil_ariane_mot_dist($id_mot) { 193 // récupère l'id du groupe, le titre du mot 194 $item = sql_fetsel('id_groupe, titre', 'spip_mots', "id_mot = " . sql_quote($id_mot)); 195 196 // récupère la hierarchie du parent (si le plugin groupes de mots arborescents) 197 # $fil = fil_ariane_hierarchie_objet('groupe' , $item['id_groupe'], 'titre', 'id_parent'); 198 199 // récupère le nom du groupe 200 $groupe = sql_getfetsel('titre', 'spip_groupes_mots', "id_groupe = " . sql_quote($item['id_groupe'])); 201 202 // ajoute le titre et l'url du groupe 203 $fil[typo(supprimer_numero($groupe))] = generer_url_entite($item['id_groupe'], 'groupe'); 204 205 // ajoute le titre et l'url du mot 206 $fil[typo(supprimer_numero($item['titre']))] = generer_url_entite($id_mot, 'mot'); 207 208 return $fil; 209 } 210 211 212 function fil_ariane_hierarchie_objet($objet, $id_objet, $col_titre, $col_parent) { 213 $fil = array(); 214 215 // trouver le nom du champ contenant la clé primaire de l'objet 216 $col_id = id_table_objet($objet); 217 218 // trouver le nom de la table contenant l'objet 219 $table = table_objet_sql($objet); 220 221 // trouver le titre et l'id du parent de l'objet en cours; on calcule son url; 222 $item = sql_fetsel("$col_titre AS titre , $col_parent AS id_parent", $table, "$col_id = " . sql_quote($id_objet)); 223 224 $titre = typo(supprimer_numero($item['titre'])); 225 $id_parent = $item['id_parent']; 226 $url = generer_url_entite($id_objet, $objet); 227 228 // tant qu'il y a des parents, je place nom => url dans le tableau 229 while ($id_parent) { 230 // on trouve le parent, son titre; on calcule son url 231 $parent = sql_fetsel("$col_titre AS titre , $col_parent AS id_parent", $table, "$col_id = " . sql_quote($id_parent)); 232 233 $nom_parent = typo(supprimer_numero($parent['titre'])); 234 $url_parent = generer_url_entite($id_parent, $objet); 235 236 $fil[$nom_parent] = $url_parent; 237 $id_parent = $parent['id_parent']; 238 } 239 240 // on inverse le tableau 241 $fil = array_reverse($fil, true); 242 243 $fil[$titre] = $url; 244 245 return $fil; 246 247 } -
_plugins_/fil_ariane/trunk/fil_ariane_pipelines.php
r65952 r95960 2 2 3 3 function fil_ariane_insert_head($flux){ 4 5 4 $flux .= '<!-- insertion de la css fil_ariane --><link rel="stylesheet" type="text/css" href="'.find_in_path('fil_ariane.css').'" media="all" />'; 5 return $flux; 6 6 } 7 7 -
_plugins_/fil_ariane/trunk/paquet.xml
r90453 r95960 12 12 13 13 <auteur lien="http://www.cym.fr">Cyril MARION</auteur> 14 14 <auteur lien="http://magraine.net">Matthieu Marcillaud</auteur> 15 15 16 16 <licence>GNU/GPL</licence> 17 17 <traduire gestionnaire="salvatore" module="fil_ariane" reference="fr" /> 18 18 19 19 <pipeline nom="insert_head" inclure="fil_ariane_pipelines.php" /> 20 20 21 21 </paquet>
Note: See TracChangeset
for help on using the changeset viewer.