Changeset 108655 in spip-zone


Ignore:
Timestamp:
Jan 26, 2018, 8:24:39 PM (19 months ago)
Author:
tcharlss@…
Message:

Changement de tactique pour identifier la page. On n'utilise plus contexte? qui n'est pas recomandée, et de toute façon dans le contexte retourné on ne pouvait pas identifier l'id de l'objet de façon fiable (quand il y avait plusieurs id_xxx dans l'URL). La seule fonction qui semble faire le job est recuperer_url, elle renvoie exactement ce dont on a besoin et de façon fiable. Au niveau des perfs, j'ai noté un temps d'execution entre 5ms et 15ms, ça me semble acceptable.

Location:
_plugins_/metaplus/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/metaplus/trunk/inclure/metasplus/dist.html

    r108625 r108655  
    7979#SET{dc-type, Text}
    8080#SET{titre,   #INFO_TITRE{#ENV{objet}, #ENV{id_objet}}|concat{" – ",#NOM_SITE_SPIP}}
    81 #SET{desc,    #INFO_INTRODUCTION{#ENV{objet}, #ENV{id_objet}}|sinon{#INFO_DESCRIPTIF{#ENV{objet}, #ENV{id_objet}}}}
     81#SET{desc,    #INFO_INTRODUCTION{#ENV{objet}, #ENV{id_objet}}
     82        |sinon{#INFO_DESCRIPTIF{#ENV{objet}, #ENV{id_objet}}}
     83        |sinon{#INFO_TEXTE{#ENV{objet}, #ENV{id_objet}}}}
    8284#SET{url,     #INFO_URL{#ENV{objet}, #ENV{id_objet}}}
    8385#SET{date,    #INFO_DATE{#ENV{objet}, #ENV{id_objet}}}
  • _plugins_/metaplus/trunk/metasplus_options.php

    r108636 r108655  
    1515}
    1616
     17
    1718/**
    1819 * Générer le contenu ajouté dans le <head> public
     
    2627function metasplus_generer_head() {
    2728
    28         // Retrouver la page et l'objet courant d'après le contexte
    29         // Snif, on n'a pas la certitude d'avoir toujours la clé 'page', ça dépend du type d'url configuré :(
    30         $contexte = $GLOBALS['contexte'];
    31         // On a direct la page : super
    32         if (!empty($contexte['page'])) {
    33                 $page = $contexte['page'];
    34         // sinon type-page (z-core) : re-super
    35         } elseif (!empty($contexte['type-page'])) {
    36                 $page = $contexte['type-page'];
    37         // sinon un id_patate : on bricole comme on peut
    38         } elseif ($match = preg_grep('/^id_(\w+)/', array_keys($contexte))) {
    39                 include_spip('base/objets');
    40                 $page = $objet = objet_type(end($match)); // S'il y a plusieurs id_patate, on suppose que le dernier est celui de l'objet de la page... mouais
    41                 $id_objet = $contexte[end($match)];
    42                 $contexte['objet'] = $objet;
    43                 $contexte['id_objet'] = $id_objet;
    44         } else {
    45                 $page = '';
    46         }
     29        // Identifier la page actuelle
     30        $page = metasplus_identifier_page($contexte, $page_erreur);
    4731
    48         // Les protocoles à ne pas insérer éventuellement
    49         // On n'a pas de façon programmatique pour lister les protocoles possibles, donc on met leur nombre total en dur (3)
     32        // Vérifier que tous les protocoles ne sont pas désactivés en config
     33        // (dans ce cas là, autant désactiver le plugin, mais on ne sait jamais)
    5034        include_spip('inc/config');
    5135        $config = lire_config('metasplus');
     
    5438        // Les pages à exclure éventuelles
    5539        $pages_exclues = (defined('_METASPLUS_PAGES_EXCLUES') and _METASPLUS_PAGES_EXCLUES) ? explode(',', _METASPLUS_PAGES_EXCLUES) : array();
    56         $page_ok = !in_array($page, $pages_exclues);
     40        $page_ok = (!in_array($page, $pages_exclues) and !$page_erreur);
    5741
    5842        // Go go go
     
    7660
    7761        }
     62}
    7863
     64/**
     65 * Identifier la page
     66 *
     67 * On retourne 2 choses par référence :
     68 * - un contexte (objet et id_objet si c'est la page d'un objet)
     69 * - s'il s'agit d'une page d'erreur
     70 *
     71 * Il n'est pas recommandé d'utiliser $GLOBALS['contexte], donc on utilise la fonction qui décode l'URL et retourne les bonnes infos :
     72 * [0]            => page (le fond)
     73 * [1][id_patate] => id si page d'un objet
     74 * [1][erreur]    => erreur éventuelle (404)
     75 *
     76 * @return string la page
     77 */
     78function metasplus_identifier_page (&$contexte, &$page_erreur) {
     79
     80        $contexte = array();
     81        $decoder_url = charger_fonction('decoder_url', 'urls');
     82        $url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; // [FIXME] The client can set HTTP_HOST and REQUEST_URI to any arbitrary value it wants.
     83        $decodage = $decoder_url($url);
     84        $page = $decodage[0];
     85        $page_erreur = isset($decodage[1]['erreur']) ? true : false;
     86
     87        // 1) Page retrouvée et pas en erreur
     88        if ($page
     89                and !$page_erreur
     90        ) {
     91                include_spip('base/objets');
     92                $id_table_objet = id_table_objet($page);
     93                $id_objet = isset($decodage[1][$id_table_objet]) ? $decodage[1][$id_table_objet] : null;
     94                if ($id_objet) {
     95                        $contexte['objet'] = $page;
     96                        $contexte['id_objet'] = $id_objet;
     97                        $contexte[$id_table_objet] = $id_objet; // ça peut servir
     98                }
     99
     100        // 2) Sinon page lambda avec 'page' en query string
     101        } elseif (!$page) {
     102                $page = _request('page');
     103        }
     104
     105        return $page;
    79106}
Note: See TracChangeset for help on using the changeset viewer.