Court-circuit 2

Court-circuit 2 permet de rediriger certaines rubriques vers un article particulier. Vous pouvez configurer, dans l’espace privé, les règles de redirection à appliquer.

Historique

Court-circuit 2 est une évolution de Court-circuit 1, reprenant le principe du court-circuitage des rubriques.

À la différence de la précédente, cette seconde version ne gère que le court-circuitage des rubriques. La fonctionnalité de reset des squelettes par défaut de SPIP, proposée par la première version du plugin, n’est donc plus présente. Vous pouvez néanmoins retrouver cette fonctionnalité avec les squelettes SPIP Reset ou la trousse à tetue.

Concernant le court-circuitage des rubriques, Court-circuit 2 utilise le pipeline styliser pour procéder, le cas échéant, à une redirection HTML (status 301), à la différence de Court-circuit 1 qui surchargeait le squelette rubrique.html. De fait, votre squelette rubrique.html reste donc utilisable pour les rubriques qui ne seraient pas redirigées. Cela permet également à Court-circuit d’être compatible avec tout squelette, y compris Zpip.

Une fois installé et activé, Court-circuit 2 ne nécessite aucune adaptation de vos squelettes.

Pour en savoir plus sur le court-circuitage des rubriques, voir court-circuiter les rubriques de SPIP pour accéder directement aux articles.

Fonctionnement par défaut

Lorsque le visiteur demande à voir une rubrique, Court-circuit 2 essaie de déterminer s’il doit rediriger le visiteur vers un article précis. Il redirigera dans l’ordre :

  1. vers le seul article de la rubrique si cette dernière n’en contient qu’un,
  2. sinon, vers l’article d’accueil de la rubrique si la rubrique en a un et que le plugin Article d’accueil est installé et activé,
  3. sinon vers le premier article numéroté de la rubrique [1]
  4. sinon, si la rubrique ne contient pas d’article numéroté, Court-circuit 2 redirigera vers l’article le plus récent de la rubrique,
  5. si la rubrique ne contient aucun article, Court-circuit 2 sélectionnera la première sous-rubrique de la rubrique (tri croissant par numéro du titre et décroissant par date) et appliquera l’ensemble de ces règles à cette sous-rubrique.

Enfin, si la rubrique ne contient ni article ni sous-rubrique (cas d’une rubrique ne contenant que des brèves et/ou des sites web), alors le squelette rubrique.html sera chargé (absence de redirection).

Par défaut, Court-circuit 2 ne s’applique pas aux rubriques auxquelles s’applique une variante de squelette (du type rubrique-3.html ou rubrique=5.html) ou bien aux rubriques ayant une composition (si le plugin homonyme est activé).

Personnaliser les règles de redirection

Si le plugin CFG et/ou le plugin SPIP Bonux est/sont actifs, vous pouvez sélectionner les règles de redirection à appliquer via un formulaire de configuration accessible vis le menu Configuration si vous utilisez l’ancien bandeau ou le menu Squelettes si vous utilisez le nouveau bandeau.

Vous pouvez activer/désactiver chaque règle séparément. Court-circuit 2 teste chaque règle active dans l’ordre dans lesquelles elles sont affichées sur le formulaire. Court-circuit 2 regarde tout d’abord si la première règle active fournit une redirection. Si c’est le cas, Court-circuit 2 s’arrête et effectue la redirection. Sinon, Court-circuit 2 regarde la seconde règle active, et ainsi de suite.

Si aucune des règles actives ne produit une redirection, alors le squelette rubrique.html est chargé de manière classique. Vous pouvez ainsi avoir choisir de ne rediriger que certaines rubriques, par exemple en utilisant le plugin Article d’Accueil et en n’activant que les deux premières règles.

Vous pouvez également décider d’appliquer les redirections d’articles y compris aux rubriques ayant une variante de squelette ou une composition.

Note : les options concernant les articles d’accueil et les compositions ne seront affichées dans le formulaire que si les plugins homonymes sont actifs.

Balise #URL_RUBRIQUE

Vous pouvez aussi demander à Court-circuit 2 d’agir également sur la balise #URL_RUBRIQUE, cette dernière renvoyant alors, le cas échéant, directement l’URL de la redirection.

Évolutions possibles

D’autres règles de redirection pourront éventuellement être ajoutées en fonction des besoins. Le forum est là pour en discuter.

Notes

