[spip-dev] problème redéfinition de #URL_ARTICLE

Bonjour la liste,

Pour les besoins de mon site, j'ai dû modifier le comportement de la balise #URL_ARTICLE afin qu'elle renvoie l'url de redirection si l'article est virtuel.
Dans ce but, j'ai déclaré cette fonction dans mon mes_fonctions.php :

    /* redéfinition de la balise URL_ARTICLE pour renvoyer l'url de redirection (article virtuel) quand celle-ci est définie */
    function balise_URL_ARTICLE($p) {
        // Cas particulier des boucles (SYNDIC_ARTICLES)
        if ($p->type_requete == 'syndic_articles')
            $code = champ_sql('url', $p);
        else
            //!!!fork : si le chapeau comence par "=", l'article est virtuel => redirection propre vers son contenu qui peut être une url alias (art123...)
            $code = "(substr(" . champ_sql('chapo', $p) . ",0,1) == '=') ";
            $code.= "? calculer_url(substr(" . champ_sql('chapo', $p) . ",1))";
            $code.= ": ".generer_generer_url('article', $p);
    // $code = generer_generer_url('article', $p);

        $p->code = "vider_url($code)";
        $p->interdire_scripts = false;
        return $p;
    }

Tout marche bien sur le site public, mais deux problèmes se posent :
- à la publication d'un article, la redirection vers exec=articles ne marche plus, on aboutit sur une page blanche (l'article est bien publié et l'url de redirection est bonne, il suffit de la re-valider pour atterrir au bon endroit). Ceci, même si l'article n'est pas virtuel.
- avec spip-lettres, impossible de prévisualiser ou d'envoyer une lettre avec une balise #URL_ARTICLE

Le problème continue de se poser à l'identique si on déplace le code dans mes_options.php.

Est-ce que j'ai fait une erreur dans mon code, ou est-ce un problème plus général qui concerne potentiellement d'autres balises quand on les redéfinit ?

A bientôt
    Simon

Bonjour,

L'absence de réponse me fait supposer que j'ai dû mal m'exprimer.

Le problème semble concerner la redéfinition de la balise #URL_ARTICLE *dans son ensemble* (et potentiellement des autres balises URL).
En effet, si je copicolle le code de la fonction balise_URL_ARTICLE_dist dans mes_fonctions.php (ou mes_options.php) en la renommant simplement balise_URL_ARTICLE *sans autre modification*, j'ai les mêmes soucis.

Quelqu'un qui connait bien le code de génération de ces balises pourrait-il jeter un oeil à ce problème ?

A bientôt
    Simon

Simon Camerlo a écrit :

Bon, au cas où quelqu'un se retrouverait dans la même situation que moi, la solution est simple :

j'ai finalement nommé ma fonction balise_URL_ARTICLE_REDIR_dist qui renvoit l'url de redirection si elle existe, sinon celle de l'article (avec le code ci-dessous).
J'ai remplacé #URL_ARTICLE par celle-là dans tous mes squelettes publics sauf ceux qui génèrent des newsletters avec spip-lettres.

Résultat, tout fonctionne à nouveau.
Ca n'enlève pas la nécessité de faire marcher la surcharge de balise #URL, mais ça ne bloque plus, j'ouvre un ticket ?

A bientôt
    Simon

Simon Camerlo a écrit :

Bonjour,

L'absence de réponse me fait supposer que j'ai dû mal m'exprimer.

oui, je ne comprends pas ce que tu veux dire ici:

- à la publication d'un article, la redirection vers exec=articles ne marche plus,

tu veux dire que tu cliques sur "voir en ligne" ?

Committo,Ergo:Sum

Committo,Ergo:sum a écrit :

  
Bonjour,

L'absence de réponse me fait supposer que j'ai dû mal m'exprimer.
    
oui, je ne comprends pas ce que tu veux dire ici:
  
- à la publication d'un article, la redirection vers exec=articles ne marche plus,
      
tu veux dire que tu cliques sur "voir en ligne" ? 

Non, je veux dire au changement de statut, de « en cours de rédaction » à « publier » (action=instituer_article&statut_nouv=publie).
La prévisu fonctionne et le résultat de l’action est bon (le statut de l’article est bien changé en « publié »), mais la redirection après l’action pour rafraîchir l’affichage ne fonctionne pas, elle donne une page blanche.
Cependant, si on rafraîchit cette page blanche, on atterrit bien sur la bonne page (exec=articles), donc l’url générée est bonne, elle ne passe simplement pas à la redirection pour une raison qui m’échappe.

