Remplacer le contenu du pipeline affiche_enfants

Bonjour,
Voici un (autre de mes) souci(s) : je souhaite remplacer complètement le fichier appelé par le pipeline ‹ affiche_enfants › dans une rubrique particulière.
La fonction suivante dans ‹ mes_options › fonctionne parfaitement, sauf qu’elle ajoute le tableau que je souhaite au lieu de le remplacer (le tableau natif issu de objets/liste/articles est toujours affiché en-dessous).
Ci-dessous ma fonction :

// PERSO : Modifier le pipeline affiche_enfants pour afficher articles-prives si rubrique 2514

if (!isset($GLOBALS[‹ spip_pipeline ›][‹ affiche_enfants ›])) {
$GLOBALS[‹ spip_pipeline ›][‹ affiche_enfants ›] = «  »;
}
$GLOBALS[‹ spip_pipeline ›][‹ affiche_enfants ›] .= « |articlesprives_affiche_enfants »;

function articlesprives_affiche_enfants($vars="") {

$exec = $flux[« args »][« exec »];
$id_rubrique = isset($vars[« args »][« id_rubrique »]) ? $vars[« args »][« id_rubrique »] : 0;
$id_article = isset($vars[« args »][« id_article »]) ? $vars[« args »][« id_rubrique »] : 0;
$chris = isset($vars[« exec »][« chriswords »]) ? $chris[« args »][« id_rubrique »] : ‹  ›;
$data = $vars[« data »];
if ($id_rubrique == 2514 ) {
if ($id_rubrique < 1) $id_rubrique=0;

$contexte = array(‹ id_rubrique ›=>$id_rubrique,‹ statut › => $statut);

$page = evaluer_fond(« squelettes/prive/objets/liste/articles-prives », $contexte);

$ret .= $page[« texte »];

$data = $ret.$data;

$vars[« data »] = $data;
}
if (!intval($chris))
return $vars;

}
(contexte : dans la rubrique 2514, j’affiche le tableau ‹ enfants › avec le modèle ‹ articles-prives › pour les articles ayant le statut ‹ prepa ›, et dans cette même rubrique j’ai un lien en partie ‹ navigation › vers une page créée de-novo appelée ‹ chriswords › (exec=chriswords) qui est dédiée aux articles spécifiquement de statut ‹ prive ›, de cette même rubrique 2514. Cette page ‹ chriswords › contient le paramètre url ‹ id_rubrique=2514 › pour récupérer les articles de la rubrique en question et les filtrer sur le staut – j’espère que ce n’est pas trop confus !).

