[SPIP Zone] spip-listes et les urls absolues

Je mets très sérieusement en doute ce commit:

http://trac.rezo.net/trac/spip-zone/changeset/10224

Je n'arrive pas à imaginer comment ça peut marcher, quelle magouille fait que ça peut passer chez certains.

J'ai du revenir en 10223 pour obtenir un semblant de fonctionnement.

J'aimerais voir des patrons qui fonctionnent en 10224 et +
(sur une install spip "normale")

Perso, je le reverterais bien celui-ci , il m'a déjà coûté trop d'heures.

Merci
--
toggg

Personnellement, j'avais trouvé cette réponse :

// transforme un chemin d'image relatif en chemin html absolu
function cs_htmlpath($relative_path) {
  $realpath = str_replace("\\", "/", realpath($relative_path));
  $root = preg_replace(',/$,', '', $_SERVER['DOCUMENT_ROOT']);
  if (strlen($root) && strpos($realpath, $root)===0)
    return substr($realpath, strlen($root));
  $dir = dirname(!empty($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] :
      (!empty($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] :
      (!empty($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : str_replace('\\','/',__FILE__)
    )));
  return cs_canonicalize($dir.'/'.$relative_path);
}

// retourne un chemin canonique a partir d'un chemin contenant des ../
function cs_canonicalize($address) {
  $address = str_replace("//", "/", $address);
  $address = explode('/', $address);
  $keys = array_keys($address, '..');
  foreach($keys as $keypos => $key)
    array_splice($address, $key - ($keypos * 2 + 1), 2);
  $address = implode('/', $address);
  return preg_replace(',([^.])\./,', '\1', $address);
}

Pat

Pat wrote:

Personnellement, j'avais trouvé cette réponse :

// transforme un chemin d'image relatif en chemin html absolu
function cs_htmlpath($relative_path) {
  $realpath = str_replace("\\", "/", realpath($relative_path));
  $root = preg_replace(',/$,', '', $_SERVER['DOCUMENT_ROOT']);
  if (strlen($root) && strpos($realpath, $root)===0)
    return substr($realpath, strlen($root));
  $dir = dirname(!empty($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] :
      (!empty($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] :
      (!empty($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : str_replace('\\','/',__FILE__)
    )));
  return cs_canonicalize($dir.'/'.$relative_path);
}

// retourne un chemin canonique a partir d'un chemin contenant des ../
function cs_canonicalize($address) {
  $address = str_replace("//", "/", $address);
  $address = explode('/', $address);
  $keys = array_keys($address, '..');
  foreach($keys as $keypos => $key)
    array_splice($address, $key - ($keypos * 2 + 1), 2);
  $address = implode('/', $address);
  return preg_replace(',([^.])\./,', '\1', $address);
}

resolve_path() n'est pas en cause, mais si on doit parler de technique, je suggère:

// un filtre pour transformer les URLs relatives en URLs absolues ;
// ne s'applique qu'aux textes contenant des liens
// http://doc.spip.org/@liens_absolus
function liens_absolus($texte, $base='') {
     return preg_replace_callback(array(
         ',(<(a|link)[[:space:]]+[^<>]*href=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS',
         ',(<(img|script)[[:space:]]+[^<>]*src=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS'),
         create_function(
             '$lien',
             'return $lien[1] . url_absolue($lien[3], "' . $base . '") . $lien[4];'
         ),
         $texte
     );
}

On causait de spip-listes , là ...
--
toggg

Hello, je mets erationnal en copie, je ne sais pas s'il lit tous les messages de spip zone :stuck_out_tongue:

Oui, j'ai eu des plaintes sur les forums de spip listes, la modif d'erationnal n'a pas l'air de fonctionner tout le temps.

en fait avec Stanislas nous avons précisé la doc avec ce qui marche actuellement, a savoir :

- |[(#LOGO_ARTICLE||abs_url)]|

- |[<img src="#URL_SITE_SPIP/(#LOGO|fichier)" >]|

- |[<img src="#URL_SITE_SPIP/(#FICHIER)" >]
|

|
Mais dans le cas préférable ou l'on passe le filtre liens_absolu sur le texte du message d'autorité pour simplifier l'écriture du patron coté utilisateur, alors on a des pb de chemin car spip ajoute des "ecrire/" dans le path si on génere le message avec un squelette dans l'espace privé.
|

|Il bouffe également les ancres <a href="#truc"> qui se retrouvent avec une url devant le #.
|

|Je crois comme Toggg qu'il faudrait réfléchir à ca dans spip, et que spip-listes utilise l'api de spip, plutot que de bricoler un truc spécial spip-listes, mais mes capacités intellectuelles ne sont pas regex compliant :D.
|

BoOz

bertrand Gugger a écrit :

Je mets très sérieusement en doute ce commit:

http://trac.rezo.net/trac/spip-zone/changeset/10224

Je n'arrive pas à imaginer comment ça peut marcher, quelle magouille fait que ça peut passer chez certains.

J'ai du revenir en 10223 pour obtenir un semblant de fonctionnement.

J'aimerais voir des patrons qui fonctionnent en 10224 et +
(sur une install spip "normale")

Perso, je le reverterais bien celui-ci , il m'a déjà coûté trop d'heures.

Merci
  

BoOz wrote:

Hello, je mets erationnal en copie, je ne sais pas s'il lit tous les messages de spip zone :stuck_out_tongue:

Oui, j'ai eu des plaintes sur les forums de spip listes, la modif d'erationnal n'a pas l'air de fonctionner tout le temps.

en fait avec Stanislas nous avons précisé la doc avec ce qui marche actuellement, a savoir :

- |[(#LOGO_ARTICLE||abs_url)]|

- |[<img src="#URL_SITE_SPIP/(#LOGO|fichier)" >]|

- |[<img src="#URL_SITE_SPIP/(#FICHIER)" >]
|

Je suis pas du tout sûr qu'on doive injecter #URL_SITE_SPIP ... faut voir

|
Mais dans le cas préférable ou l'on passe le filtre liens_absolu sur le texte du message d'autorité pour simplifier l'écriture du patron coté utilisateur, alors on a des pb de chemin car spip ajoute des "ecrire/" dans le path si on génere le message avec un squelette dans l'espace privé.
|

Je suis récemment intervenu sur les messages auto , où il y avait manifestement une hésitation de la part du codeur.
Passer le truc par url_absolue() semble avoir résolu le problème.

Reste à vérifier cette différence éventuelle lorsque spip est dans un sous-répertoire.

|Il bouffe également les ancres <a href="#truc"> qui se retrouvent avec une url devant le #.
|

|Je crois comme Toggg qu'il faudrait réfléchir à ca dans spip, et que spip-listes utilise l'api de spip, plutot que de bricoler un truc spécial spip-listes, mais mes capacités intellectuelles ne sont pas regex compliant :D.
|

url_absolue() est prévue pour être KISS et la plus simple possible.
C'est donc mon unique choix.
Les procédés de détection peuvent être coûteux en file stats et peu sûr, si tu veux.
Je pense qu'il existe des solutions médianes intéressantes.
Et autant mettre ça définitivement en commun.

--
toggg

|url_absolue() est mieux que #URL_SITE_SPIP/ ne serait-ce que parce
que ce filtre respecte les sites "multidomaines" (www.poureva.be,
www.vooreva.be) semble avoir résolu le problème.

-- Fil