Et je reprécise car c’est important : ceci est vrai pour tous les articles, même ceux qui ne sont pas virtuels, à partir du moment ou #URL_ARTICLE est redéfinie dans mes_options/fonctions.php, et ce quel que soit le code de la fonction redéfinie (même identique à la dist).
Pour la partie du problème qui concerne spip-lettres, c’est un peu différent, mais ce n’est pas la bonne liste pour en discuter.

A bientôt

Simon

Mais l'action "instituer_article" ne fait pas de redirection, je ne comprends toujours pas, d'autant que je parlais de "voir en ligne", pourquoi parles-tu de prévisu ?

Committo,Ergo:Sum

Committo,Ergo:sum a écrit :

u veux dire que tu cliques sur "voir en ligne" ?
      

Non, je veux dire au changement de statut, de "en cours de rédaction" à "publier" (action=instituer_article&statut_nouv=publie).
La prévisu fonctionne et le résultat de l'action est bon (le statut de l'article est bien changé en "publié"), mais la redirection après l'action
    

Mais l'action "instituer_article" ne fait pas de redirection, je ne comprends toujours pas, d'autant que je parlais de "voir en ligne", pourquoi parles-tu de prévisu ?

Bon, reprenons pas à pas pour lever les ambiguïtés :

- L'article de départ est un article en cours de rédaction affiché par la page : ecrire/?exec=articles&id_article=1234
    => il n'y a pas de bouton "voir en ligne", uniquement "prévisualiser" (car j'ai ajouté le plugin "prévisu en cours de rédaction"), mais là n'est pas la question, cette partie fonctionne parfaitement

- je clique sur "publié en ligne", qui m'envoie sur l'url :
    http://www.domaine.truc/ecrire/?exec=articles&action=instituer_article&arg=1234&hash=(mon hash)&redirect=.%2F%3Fexec%3Darticles%26id_article%3D1234&statut_nouv=publie
    (à noter que cette url est rigoureusement identique avec ou sans la redéfinition de la balise URL_ARTICLE)

- plaf : page blanche si la fonction balise_URL_ARTICLE a été définie dans mes_fonctions.php (ou mes_options.php), quel que soit son contenu.
    (cependant, en regardant directement dans la base, le statut et la date de publication de l'article ont bien été mis à jour)

- Actualiser (par un appui sur F5) cette page blanche m'amène bien sur la page ecrire/exec=articles&id_article=1234
    => l'url générée est bonne, mais à un moment donné la redirection plante (car redirection il y a bien, visiblement)

Si tu as besoin de tests particuliers, n'hésite pas à demander.

A bientôt
    Simon

Ton indentation est trompeuse car tu n'as pas d'accolade après Else, ton pb n'est-il pas tout simplement là ?

Committo,Ergo:Sum

Committo,Ergo:sum a écrit :


  
      if ($p->type_requete == 'syndic_articles')
          $code = champ_sql('url', $p);
      else
          //!!!fork : si le chapeau comence par "=", l'article est virtuel => redirection propre vers son contenu qui peut être une url alias (art123...)
          $code = "(substr(" . champ_sql('chapo', $p) . ",0,1) == '=') ";
          $code.= "? calculer_url(substr(" . champ_sql('chapo', $p) . ",1))";
          $code.= ": ".generer_generer_url('article', $p);
  //        $code = generer_generer_url('article', $p);

      $p->code = "vider_url($code)";
    

Ton indentation est trompeuse car tu n'as pas d'accolade après Else, ton pb n'est-il pas tout simplement là ?

Tu as raison pour le problème d’indentation, je viens de le corriger.
Malheureusement les symptômes continuent.
De toute façon, ils continuent même avec le code de la dist :

      else
         $code = generer_generer_url('article', $p);

(j’ai bien vidangé le cache à chaque test, donc à priori ça vient pas de là non plus).

La balise n'est elle pas déjà redéfinie dans un plugin ?

Cédric

cedric.morin@yterium.com a écrit :

La balise n'est elle pas déjà redéfinie dans un plugin ?

A priori non, car tout fonctionne correctement dans le site public et mes changements et mes tests y sont bien pris en compte.
J'ai fait une recherche sur balise_URL_ARTICLE sur mon répertoire complet, elle ne renvoit que la dist et mon mes_options.

Si c'était un problème de double définition, ça devrait planter partout, pas uniquement dans ces deux cas (redirection sur publication + lettres).

A bientôt Simon