[1Voir la doc de SPIP concernant la numérotation des titres.

Discussion

21 discussions

  • 1
    Michel Suquet

    Bonjour,

    notre site a la version 4.1.5 de spip et on a forcé l’utilisation du plugin court-circuit : cela fonctionne sans problème.

    Pouvez-vous mettre à jour le plugin ?

    Cordialement,

    Michel Suquet

    Répondre à ce message

  • Pierrot

    Bonjour,

    Je constate qu’apparemment ce plugin n’est pas compatible avec « Rang », pas au sens ou ça fait planter, mais au sens que ça ne redirige pas vers l’article qui a été mis en premier grâce à Rang.
    J’avais dans les rubriques 4 articles classés grâce à la numérotation classique de Spip, le plugin fonctionnait parfaitement.

    Le client souhaitant classer à la mano ses articles, j’ai supprimé la numérotation des articles et ensuite ajouté Rang et la redirection amène au dernier article de la rubrique (c’est à la fois le dernier en ce qui concerne Rang mais aussi l’id le plus élevé et finalement le plus récemment publié), ça semble logique au vu des options de ce plugin, je pense qu’on est dans le cas « publié le plus récemment » puisque l’on n’utilise pas le plugin « article premier », qu’on n’a plus de numéros et qu’il y a plus d’un article dans cette rubrique.

    C’est mon collègue qui avait mis ce plugin (ce que je ne savais pas), j’ai mis du temps à découvrir que c’était ça qui transformait mes #URL_RUBRIQUE, pour ma part j’ai désactivé ce plugin je trouve plus simple de faire cet aiguillage au niveau de mes squelettes, c’est plus facile à débugguer (surtout quand on y revient 1 an plus tard).

    Bref tout ça pour signaler ce problème, pour ma part j’ai pris une solution de contournement qui me satisfait pleinement. « Article d’accueil » serait une solution intermédiaire mais nécessiterait une seconde manip quand on change le Rang pour re-désigner l’article vers lequel rediriger ce qui casse un peu l’intérêt de Rang.

    Répondre à ce message

  • 3

    Problème cour-circuit v2.5.1 rencontré sur Contrib (ex : ->rub700 et article500-fr/501-en et 537-en : lang=fr).
    l’affichage « rubrique » est court-circuité en ’article’ malgré l’existence d’articles de traductions /cela parait normal, bien que non explicite au survol de la doc ),
    mais aussi de nombreuses sous-rubriques :
    La règle 1 me semble appliquée trop directement : une solution serait de rajouter une option de configuration pour limiter le court-circuit aux seules rubriques terminales...
    => voir : \courtcircuit\v2.5.1\courtcircuit_fonctions.php : line 4 ?

    • Je ne suis pas sûr de comprendre le problème rencontré entre le comportement actuel et celui désiré.

      Dans la configuration actuelle sur contrib, un paramètre du plugin est activé pour ne prendre.en considération que les articles de la langue en cours pour calculer la redirection.

      Note. Ce paramètre introduit dans des versions ultérieures du plugin n’est pas documenté ici, la page de doc n’ayant pas été actualisée.

    • Bonjour,

      Oui, la configuration Config est bonne sur la prise en compte des seuls articles dans la langue : je peux rajouter dans la documentation : d’acc ?.

      Je reformule différement le souci découvert hier soir :
      meme si une rubrique possède des sous-rubriques publiées, mais un seul article, le court-circuit renvoie automatiquement vers le squelette article pour l’article unique (dans la langue) publié dans cette rubrique.
      De ce fait, l’accès aux sous-rubriques de Contrib (situées « à coté » de l’article) n’est pas directement possible, dans de squelette d’article affiché.

      Je peux imaginer deux modifications correctrices :
      -  un palliatif : modifier le squelette d’article pour introduire un bloc optionnel des sous-rubriques (comme sur la dist)
      -  un paramétrage supplémentaire de config (débranchant le court-circuit sur les Rubriques non -terminales.

    • Ok je comprends mieux.

      Le mieux serait probablement une règle d exception dans la config pour ne pas appliquer court circuit à une rubrique ayant des sous rubriques

    Répondre à ce message

  • 13

    Bonjour Joseph,
    je tombe sur un os. Souhaitant qu’une rubrique « x »n e soit pas l’objet d’une redirection, dans le premier bloc d’option « Rubrique avec variante de squelettes » de la page de configuration de court-circuit, j’ai coché l’option « ne pas rediriger ».
    Ensuite, dans squelettes/content (j’utilise z-core), j’ai un squelette rubrique=x.html.
    Malgré cela, le squelette rubrique=x.html n’est pas pris en compte lors de l’appel d’une url du type mondomaine.tld/ ?rubriquex : la page est redirigée vers un article.
    Parce que parfois, c’est nécessaire, j’ai mis un fichier rubrique.html.au même niveau que la variante rubrique=x.html.
    Il y a quelque chose que je ne fais pas bien ?

    • Précision : SPIP 3.1.6 et plugin à jour...

    • Bonjour Manu,

      je t’avoue que je ne code plus depuis quelque temps (du moins dans Spip) faute de temps.

      Et je connais mal z-core.

      A priori, il faut aller regarder du côté de https://zone.spip.org/trac/spip-zone/browser/_plugins_/court-circuit/trunk/inc/courtcircuit.php

      Je suppose (pas testé) que la fonction squelettes_par_rubrique_styliser_par_rubrique ne tient pas compte du sous-répertoire « content » et que, en contexte Z, il faudrait un autre test pour vérifier la présence d’une variante de rubrique.

    • En l’absence de modification de court-circuit, il faudrait tester si le hack suivant pourrait marcher :

      Faire un squelette rubrique=x.html à la racine du répertoire squelettes et y mettre le même contenu que le squelette structure.html fourni par Z-core.

      Ceci-dit, le mieux serait de faire évoluer la fonction courtcircuit_url_redirection pour être compatible avec Z-core.

    • J’avais testé le « hack » . Ça marche dans le sens où le squelette prend bien la main, mais le hic c’est qu’il prend la main sur l’ensemble de la page.
      Le comportement attendu pour une variante contenue dans content/, c’est que la surcharge ne concerne que la zone du contenu et pas les autres zones (header, aside, footer etc...). La piste du hack ne parait pas donc pas très bonne.
      Je vais voir du côté de ce qu’il y a dans courtcircuit.php

    • est-ce que ça peut être la fonction find_in_path présente dans la ligne 13 de inc/courtcircuit.php qui pourrait être la fautive ? Peut-être ne connait-elle pas le répertoire content/ ?

    • En effet, ca ne tient pas compte du contexte Z.

      Il faudrait dès lors tester la présence de Z-core, le cas échéant vérifier le répertoire principal Z (qui n’est pas toujours content) et chercher dans ce sous-répertoire là

    • ... et,aïe, ouille, ça se fait comment ? (au passage, j’ai bien aimé la phrase « vérifier le répertoire principal Z (qui n’est pas toujours content) »,
      content ou content/ ? hi, hi, hi

    • En PHP il y a la fonction test_plugin_actif selon https://contrib.spip.net/Astuces-courtes-pour-SPIP#plugins pour vérifier la présence d’un plugin.

      Le bloc central de la page est défini par $GLOBALS['z_blocs'] (plus précisément c’est le premier élément du tableau renvoyé). En effet, si c’est le répertoire content/ par défaut, cela peut être modifié par l’utilisateur.

      A priori, Z-core propose une fonction zcore_blocs pour récupérer ce paramètre cf. https://zone.spip.org/trac/spip-zone/browser/_plugins_/z-core/trunk/public/_styliser_par_z.php#L156

    • Du coup, il faudrait explorer un code du genre (non testé car je n’ai pas d’environnement de dev sous la main) :

      if (test_plugin_actif("zcore")) {
          charger_fonction('styliser_par_z', 'public');
          blocs = zcore_blocs();
          f = blocs[0] . "/rubrique.html" ;
      }
      else {
          f = "rubrique.html";
      }
      $squelette_rubrique = substr(find_in_path(f), 0, -5);
    • Désolé, j’ai dû m’absenter...
      Il faudrait placer dans quel fichier le code que tu as envoyé ?

    • Ah, oui, dans inc/courtcircuit.php

    • Aucune garantie que ça marche hein !!

      Juste une idée mais pas testé

       ;-)

    • Aille, ouille, j’ai recopié ton code dans inc/courtcircuit.php mais j’ai en retour des parse errors en pagaille dont j’ai du mal à me sortir
      =>http://spip.pastebin.fr/50275

    Répondre à ce message

  • 6

    Salut Joseph & tetue, j’ai dernièrement eu besoin d’exclure certaines rubriques du traitement de court-circuit en fonction de leur composition. Du coup, je viens d’ajouter la possibilité de le faire à l’aide d’une constante (pour l’instant).

    Exemple de code à coller dans mes_options.php pour ne pas court-circuiter les rubriques qui portent les composition annonces_emploi et annonces_logement :

    <?php 
    
    if (!defined('_ECRIRE_INC_VERSION')) return;
    
    // Exclure les rubriques des annonces du traitement du plugin court-circuit
    // Ref https://zone.spip.org/trac/spip-zone/changeset/101803
    define('_COURTCIRCUIT_EXCLURE_COMPOSITIONS', array('annonces_emploi','annonces_logement'));

    Est-ce que l’ajout et le nommage de la constante vous semble convenables ? Si oui, je peux l’ajouter à la documentation et monter la version du plugin en 2.5.0, sinon je revert :)

    • Hello b_b,
      C’est top ! Mais en php 5.6.14 j’ai un « Constants may only evaluate to scalar values in... » lorsque j’essaye

      Passer par un serialize / unserialize ?

      define('_COURTCIRCUIT_EXCLURE_COMPOSITIONS', serialize(array('agenda')));

      et

      in_array($composition,  unserialize(_COURTCIRCUIT_EXCLURE_COMPOSITIONS));
    • Arf oui, bien vu Guytarr, du coup je propose d’utiliser une liste de compositions séparées par des virgules et un simple explode. D’un autre côté, serailizer l’array aurait l’avantage de brancher tout ça sur une valeur de config plus facilement.

      Tu en penses quoi ?

    • Coucou, pas de soucis avec les évolutions du plugin. Mais vu que tout le reste du plugin est configuré via un formulaire et non via des constantes, est-ce que ça ne serait pas mieux de rajouter une option dans la section Exceptions du formulaire ?

      A défaut, si maintien d’une constante, il me semble qu’il faudrait au mois ajouter un message (lorsque la constante est définie) et indiquant la valeur de cette dernière.

      Cdlt

    • Tant qu’à faire, je le mettrai bien dans la config directement, que ça s’affiche lorsque « Appliquer les règles de redirection » sur compositions est sélectionné.

      En tout cas j’ai eu le même besoin que toi pas plus tard que ce matin, merci :)
      Vous en pensez quoi Joseph et tetue ?

      edit : je viens de voir la réponse de Joseph ^^

    • Ok, j’ajoute une entrée de config qui s’affiche ou se masque suivant la conf appliquée aux traitement de rubrique. Pour l’instant je fais simple, en proposant un simple input dans lequel on peut entrer une liste de compos séparées par des virgules. On aura tout le temps de brancher ça sur un select qui listerait automagiquement les compos de rubriques dispos par la suite si quelqu’un veut faire ça mieux ;)

    • Et hop, c’est en place dans la version 2.5.0 cf :

      https://zone.spip.org/trac/spip-zone/changeset/102442

      (j’ai supprimé l’usage du define au passage)

    Répondre à ce message

  • 3
    blonchk

    Problèmes critiques chez moi avec Spip3 et CourtCircuit 2 (unique plugin additionnel)
    But : Afficher premier ou seul article de n’importe quelle rubrique de l’arbre.
    Mes réglages : 1, 2 et 5 à oui´ ourrediriger´, le reste par défaut.

    Comportement


    -  Le plugin traverse l’arborescence descendante sans s’arrêter jusqu’à la rubrique terminale.
    -  Désactiver le plugin ou le désinstaller rend le site inopérant (plus du tout d’espace publique, juste le logo et le nom du site qui me narguent).

    Dépannage rapide et sale

    Après plusieurs essais empiriques je suis arrivé au comportement voulu de la manière suivante :
    1. Invalider tous les règlages de CourtCircuit (tout à « Non »)
    2. Désinstaller CourtCircuit 2. Mais surtout, ne pas toucher spip_meta au niveau de la config CourtCircuit après cette étape. Ces défauts négatifs sont essentiels.
    3. Mon cache Spip étant désactivé, je l’ai tout de même vidé
    4. Quitter la session admin, vider les caches du navigateur.
    5. réinstaller CourtCircuit. A ce statde tous les défaut sont à Non (voir remarque en 2)
    6. Activer (Oui) pour article unique, premier article et subsection (1, 2 et 5).

    Cordialement

    • Juste pour comprendre :

      • Après ton « dépannage rapide et sale », la redirection des rubriques fonctionne-t-elle comme attendue ?
      • Quand tu as désinstallé le plugin, était-ce via l’interface de gestion des plugins ou via une suppression manuelle des fichiers ? Dans le second cas, étais-tu repassé par exec=admin_plugin afin que les fichiers de chargement des pipelines soient mis à jour ?
      • Aucun message d’erreur PHP ?
      • Après la première désinstallation du plugin, y a t il eu vidage du cache (même si cache désactivé) ?
    • Merci blonchk,
      je me suis retrouvé dans la même situation que toi et ta technique m’a sauvé !

    • Hé bien , même galère (SPIP 3.1.1, avec squelette scola spip)

      -  Court circuit s’arrêtait au premier article partout, même là où il y avait plusieurs article (redirection 1 seule pourtant),
      -  la désactivation du plugin n’a rien changer,
      -  après vidage du cache un gros site vide,
      -  après une suppression du plugin + de nouveau vidage du cache SPIP je récupère le site mais les règles de court-circuit (pourtant désinstallé) sont toujours actives sur les pages où je l’avait testé, ailleurs non.
      -  a cette minute le site est bancal (règles du court circuit fantôme à moitié en place),
      -  je vais tester ta technique ! en commençant par vider le cache du naviguateur (ça mange pas de pain ;))

      ++

    Répondre à ce message

  • Bonjour,
    est-ce qu’il y a une technique pour appliquer une règle différente à une rubrique ?

    Merci par avance.

    Répondre à ce message

  • 5

    Bonjour Joseph,

    Ce plugin fonctionne très bien, sur mon site « desktop », tout du moins.
    Par contre, sur les mobiles (via l’utilisation du plugin « Pages pour mobiles »), là il ne fait plus son boulot... penses-tu qu’il y aurait quelque chose à faire ?

    En te remerciant

    • Bonjour Joseph,

      Je note 2 petites choses :
      1) Le plugin peut se désactiver mais non se désinstaller.
      2) sur le plugin activé, j’ai tout passé à « non », puis désactivé, puis vidé le cache manuellement, puis effacé le plugin, puis vidé le navigateur... mais j’ai toujours un comportement anormal de mon site...

      Sous SPIP 3.0.20, plugins mis à jour.

    • 1) Il ne modifie pas la base de données. Il y a juste une config dans les paramètres.

      2) quel est le comportement anormal ? le comportement attendu ? quels sont les autres plugins installés ? Le site est-il en ligne quelque part ?

    • Bonjour Joseph,

      Je ne sais plus quel était le comportement anormal, et tout est revenu dans l’ordre finalement (par quel miracle ?). Par contre, et puisque j’utilise Mobile, j’ai dû trouver une autre solution en passant par des tests et boucles. C’est bien dommage, mais il m’est avis que c’est dû à Mobile et non à Court-Circuit...

    • Les deux plugins agissent sur le même pipeline je pense.

      Ceci dit, plutot que d’avoir des squelettes différents pour les pages mobiles, il est préférable d’avoir un seul et unique squelette mais un design CSS responsive

    • Bonsoir Joseph,

      Oui, j’ai bien essayé de composer un CSS responsive, mais beaucoup de problèmes se sont posés : et notamment un sommaire qui doit être radicalement différent sur mobile par rapport au desktop, l’affichage des cartes GIS qui doivent être de tailles différentes selon les versions, etc.
      Car je n’ai pas trouvé d’autre solution permettant, par SPIP, de dégager des informations sur l’écran et sa résolution et de permettre donc certains affichages (notamment de photos) de s’adapter selon. Je me trompe ?

      Sinon, oui, tu as parfaitement raison, le mieux (pour la maintenance notamment), est de composer un seul squelette, et plusieurs CSS !

    Répondre à ce message

  • 1

    spip dernière version avec SpipR.
    Lors de l’activation du plugin : tout marche bien !
    Lors de la désactivation de celui-ci… les pages publiques ne sont calculées que jusqu’au < / h e a d > !!
    bug ?

    Répondre à ce message

  • Benoît Labourdette

    Polyhiérarchie : quand on sélectionne la fonctionnalité « Seul article de la rubrique », s’il y a un seul article dans la rubrique et que les autres sont en polyhiérarchie, alors ça redirige vers l’article. Ce qui est dommage, car en fait il y en a plusieurs à afficher !
    Serait-il possible de faire que ton plugin prenne en compte la polyhiérarchie dans sa comptabilisation du nombre d’articles ?
    Merci !!!

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom