Changeset 100659 in spip-zone


Ignore:
Timestamp:
Nov 25, 2016, 8:38:15 AM (3 years ago)
Author:
cedric@…
Message:

Report de r100658 : amelioration de #URL_POLYHIER : on peut lui passer une rubrique de la hierarchie qu'on veut prendre comme contexte d'URL, pas uniquement le parent indirect de l'objet (ie on peut passer le parent du parent indirect, ou le grand parent du parent indirect...)

Location:
_plugins_/polyhierarchie/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/polyhierarchie/trunk

  • _plugins_/polyhierarchie/trunk/paquet.xml

    r100552 r100659  
    22        prefix="polyhier"
    33        categorie="navigation"
    4         version="3.6.0"
     4        version="3.6.1"
    55        etat="test"
    66        compatibilite="[3.0.0;3.1.*]"
  • _plugins_/polyhierarchie/trunk/polyhier_fonctions.php

    r100552 r100659  
    354354/**
    355355 * Generer l'URL polyhierarchique d'un objet relativement a une rubrique parente secondaire
    356  * Si l'URL contient celle de la rubrique parente, on remplace par l'URL de la rubrique parente secondaire (URLs arbo)
    357  * sinon on ajoute un ?id_rubrique=xxx dans l'URL
    358  * a charge pour les squelettes de gerer dans les 2 cas
    359  *
    360  * Ne fonctionne que pour les rattachements simples a une autre rubrique
     356 * on cherche le parent secondaire qui est dans la branche de la rubrique fournie et on le passe en argument
     357 * de l'URL. Si le module URL le gere (arbopoly) l'URL reposera sur l'URL de ce parent secondaire,
     358 * sinon elle restera en argument
     359 *
     360 * a charge pour les squelettes de gerer la presence du id_rubrique=xxx dans le contexte de la page de l'objet concerne
     361 *
     362 * Ne fonctionne que si l'objet est lui même rattache en polyhierarchie,
     363 * pas si il est enfant direct d'une rubrique enfant secondaire
    361364 *
    362365 * @param int $id_objet
     
    370373
    371374        // si id_rubrique contextuel passe en argument et si c'est bien un parent polyhierarchique
    372         if ($id_rubrique
    373           and $id_rubrique = sql_getfetsel('id_parent','spip_rubriques_liens', 'id_parent='.intval($id_rubrique). ' AND objet='.sql_quote($objet). ' AND id_objet='.intval($id_objet))
    374         ) {
     375        $parents_poly = sql_allfetsel('id_parent','spip_rubriques_liens', 'objet='.sql_quote($objet). ' AND id_objet='.intval($id_objet));
     376        $parents_poly = array_map('reset',$parents_poly);
     377
     378        $maxiter = 100;
     379        $branche = $r = array($id_rubrique);
     380        while (!($id_parent = array_intersect($parents_poly, $r))
     381          and $maxiter--
     382          and $filles = sql_allfetsel('id_rubrique','spip_rubriques',sql_in('id_parent', $r) . " AND " . sql_in('id_rubrique', $branche, 'NOT'))) {
     383                $r = array_map('reset', $filles);
     384                $branche = array_merge($branche, $r);
     385        }
     386
     387        if ($id_parent = reset($id_parent)) {
    375388                // le vrai parent
    376389                $champ_parent = ($objet == 'rubrique' ? 'id_parent' : 'id_rubrique');
    377                 $args .= ($args?'&':'')."$champ_parent=$id_rubrique";
     390                $args .= ($args?'&':'')."$champ_parent=$id_parent";
    378391        }
    379392        $url = generer_url_entite($id_objet, $objet, $args, $ancre, true);
Note: See TracChangeset for help on using the changeset viewer.