Changeset 81374 in spip-zone


Ignore:
Timestamp:
Mar 14, 2014, 4:04:17 PM (5 years ago)
Author:
cedric@…
Message:

Pour les URL propres : prendre celle qui a un id_parent=0 en priorite.
Si elle n'existe qu'avec un id_parent<>0, la reinserer en base avec un id_parent=0 pour eviter les collisions avec d'autres objets

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _core_/branches/spip-3.0/plugins/urls_etendues/urls/propres.php

    r79785 r81374  
    119119        // Recuperer une URL propre correspondant a l'objet.
    120120        // mais urls a 1 segment uniquement (pas d'urls /)
    121         $row = sql_fetsel("U.url, U.date, U.perma, $champ_titre",
     121        // de preference avec id_parent=0, puis perma, puis par date desc
     122        $row = sql_fetsel("U.url, U.date, U.id_parent, U.perma, $champ_titre",
    122123                          "$table AS O LEFT JOIN spip_urls AS U ON (U.type='$type' AND U.id_objet=O.$col_id)",
    123                           "O.$col_id=$id_objet AND (U.segments IS NULL OR U.segments=1)", '', 'U.date DESC', 1);
     124                          "O.$col_id=$id_objet AND (U.segments IS NULL OR U.segments=1)", '', 'U.id_parent=0 DESC, U.perma DESC, U.date DESC', 1);
    124125
    125126        // en SQLite le left join retourne du vide si il y a une url mais qui ne correspond pas pour la condition sur le segment
    126127        // on verifie donc que l'objet existe bien avant de sortir ou de creer une url pour cet objet
    127128        if (!$row)
    128                 $row = sql_fetsel("'' as url, '' as date, 0 as perma, $champ_titre",
     129                $row = sql_fetsel("'' as url, '' as date, 0 as id_parent, 0 as perma, $champ_titre",
    129130                                  "$table AS O",
    130131                                  "O.$col_id=$id_objet");
     132
    131133        if (!$row) return ""; # Quand $id_objet n'est pas un numero connu
    132134
    133135        $url_propre = $row['url'];
     136
     137        // si url_propre connue mais avec id_parent non nul, essayer de reinserer tel quel avec id_parent=0
     138        if ($url_propre AND $row['id_parent']){
     139                include_spip('action/editer_url');
     140                $set = array('url' => $url_propre, 'type' => $type, 'id_objet' => $id_objet, 'perma' => $row['perma']);
     141                // si on arrive pas a reinserer tel quel, on annule url_propre pour forcer un recalcul d'url
     142                if (!url_insert($set,false,_url_propres_sep_id))
     143                        $url_propre = "";
     144                else
     145                        $url_propre = $row['url'] = $set['url'];
     146        }
    134147
    135148        // Se contenter de cette URL si elle existe ;
Note: See TracChangeset for help on using the changeset viewer.