Changeset 103116 in spip-zone


Ignore:
Timestamp:
Mar 2, 2017, 1:26:55 PM (3 years ago)
Author:
marcimat@…
Message:

La plaie des URLs propres… Permettre d'indiquer avec * sur #URL_PRESTASHOP* qu'on
souhaite une URL brute (ie: index.php?controller=xxx) et non une URL réécrite.
Effectivement dans certains cas, l'URL de redirection du controlleur dépend
du fait que le visiteur soit identifié ou non à Prestashop. Typiquement la page 'controller=my-account'
redirige soit sur l'url propre de la page 'connexion', soit sur l'url propre de la page 'my-account' en fonction
de la connexion du visiteur. Donc grosso modo, si on veut mettre un lien vers la page 'my-account', il faut laisser l'URL brute
dans le squelette, car on ne sait pas si la personne est connectée on non.

Ie: on peut écrire <a href="#URL_PRESTASHOP{cart}"> (l'URL propre est toujours la même),
mais il vaut mieux écrire pour l'accès au compte : <a href="#URL_PRESTASHOP*{my-account}">
(avec l'étoile).

Location:
_plugins_/prestashop_api/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/prestashop_api/trunk/paquet.xml

    r103074 r103116  
    22        prefix="prestashop_api"
    33        categorie="outil"
    4         version="2.0.3"
     4        version="2.0.4"
    55        etat="test"
    66        compatibilite="[3.1.0;3.1.*]"
  • _plugins_/prestashop_api/trunk/prestashop_api_fonctions.php

    r103074 r103116  
    2525 * On peut forcer une langue en utilisant le 3è argument.
    2626 *
     27 * Par défaut, on souhaite URL "propre" (réécrite), et cela
     28 * nécessite un appel du serveur vers le Prestashop pour déduire
     29 * cette jolie URL. Cette correspondance URL => URL propre est mise
     30 * en cache, ce qui peut poser problème avec certains éléments.
     31 *
     32 * Particulièrement pour le controlleur 'my-account', qui
     33 * renvoie sur l'URL de la page de connexion (même si le visiteur est
     34 * identifié sur Prestashop, vu que c'est le serveur qui demande l'URL).
     35 * Pour ces cas particuliers, on peut demander à ne pas utiliser/calculer
     36 * l'URL propre, et laisser l'URL d'appel du controlleur donc, en utilisant
     37 * l'étoile.
     38 *
    2739 * @example
    2840 *     ```
     
    3244 *     #URL_PRESTASHOP{product,51,en}
    3345 *     #URL_PRESTASHOP{'','',en}
    34  *     ```
     46 *
     47 *     #URL_PRESTASHOP{cart} <-- URL réécrite
     48 *     #URL_PRESTASHOP*{my-account} <-- URL non réécrite
     49 *     ```
     50 *
     51 * @uses prestashop_calculer_url_propre()
     52 * @uses prestashop_calculer_url_controlleur()
    3553 *
    3654 * @param $p
     
    4765                $lang = "''";
    4866        }
    49         $p->code="calculer_url_prestashop($type, $id, $lang)";
     67        if (!$p->etoile) {
     68                $p->code = "prestashop_calculer_url_propre($type, $id, $lang)";
     69        } else {
     70                $p->code = "prestashop_calculer_url_controlleur($type, $id, $lang)";
     71        }
    5072        return $p;
    5173}
    5274
    5375/**
    54  * Retourne une URL pour Prestashop.
     76 * Retourne une URL appelant un controlleur de Prestashop.
     77 *
     78 * @uses prestashop_ws_list_shops_by_lang()
    5579 *
    5680 * @param string $type
    57  *     Type d'objet de prestashop
     81 *     Type d'objet ou page de prestashop
    5882 * @param int $id
    5983 *     Identifiant d'objet de prestashop
    6084 * @param string $lang
    6185 *     Langue désirée.
    62  * @param string $lang
    63  */
    64 function calculer_url_prestashop($type = '', $id = '', $lang = '') {
    65         static $urls = [];
     86 * @return string
     87 *     URL vers le controlleur, tel que `https://domaine.tld/boutique/index.php?controller=truc&param=n`
     88 */
     89function prestashop_calculer_url_controlleur($type = '', $id = '', $lang = '') {
    6690
    6791        $url_prestashop = rtrim(prestashop_ws_list_shops_by_lang($lang), '/');
     
    6993                return $url_prestashop;
    7094        }
     95
    7196        $url = $url_prestashop . '/index.php';
    7297        $url = parametre_url($url, 'controller', $type, '&');
     
    7499                $url = parametre_url($url, 'id_' . $type, $id, '&');
    75100        }
     101
     102        return $url;
     103}
     104
     105/**
     106 * Retourne une URL «propre» pour Prestashop
     107 *
     108 * Tente de calculer l'URL réécrite d'un élément de prestashop,
     109 * en attrapant l'URL de redirection que renvoie le controlleur.
     110 *
     111 * On met en cache pour éviter de trop nombreux appels.
     112 *
     113 * @note
     114 *     Il faut faire attention aux redirections d'URL qui seraient différentes
     115 *     entre un visiteur connecté et non connecté. Le serveur appel toujours
     116 *     en tant que non connecté donc, et met en cache cette URL.
     117 *     Typiquement appeler ici la page 'my-account' pose problème par exemple.
     118 *
     119 * @uses prestashop_calculer_url_controlleur()
     120 * @uses prestashop_ws_cache_update()
     121 *
     122 * @param string $type
     123 *     Type d'objet ou page de prestashop
     124 * @param int $id
     125 *     Identifiant d'objet de prestashop
     126 * @param string $lang
     127 *     Langue désirée.
     128 * @return string
     129 *     l'URL réécrite par Prestashop, du genre `https://domaine.tld/boutique/truc-n`
     130 */
     131function prestashop_calculer_url_propre($type = '', $id = '', $lang = '') {
     132        static $urls = [];
     133
     134        $url = prestashop_calculer_url_controlleur($type, $id, $lang);
    76135
    77136        if (isset($urls[$url])) {
     
    97156        return $url;
    98157}
     158
    99159
    100160
     
    142202 */
    143203function prestashop_image($objet, $id, $lang = '') {
    144         $url = calculer_url_prestashop() . '/img/';
     204        $url = prestashop_calculer_url_controlleur() . '/img/';
    145205        $id = trim($id);
    146206        $objet = trim($objet);
Note: See TracChangeset for help on using the changeset viewer.