diff --git a/.gitattributes b/.gitattributes index 0a83afb980d95bf27a47338d6d597de4f8a45aa7..fd4b4b4401121bcc63d234c34b29e4ff43158f47 100644 --- a/.gitattributes +++ b/.gitattributes @@ -695,7 +695,7 @@ ecrire/typographie/fr.php -text ecrire/typographie/index.php -text ecrire/urls/index.php -text ecrire/urls/page.php -text -ecrire/urls/propres-qs.php -text +ecrire/urls/propres_qs.php -text ecrire/win_png.htc -text ecrire/xml/analyser_dtd.php -text ecrire/xml/atom.php -text diff --git a/ecrire/public/parametrer.php b/ecrire/public/parametrer.php index 138953838df672ddfdd2c499f669cb63c0719e97..0abc6c807c3d08b24a52673b8c8b854f3bb92726 100644 --- a/ecrire/public/parametrer.php +++ b/ecrire/public/parametrer.php @@ -31,8 +31,6 @@ if (@is_readable(_DIR_TMP."charger_plugins_fonctions.php")){ include_once(_DIR_TMP."charger_plugins_fonctions.php"); } -charger_generer_url(); # pour recuperer_parametres_url - // // Contexte : lors du calcul d'une page spip etablit le contexte a partir // des variables $_GET et $_POST, et leur ajoute la date @@ -289,16 +287,25 @@ function public_parametrer_dist($fond, $local='', $cache='') { // distinguer le premier appel des appels par inclusion if (!is_array($local)) { - global $contexte; - // ATTENTION, gestion des URLs personnalises (propre etc): + include_spip('inc/filtres'); // pour normaliser_date + + // ATTENTION, gestion des URLs transformee par le htaccess + // en appelant la fonction nommee urls_$type_urls // 1. $contexte est global car cette fonction le modifie. // 2. $fond est passe par reference, pour la meme raison // Bref, les URL dites propres ont une implementation sale. // Interdit de nettoyer, faut assumer l'histoire. - include_spip('inc/filtres'); // pour normaliser_date + global $contexte; $contexte = calculer_contexte(); - if (function_exists("recuperer_parametres_url")) { - recuperer_parametres_url($fond, nettoyer_uri()); + $f = charger_fonction($GLOBALS['type_urls'], 'urls', true); + if (!$f) { + // compatibilite < 1.9.3 + charger_generer_url(); + if (function_exists('recuperer_parametres_url')) + $f = 'recuperer_parametres_url'; + } + if ($f) { + $f($fond, nettoyer_uri()); // remettre les globales (bouton "Modifier cet article" etc) foreach ($contexte as $var=>$val) { if (substr($var,0,3) == 'id_') $GLOBALS[$var] = $val; diff --git a/ecrire/urls/html.php b/ecrire/urls/html.php index 20ef1008b1c62e35ab05858233c2395cac513f10..43a098f461f364e243d98ece8088db54183c924b 100644 --- a/ecrire/urls/html.php +++ b/ecrire/urls/html.php @@ -73,8 +73,8 @@ function generer_url_document($id_document, $args='', $ancre='') { } -// http://doc.spip.org/@recuperer_parametres_url -function recuperer_parametres_url($fond, $url) { +// retrouver les parametres d'une URL dite "html" +function urls_html_dist($fond, $url) { global $contexte; diff --git a/ecrire/urls/page.php b/ecrire/urls/page.php index f85b06ac1b8779771038ea606a2fb4c066bcf040..75c7b82a23c7e3881b44c98f37a5b5d4969d0b3c 100644 --- a/ecrire/urls/page.php +++ b/ecrire/urls/page.php @@ -13,7 +13,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser if (!function_exists('generer_url_article')) { // si la place n'est pas prise - ####### modifications possibles dans ecrire/mes_options # on peut indiquer '.html' pour faire joli define ('_terminaison_urls_page', ''); @@ -69,8 +68,8 @@ function generer_url_document($id_document, $args='', $ancre='') { return generer_url_document_dist($id_document); } -// http://doc.spip.org/@recuperer_parametres_url -function recuperer_parametres_url(&$fond, $url) { +// retrouve le fond et les parametres d'une URL abregee +function urls_page_dist(&$fond, $url) { global $contexte; // Ce bloc gere les urls page et la compatibilite avec les "urls standard" diff --git a/ecrire/urls/propres.php b/ecrire/urls/propres.php index e89c672df5c07dd999079a98d0ba82b9b1dbb3e9..7d67430fbbe9b3eb0d4fdaee315633cb4f7f7068 100644 --- a/ecrire/urls/propres.php +++ b/ecrire/urls/propres.php @@ -12,6 +12,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser if (!function_exists('generer_url_article')) { // si la place n'est pas prise +include_spip('base/abstract_sql'); /* @@ -35,27 +36,55 @@ Variante 'qs' (experimentale) : ce systeme fonctionne en "Query-String", c'est-a-dire sans utilisation de .htaccess ; les adresses sont de la forme "/?Mon-titre-d-article" < ?php $type_urls = 'qs'; ? > - */ define ('_terminaison_urls_propres', ''); define ('_debut_urls_propres', ''); // Ces chaines servaient de marqueurs a l'epoque ou les URL propres devaient -// indiquer la table ou les chercher (articles, auteurs etc). -// Maintenant que ce n'est plus necessaire, elles ne sont la que pour eviter -// d'encombrer l'unique table des URL avec des doublons quasi identiques. -// Si ce n'est pas un probleme, ou si le site est nouveau, -// les definir a '' produira des URL plus jolies. +// indiquer la table ou les chercher (articles, auteurs etc), +// et elles etaient retirees par les preg_match dans la fonction ci-dessous. +// Elles sont a present definies a "" pour avoir des URL plus jolies +// mais les preg_match restent necessaires pour gerer les anciens signets. +/* define ('_marqueur_rubrique', '-'); define ('_marqueur_auteur', '_'); define ('_marqueur_breve', '+'); define ('_marqueur_site', '@'); define ('_marqueur_mot_d', '+-'); define ('_marqueur_mot_f', '-+'); +*/ +define ('_marqueur_rubrique', ''); +define ('_marqueur_auteur', ''); +define ('_marqueur_breve', ''); +define ('_marqueur_site', ''); +define ('_marqueur_mot_d', ''); +define ('_marqueur_mot_f', ''); + +// Retire les marqueurs de type dans une URL propre ancienne maniere + +function retirer_marqueurs_url_propre($url_propre) +{ + if (preg_match(',^\+\-(.*?)\-\+$,', $url_propre, $regs)) { + return $regs[1]; + } + else if (preg_match(',^-(.*?)-?$,', $url_propre, $regs)) { + return $regs[1]; + } + else if (preg_match(',^\+(.*?)\+?$,', $url_propre, $regs)) { + return $regs[1]; + } + else if (preg_match(',^_(.*?)_?$,', $url_propre, $regs)) { + return $regs[1]; + } + else if (preg_match(',^@(.*?)@?$,', $url_propre, $regs)) { + return $regs[1]; + } + // les articles n'ont pas de marqueur + return $url_propre; +} -include_spip('base/abstract_sql'); // http://doc.spip.org/@_generer_url_propre function _generer_url_propre($type, $id_objet) { @@ -241,10 +270,10 @@ function generer_url_document($id_document, $args='', $ancre='') { return generer_url_document_dist($id_document, $args, $ancre); } -// http://doc.spip.org/@recuperer_parametres_url -function recuperer_parametres_url(&$fond, $url) { +// retrouve le fond et les parametres d'une URL propre +function urls_propres_dist(&$fond, $url) { global $contexte; - $id_objet = 0; + $id_objet = $type = 0; // Migration depuis anciennes URLs ? if ($_SERVER['REQUEST_METHOD'] != 'POST') { @@ -293,11 +322,10 @@ function recuperer_parametres_url(&$fond, $url) { $url_propre = preg_replace(',[?].*,', '', $url); } // Mode Query-String ? - $adapter_le_fond = false; + if (!$url_propre AND preg_match(',([?])([^=/?&]+)(&.*)?$,', $GLOBALS['REQUEST_URI'], $r)) { $url_propre = $r[2]; - $adapter_le_fond = true; } if (!$url_propre) return; @@ -305,25 +333,9 @@ function recuperer_parametres_url(&$fond, $url) { // Compatilibite avec propres2 $url_propre = preg_replace(',\.html$,i', '', $url_propre); - // Retirer les marqueurs de type dans l'URL propre - // Detecter les differents types d'objets demandes - // Note: on pourrait evacuer ca maintenant qu'on a une seule table - if (preg_match(',^\+\-(.*?)\-\+$,', $url_propre, $regs)) { - $url_propre = $regs[1]; - } - else if (preg_match(',^-(.*?)-?$,', $url_propre, $regs)) { - $url_propre = $regs[1]; - } - else if (preg_match(',^\+(.*?)\+?$,', $url_propre, $regs)) { - $url_propre = $regs[1]; - } - else if (preg_match(',^_(.*?)_?$,', $url_propre, $regs)) { - $url_propre = $regs[1]; - } - else if (preg_match(',^@(.*?)@?$,', $url_propre, $regs)) { - $url_propre = $regs[1]; - } - // les articles n'ont pas de marqueur + // Compatibilite avec les anciennes URL propres + + $url_propre = retirer_marqueurs_url_propre($url_propre); $row = sql_fetch(spip_query("SELECT id_objet, type FROM spip_urls WHERE url=" . _q($url_propre))); @@ -333,14 +345,10 @@ function recuperer_parametres_url(&$fond, $url) { $contexte[$col_id] = $row['id_objet']; } - // En mode Query-String, on fixe ici le $fond utilise - if ($adapter_le_fond) { - $fond = $type; - if ($type == 'syndic') $fond = 'site'; - } + if ($type AND ($adapter_le_fond OR $fond='type_urls')) { - return; + $fond = ($type == 'syndic') ? 'site' : $type; + } } - } - +} // function_exists ?> diff --git a/ecrire/urls/propres2.php b/ecrire/urls/propres2.php index 88118f131489571d359a36620b23735dd5742e93..ded404798e47d471c443699f21e221f65d49256f 100644 --- a/ecrire/urls/propres2.php +++ b/ecrire/urls/propres2.php @@ -23,6 +23,9 @@ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser if (!defined('_terminaison_urls_propres')) define ('_terminaison_urls_propres', '.html'); -include_spip('urls/propres'); +function urls_propres2_dist(&$fond, $url) { + $f = charger_fonction('propres', 'urls', true); + if ($f) $f($fond, $url); +} ?> diff --git a/ecrire/urls/propres-qs.php b/ecrire/urls/propres_qs.php similarity index 84% rename from ecrire/urls/propres-qs.php rename to ecrire/urls/propres_qs.php index dcdb24577c22e5871deb20bc10b0bf31ed5dc475..bb56ceec12afcfa0db548098c494a3e5def29954 100644 --- a/ecrire/urls/propres-qs.php +++ b/ecrire/urls/propres_qs.php @@ -20,9 +20,9 @@ mode "Query-String", sans .htaccess ; <http://mon-site-spip/?-Rubrique-> -Attention : le mode 'propres-qs' est moins fonctionnel que le mode 'propres' ou +Attention : le mode 'propres_qs' est moins fonctionnel que le mode 'propres' ou 'propres2'. Si vous pouvez utiliser le .htaccess, ces deux derniers modes sont -preferables au mode 'propres-qs'. +preferables au mode 'propres_qs'. */ if (!defined("_ECRIRE_INC_VERSION")) return; // securiser @@ -31,6 +31,9 @@ if (!defined('_terminaison_urls_propres')) define ('_debut_urls_propres', './?'); -include_spip('urls/propres'); +function urls_propres_qs_dist(&$fond, $url) { + $f = charger_fonction('propres', 'urls', true); + if ($f) $f($fond, $url); +} ?> diff --git a/htaccess.txt b/htaccess.txt index c005d81ef75f0f674134ae101ec503534eb03fc5..e557d63a456881248d8bb4a5e55bb67685db9616 100644 --- a/htaccess.txt +++ b/htaccess.txt @@ -79,23 +79,7 @@ RewriteRule ^spip_rss\.php3?$ spip.php?action=rss [QSA,L] # dans ecrire/mes_options.php # (fichier associe : ecrire/urls/propres.php) -# Les mots-cles -RewriteRule ^\+-[^/\.]+(-\+)?(\.html)?$ spip.php?page=mot [QSA,E=url_propre:$0,L] - -# Les breves -RewriteRule ^\+[^/\.]+\+?(\.html)?$ spip.php?page=breve [QSA,E=url_propre:$0,L] - -# Les rubriques -RewriteRule ^-[^/\.]+-?(\.html)?$ spip.php?page=rubrique [QSA,E=url_propre:$0,L] - -# les auteurs -RewriteRule ^_[^/\.]+_?(\.html)?$ spip.php?page=auteur [QSA,E=url_propre:$0,L] - -# Les sites -RewriteRule ^@[^/\.]+@?(\.html)?$ spip.php?page=site [QSA,E=url_propre:$0,L] - -# Les articles (en dernier car expression plus "large") -RewriteRule ^[^/\.]+(\.html)?$ spip.php?page=article [QSA,E=url_propre:$0,L] +RewriteRule ^[^/\.]+(\.html)?$ spip.php?page=type_urls [QSA,E=url_propre:$0,L] # Fin URLs "propres" et "propres2" ###