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.

Footnotes

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

updated on 2 October 2019

Discussion

19 discussions

  • 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

    Reply to this 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

    Reply to this 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 ?

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

      et

      1. 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)

    Reply to this 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´ our `rediriger´, 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 ;))

      ++

    Reply to this message

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

    Merci par avance.

    Reply to this 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 !

    Reply to this 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 ?

    Reply to this 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 !!!

    Reply to this message

  • 2
    Alexandra

    Bonjour Joseph, je suis en z-core avec composition. Le court-circuit passe dans ma composition même quand j’exclue ma composition dans mes fichiers de surcharges :
    -  courtcircuit_selection_rubrique.html
    -  courtcircuit_selection_article.html
    J’imagine que c’est dans le pipeline courtcircuit_pipelines.php qu’il faut agir ?
    Quelle serait la syntaxe pour exclure une composition dans la fonction courtcircuit_styliser ?
    Merci

    • Alexandra

      oups c’était ma composition qui ne passait pas dans les branches. J’ai corrigé. Désolée pour le bruit, le court-circuitage ne s’applique effectivement pas aux compositions.

    • Ravi que tu aies trouvé la solution.

      Cordialement

    Reply to this message

  • 4

    Bonjour,

    Merci bien, il est top ce plugin, il permet de faire des chose plus propre que de mettre des url n dur dans les pages :-)

    Petite question... Est-il possible de court-circuiter court-circuit ?
    Je m’explique, j’ai activé le plugin pour qu’il gère bien la redirection dans pratiquement tous les cas (variante de rubrique, composition, 1 seul article, 1er article et balise #URL_RUBRIQUE et ça marche à merveille. Par contre dans mon footer je fais un lien vers une rubrique que j’utilise pour les actualités #URL_RUBRIQUE2 et du coup le lien généré correspond à mon actu la plus récente alors que je souhaite vraiment afficher ma rubrique pour voir toutes mes actus.
    J’ai essayer au pif URL_RUBRIQUE**2 mais ça ne change rien.
    Quelqu’un connait-il un moyen de désactiver court-circuit dans ce cas précis et pouvoir récupérer le lien de ma rubrique ?

    Merci et bonne soirée.

    • Court-Circuit agit directement sur le chargement de la rubrique. On peut le désactiver pour une rubrique mais pas pour un lien spécifique.

      Si je comprends, le comportement souhaité c’est de renvoyer sur l’actu la plus récente sur le lien situé dans le menu mais de renvoyer sur toutes les actus avec le lien dans le pied de page ?

      Une manière de procéder consiste à créer un squelette personnalisé (appelé actus par exemple, et qui peut être un copier/coller du squelette rubrique), le lien dans le pied de page pointant alors vers ce squelette particulier.

    • Bonjour Joseph,

      Merci pour la réponse.
      En fait, ce que je souhaite faire, c’est pointer directement sur ma rubrique 2 (et uniquement celle là) afin d’utiliser son squelette pour lister un résumé de tous ses articles (mes actus). Mais avec le plugin je suis redirigé vers son article le plus récent.

      Tu parles d’un moyen pour désactiver la redirection pour une rubrique, ça peut m’intéresser, tu fais comment stp ?

      Car pour l’instant, j’ai fait ça un peu à la barbare en modifiant directement la fonction : courtcircuit_calculer_balise_URL_RUBRIQUE en ajoutant une condition du genre :
      if ($id_rubrique!=2)

      A bientôt,
      Berty

    • Mais pour les autres rubriques tu veux pointer vers l’article le plus récent ?

      Pour court-circuiter court-circuit tu dois soit faire un squelette spécifique (rubrique=2.html) soit une composition spécifique (rubrique-actus.html et l’appliquer à la rubrique). Il n’y a pas encore de système pour activer/désactiver court-circuit rubrique par rubrique.

      Cordialement

    • Exactement, les autres rubriques pointent vers l’article le plus récent.

      Le souci c’est que j’utilise déjà des squelettes spécifiques et des déclinaisons dans d’autres rubriques qui ont besoin de la redirection.

      Tu pointes du doigt la solution ... l’idéal serait en effet de pouvoir activer/désactiver court-circuit par rubrique :-)
      Du coup j’ai rechangé un peu la structure de mon site et en utilisant le plugin Article d’accueil je suis arrivé à faire ce que je voulais.

      Merci pour tes réponse et bonne continuation,
      Berty

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom