Changeset 49313 in spip-zone


Ignore:
Timestamp:
Jul 4, 2011, 12:10:13 PM (10 years ago)
Author:
cedric@…
Message:

analyser les urls de la gauche vers la droite, pour se donner une chance de contextualiser la rechercher d'un segment par son segment parent (ie etre capable de distinguer deux objets differents avec le meme segment, mais avec des parents différents)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/urls_etendues/urls/arbo.php

    r45405 r49313  
    410410
    411411        if (strlen($url_propre) AND !preg_match(',^[^/]*[.]php,',$url_propre)){
    412                 $types_parents = array();
     412                $parents_vus = array();
    413413               
    414414                // recuperer tous les objets de larbo xxx/article/yyy/mot/zzzz
     415                // on parcourt les segments de gauche a droite
     416                // pour pouvoir contextualiser un segment par son parent
    415417                $url_arbo = explode('/',$url_propre);
    416418                while (count($url_arbo)>0){
    417                         $url_propre = array_pop($url_arbo);
    418                         if (count($url_arbo))
    419                                 $type = array_pop($url_arbo);
    420                         else
    421                                 $type=null;
     419                        $type=null;
     420                        if (count($url_arbo)>1)
     421                                $type = array_shift($url_arbo);
     422                        $url_propre = array_shift($url_arbo);
    422423                        // Compatibilite avec les anciens marqueurs d'URL propres
    423424                        // Tester l'entree telle quelle (avec 'url_libre' des sites ont pu avoir des entrees avec marqueurs dans la table spip_urls)
    424425                        if (is_null($type)
    425426                        OR !$row=sql_fetsel('id_objet, type, date', 'spip_urls',array('url='.sql_quote("$type/$url_propre")))) {
    426                                 if (!is_null($type))
    427                                         array_push($url_arbo,$type);
     427                                if (!is_null($type)){
     428                                        array_unshift($url_arbo,$url_propre);
     429                                        $url_propre = $type;
     430                                }
    428431                                $row = sql_fetsel('id_objet, type, date', 'spip_urls',array('url='.sql_quote($url_propre)));
    429432                        }
     
    432435                                $col_id = id_table_objet($type);
    433436                               
    434                                 // n'affecter que la premiere fois un parent de type id_rubrique
    435                                 if (!isset($contexte[$col_id]))
    436                                         $contexte[$col_id] = $row['id_objet'];
    437 
     437                                // le plus a droite l'emporte pour des objets presents plusieurs fois dans l'url (ie rubrique)
     438                                $contexte[$col_id] = $row['id_objet'];
     439
     440                                $type_parent = '';
     441                                if ($p = url_arbo_parent($type))
     442                                        $type_parent=end($p);
     443                                // l'entite la plus a droite l'emporte, si le type de son parent a ete vu
     444                                // sinon c'est un segment contextuel supplementaire a ignorer
     445                                // ex : rub1/article/art1/mot1 : il faut ignorer le mot1, la vrai url est celle de l'article
    438446                                if (!$entite
    439                                 OR !in_array($type,$types_parents))
     447                                  OR isset($parents_vus[$type_parent]))
    440448                                        $entite = $type;
    441        
    442                                 if ($p = url_arbo_parent($type))
    443                                         $types_parents[]=end($p);
     449
     450                                // on note le dernier parent vu de chaque type
     451                                $parents_vus[$type] = $col_id;
    444452                        }
    445453                        else {
Note: See TracChangeset for help on using the changeset viewer.