Changeset 100811 in spip-zone


Ignore:
Timestamp:
Dec 3, 2016, 2:47:04 PM (3 years ago)
Author:
cedric@…
Message:

un peu de refactoring de code, plus malin et extensible

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/polyhierarchie/branches/v2.0/urls/arbopoly.php

    r100662 r100811  
    3232 * @param string $type
    3333 * @param int $id_objet
    34  * @param int $id_parent
     34 * @param array $contexte
    3535 * @return bool|null|array
    3636 */
    37 function renseigner_url_arbopoly($type, $id_objet, $id_parent=null) {
     37function renseigner_url_arbopoly($type, $id_objet, $contexte = array()) {
    3838        $urls = array();
    3939        $trouver_table = charger_fonction('trouver_table', 'base');
     
    4545        } // Quand $type ne reference pas une table
    4646        $id_objet = intval($id_objet);
     47
     48        $id_parent = (isset($contexte['id_parent'])?$contexte['id_parent']:null);
    4749
    4850        $champ_titre = $desc['titre'] ? $desc['titre'] : 'titre';
     
    8789 * @param string $type
    8890 * @param int $id_objet
    89  * @param int $id_rubrique_parent
     91 * @param array $contexte
     92 *   id_parent : rubrique parent
    9093 * @return string
    9194 */
    92 function declarer_url_arbopoly($type, $id_objet, $id_rubrique_parent=null) {
     95function declarer_url_arbopoly($type, $id_objet, $contexte = array()) {
    9396        static $urls = array();
    9497        // utiliser un cache memoire pour aller plus vite
     
    9699                return $C;
    97100        }
     101        ksort($contexte);
     102        $hash = json_encode($contexte);
    98103
    99104        // Se contenter de cette URL si elle existe ;
     
    105110        $modifier_url = (defined('_VAR_URLS') and _VAR_URLS);
    106111
    107         if (!isset($urls[$type][$id_objet][$id_rubrique_parent]) or $modifier_url) {
    108                 $r = renseigner_url_arbopoly($type, $id_objet, $id_rubrique_parent);
     112        if (!isset($urls[$type][$id_objet][$hash]) or $modifier_url) {
     113                $r = renseigner_url_arbopoly($type, $id_objet, $contexte);
    109114                // Quand $type ne reference pas une table
    110115                if ($r === false) {
     
    113118
    114119                if (!is_null($r)) {
    115                         $urls[$type][$id_objet][$id_rubrique_parent] = $r;
    116                 }
    117         }
    118 
    119         if (!isset($urls[$type][$id_objet][$id_rubrique_parent])) {
     120                        $urls[$type][$id_objet][$hash] = $r;
     121                }
     122        }
     123
     124        if (!isset($urls[$type][$id_objet][$hash])) {
    120125                return "";
    121126        } # objet inexistant
    122127
    123         $u = &$urls[$type][$id_objet][$id_rubrique_parent];
     128        $u = &$urls[$type][$id_objet][$hash];
    124129        $url_propre = $u['url'];
    125130
     
    226231
    227232        // Mode propre
    228         $propre = declarer_url_arbopoly($type, $id);
     233        $c = array();
     234        $propre = declarer_url_arbopoly($type, $id, $c);
    229235        parse_str($args, $contexte);
    230236        $champ_parent = url_arbo_parent($type);
     
    232238          and $champ_parent = reset($champ_parent)
    233239          and isset($contexte[$champ_parent]) and $contexte[$champ_parent]) {
    234                 $propre_contexte = declarer_url_arbopoly($type, $id, $contexte[$champ_parent]);
     240                $c['id_parent'] = $contexte[$champ_parent];
     241                $propre_contexte = declarer_url_arbopoly($type, $id, $c);
    235242                if ($propre_contexte !== $propre) {
    236243                        $propre = $propre_contexte;
     
    470477                        } else {
    471478                                foreach ($url_arbo_new as $k => $o) {
    472                                         if ($s = declarer_url_arbopoly($o['objet'], $o['id_objet'], (isset($parents_vus['rubrique'])?$parents_vus['rubrique']:null))) {
     479                                        $c = array();
     480                                        if (isset($parents_vus['rubrique'])) {
     481                                                $c['id_parent'] = $parents_vus['rubrique'];
     482                                        }
     483                                        if ($s = declarer_url_arbopoly($o['objet'], $o['id_objet'], $c)) {
    473484                                                $url_arbo_new[$k] = $s;
    474485                                        } else {
Note: See TracChangeset for help on using the changeset viewer.