J’aimerais bien pouvoir tout faire en PHP via le fichier ‹ mes_options › (eh oui!) même si une surcharge du fichier /objets/liste/articles.html est évidemment possible, avec un filtre suivant la rubrique (en utilisant ‹ [(#ENV{exec}|=={rubrique}|et{#ENV{id_rubrique}|=={X}|?{ › ‹ , ›’})] ou ce genre de choses.

Avez-vous déjà été confronté au problème? Merci par avance de votre éclairage.

Naema

Bon, j’ai résolu le problème en faisant une ré-orientation des fichiers html :

dans ‹ squelettes/prive/objets/liste/articles.html › :

[(#ENV{id_rubrique}|=={2514}|non)
<INCLURE{fond=squelettes/prive/objets/liste/articles-standard, env, ajax} />
]
[(#ENV{id_rubrique}|=={2514}|oui)
<INCLURE{fond=squelettes/prive/objets/liste/articles-prives, env, ajax} />
]
et ensuite, personnalisation de chacun des 2 fichiers. Ca ne me satisfait pas vraiment (car du coup, j’ai 3 fichiers html pour afficher une rubrique en fonction de son id_rubrique) mais cela fonctionne.

Si vous avez une meilleure solution avec une fonction PHP unique, je suis preneuse !

Merci,

Le ven. 5 avr. 2019 à 01:29, Naema <junkofzenet@gmail.com> a écrit :

Bonjour,
Voici un (autre de mes) souci(s) : je souhaite remplacer complètement le fichier appelé par le pipeline ‹ affiche_enfants › dans une rubrique particulière.
La fonction suivante dans ‹ mes_options › fonctionne parfaitement, sauf qu’elle ajoute le tableau que je souhaite au lieu de le remplacer (le tableau natif issu de objets/liste/articles est toujours affiché en-dessous).
Ci-dessous ma fonction :

// PERSO : Modifier le pipeline affiche_enfants pour afficher articles-prives si rubrique 2514

if (!isset($GLOBALS[‹ spip_pipeline ›][‹ affiche_enfants ›])) {
$GLOBALS[‹ spip_pipeline ›][‹ affiche_enfants ›] = «  »;
}
$GLOBALS[‹ spip_pipeline ›][‹ affiche_enfants ›] .= « |articlesprives_affiche_enfants »;

function articlesprives_affiche_enfants($vars=«  ») {

$exec = $flux[« args »][« exec »];
$id_rubrique = isset($vars[« args »][« id_rubrique »]) ? $vars[« args »][« id_rubrique »] : 0;
$id_article = isset($vars[« args »][« id_article »]) ? $vars[« args »][« id_rubrique »] : 0;
$chris = isset($vars[« exec »][« chriswords »]) ? $chris[« args »][« id_rubrique »] : ‹  ›;
$data = $vars[« data »];
if ($id_rubrique == 2514 ) {
if ($id_rubrique < 1) $id_rubrique=0;

$contexte = array(‹ id_rubrique ›=>$id_rubrique,‹ statut › => $statut);

$page = evaluer_fond(« squelettes/prive/objets/liste/articles-prives », $contexte);

$ret .= $page[« texte »];

$data = $ret.$data;

$vars[« data »] = $data;
}
if (!intval($chris))
return $vars;

}
(contexte : dans la rubrique 2514, j’affiche le tableau ‹ enfants › avec le modèle ‹ articles-prives › pour les articles ayant le statut ‹ prepa ›, et dans cette même rubrique j’ai un lien en partie ‹ navigation › vers une page créée de-novo appelée ‹ chriswords › (exec=chriswords) qui est dédiée aux articles spécifiquement de statut ‹ prive ›, de cette même rubrique 2514. Cette page ‹ chriswords › contient le paramètre url ‹ id_rubrique=2514 › pour récupérer les articles de la rubrique en question et les filtrer sur le staut – j’espère que ce n’est pas trop confus !).

J’aimerais bien pouvoir tout faire en PHP via le fichier ‹ mes_options › (eh oui!) même si une surcharge du fichier /objets/liste/articles.html est évidemment possible, avec un filtre suivant la rubrique (en utilisant ‹ [(#ENV{exec}|=={rubrique}|et{#ENV{id_rubrique}|=={X}|?{ › ‹ , ›'})] ou ce genre de choses.

Avez-vous déjà été confronté au problème? Merci par avance de votre éclairage.

Naema

Dans le pipeline, tu ajoutes ton contenu :
  $ret .= $page["texte"];
donc le nouveau contenu est ajouté.

Si tu veux remplacer une partie au lieu d'ajouter ton contenu,
il faut repérer cette partie et la remplacer par ton contenu.

Ça peut se faire par exemple en 2 temps :
   $texte = preg_replace("/debut de la partie à remplacer.*fin de la partie à remplacer/", "###ICI###", $texte);
C'est l'examen du HTML produit qui te donnera le pattern exact à employer.
Puis :
   $texte = str_replace("###ICI###", $page['texte'], $texte);

Mais attention : dans ta fonction, il y a plusieurs erreurs de nommage des variables
qui sont mal ou pas initialisées : $flux, $var, $ret, etc
donc il est probable que pas grand chose ne peut marcher en l'état.
Il faut corriger et être cohérent dans les noms de variable tout du long de la fonction.

JL

Le 05/04/2019 à 02:34, Naema a écrit :

Bon, j'ai résolu le problème en faisant une ré-orientation des fichiers html :
dans 'squelettes/prive/objets/liste/articles.html' :
[(#ENV{id_rubrique}|=={2514}|non)
<INCLURE{fond=squelettes/prive/objets/liste/articles-standard, env, ajax} />
]
[(#ENV{id_rubrique}|=={2514}|oui)
<INCLURE{fond=squelettes/prive/objets/liste/articles-prives, env, ajax} />
]
et ensuite, personnalisation de chacun des 2 fichiers. Ca ne me satisfait pas vraiment (car du coup, j'ai 3 fichiers html pour afficher une rubrique en fonction de son id_rubrique) mais cela fonctionne.
Si vous avez une meilleure solution avec une fonction PHP unique, je suis preneuse !
Merci,

Le ven. 5 avr. 2019 à 01:29, Naema <junkofzenet@gmail.com <mailto:junkofzenet@gmail.com>> a écrit :

    Bonjour,
    Voici un (autre de mes) souci(s) : je souhaite remplacer complètement le fichier appelé par le pipeline
    'affiche_enfants' dans une rubrique particulière.
    La fonction suivante dans 'mes_options' fonctionne parfaitement, sauf qu'elle *ajoute* le tableau que je souhaite au
    lieu de le remplacer (le tableau natif issu de objets/liste/articles est toujours affiché en-dessous).
    Ci-dessous ma fonction :
    // PERSO : Modifier le pipeline affiche_enfants pour afficher articles-prives si rubrique 2514

    if (!isset($GLOBALS['spip_pipeline']['affiche_enfants'])) {
      $GLOBALS['spip_pipeline']['affiche_enfants'] = "";
    }
      $GLOBALS['spip_pipeline']['affiche_enfants'] .= "|articlesprives_affiche_enfants";

    function articlesprives_affiche_enfants($vars="") {

      $exec = $flux["args"]["exec"];
      $id_rubrique = isset($vars["args"]["id_rubrique"]) ? $vars["args"]["id_rubrique"] : 0;
      $id_article = isset($vars["args"]["id_article"]) ? $vars["args"]["id_rubrique"] : 0;
      $chris = isset($vars["exec"]["chriswords"]) ? $chris["args"]["id_rubrique"] : '';
      $data = $vars["data"];
      if ($id_rubrique == 2514 ) {
      if ($id_rubrique < 1) $id_rubrique=0;

      $contexte = array('id_rubrique'=>$id_rubrique,'statut' => $statut);

      $page = evaluer_fond("squelettes/prive/objets/liste/articles-prives", $contexte);

      $ret .= $page["texte"];

      $data = $ret.$data;

      $vars["data"] = $data;
      }
      if (!intval($chris))
      return $vars;

    }
    (contexte : dans la rubrique 2514, j'affiche le tableau 'enfants' avec le modèle 'articles-prives' pour les
    articles ayant le statut 'prepa', et dans cette même rubrique j'ai un lien en partie 'navigation' vers une page
    créée de-novo appelée 'chriswords' (exec=chriswords) qui est dédiée aux articles spécifiquement de statut 'prive',
    de cette même rubrique 2514. Cette page 'chriswords' contient le paramètre url 'id_rubrique=2514' pour récupérer les
    articles de la rubrique en question et les filtrer sur le staut -- j'espère que ce n'est pas trop confus !).

    J'aimerais bien pouvoir tout faire en PHP via le fichier 'mes_options' (eh oui!) même si une surcharge du fichier
    /objets/liste/articles.html est évidemment possible, avec un filtre suivant la rubrique (en utilisant
    '[(#ENV{exec}|=={rubrique}|et{#ENV{id_rubrique}|=={X}|?{' ',''})] ou ce genre de choses.

    Avez-vous déjà été confronté au problème? Merci par avance de votre éclairage.

    Naema