Ticket #4291 : faire fonctionner la balise #INFO_INTRODUCTION de la même façon que #INTRODUCTION. #110

Open
tcharlss wants to merge 3 commits from dev/issue_4291_introduction into master
Owner

(Reprise de la PR !5 qui est en rade)

Objectif

Faire fonctionner la balise #INFO_INTRODUCTION de la même façon que #INTRODUCTION

Actuellement, cette balise ne renvoie rien, à part si l'objet possède un champ « introduction ». Il serait préférable d'avoir la vraie introduction calculée par SPIP en fonction des autres champs.

Fonctionnement actuel

La balise #INFO_xxx renvoie tout simplement le champ « xxx » de l'objet, s'il existe.
Les cas particuliers sont gérés de 2 façons :

Solution

Ce PR ajoute donc une fonction generer_introduction_entite pour prendre en charge les introductions.
Cette fonction est mutualisée entre la balise normale #INTRODUCTION et #INFO_INTRODUCTION.
En conséquent, une partie des choses qui étaient faites dans #INTRODUCTION est déportée dans cette fonction.

Pour résumer, voici l'ordre d'appel et le rôle des balises et fonctions :

  1. #INTRODUCTION / #INFO_INTRODUCTION : récupère les données brutes (champs textes, paramètres longueur et suite)
  2. generer_introduction_entite() : normalise les données (tri dans les champs de texte, normalisation des paramètres longueur et suite)
  3. filtre_introduction_dist() : construit l'introduction

Limites

  1. On ne peut pour l'instant pas passer de paramètre supplémentaires à #INFO_xxx, donc pas de longueur et de suite.
  2. propre est déjà fait dans le calcul du fitre introduction, donc l'étoile n'a aucun effet (cf. commentaire).
  3. On ne connaît pas le $connect avec #INFO_xxx, cf. commentaire

Tests

Testé les cas suivants, tout fonctionne :

  • #INFO_INTRODUCTION{article,#ID_ARTICLE}
  • #INTRODUCTION
  • #INTRODUCTION{100, ...}
  • #INTRODUCTION{...}
(Reprise de la PR !5 qui est en rade) **Objectif** Faire fonctionner la balise `#INFO_INTRODUCTION` de la même façon que `#INTRODUCTION` Actuellement, cette balise ne renvoie rien, à part si l'objet possède un champ « introduction ». Il serait préférable d'avoir la vraie introduction calculée par SPIP en fonction des autres champs. **Fonctionnement actuel** La balise `#INFO_xxx` renvoie tout simplement le champ « xxx » de l'objet, s'il existe. Les cas particuliers sont gérés de 2 façons : * Certains sont gérés en interne : la date et le titre * Les autres peuvent avoir des traitements personnalisés en créant des fonctions [generer_TRUC_TYPE](https://git.spip.net/SPIP/spip/src/branch/master/ecrire/inc/filtres.php#L4282) ou [generer_TRUC_entite](https://git.spip.net/SPIP/spip/src/branch/master/ecrire/inc/filtres.php#L4285) **Solution** Ce PR ajoute donc une fonction `generer_introduction_entite` pour prendre en charge les introductions. Cette fonction est mutualisée entre la balise normale `#INTRODUCTION` et `#INFO_INTRODUCTION`. En conséquent, une partie des choses qui étaient faites dans `#INTRODUCTION` est déportée dans cette fonction. Pour résumer, voici l'ordre d'appel et le rôle des balises et fonctions : 1. `#INTRODUCTION` / `#INFO_INTRODUCTION` : récupère les données brutes (champs textes, paramètres `longueur` et `suite`) 2. `generer_introduction_entite()` : normalise les données (tri dans les champs de texte, normalisation des paramètres `longueur` et `suite`) 3. `filtre_introduction_dist()` : construit l'introduction **Limites** 1. On ne peut pour l'instant pas passer de paramètre supplémentaires à `#INFO_xxx`, donc pas de `longueur` et de `suite`. 2. propre est déjà fait dans le calcul du fitre `introduction`, donc l'étoile n'a aucun effet (cf. [commentaire](https://git.spip.net/SPIP/spip/src/branch/master/ecrire/public/balises.php#L844)). 3. On ne connaît pas le $connect avec `#INFO_xxx`, cf. [commentaire](https://git.spip.net/SPIP/spip/src/branch/master/ecrire/inc/filtres.php#L4297) **Tests** Testé les cas suivants, tout fonctionne : * `#INFO_INTRODUCTION{article,#ID_ARTICLE}` * `#INTRODUCTION` * `#INTRODUCTION{100, ...}` * `#INTRODUCTION{...}`
tcharlss added 1 commit 3 months ago
07dd2965ea Ticket #4291 : faire fonctionner la balise #INFO_INTRODUCTION de la même façon que #INTRODUCTION.
Owner

Ça me gêne un peu d'introduire une #INFO_INTRODUCTION qui ne supporte pas les paramètres longueur et suite. Je suppose qu'on peut adresser ça en définissant une balise qui collecte ces 2 arguments en plus du objet et id_objet de la balise generique #INFO_.

Enfin, il faudrait éviter que ce qu'on faisait avant à la compilation sur #INTRODUCTION soit maintenant fait à chaque calcul :

  • le trouver_table
  • la recuperation de la longueur de coupe
Ça me gêne un peu d'introduire une `#INFO_INTRODUCTION` qui ne supporte pas les paramètres longueur et suite. Je suppose qu'on peut adresser ça en définissant une balise qui collecte ces 2 arguments en plus du objet et id_objet de la balise generique `#INFO_`. Enfin, il faudrait éviter que ce qu'on faisait avant à la compilation sur #INTRODUCTION soit maintenant fait à chaque calcul : - le trouver_table - la recuperation de la longueur de coupe

Questionnement : plutôt que définir une balise dédiée en plus, est-ce qu'on ne pourrait pas dans la balise générique INFO_XXX prendre en compte les arguments supplémentaires si on en donne :

  • s'il y a des choses au-dela de objet/id_objet, on les récupère aussi
  • par défaut ça fait rien, puisque le comportement de base n'en fait rien
  • mais s'il existe une fonction implémentant telle info précise generer_XXX_entite alors on lui passe ces arguments en plus aussi, après les arguments obligatoires

Et donc là en l'occurence, generer_introduction_entite aurait generer_introduction_entite($id_objet, $objet, $select, $longueur, $suite)

Questionnement : plutôt que définir une balise dédiée en plus, est-ce qu'on ne pourrait pas dans la balise générique INFO_XXX prendre en compte les arguments supplémentaires si on en donne : - s'il y a des choses au-dela de objet/id_objet, on les récupère aussi - par défaut ça fait rien, puisque le comportement de base n'en fait rien - mais s'il existe une fonction implémentant telle info précise `generer_XXX_entite` alors on lui passe ces arguments en plus aussi, après les arguments obligatoires Et donc là en l'occurence, `generer_introduction_entite` aurait `generer_introduction_entite($id_objet, $objet, $select, $longueur, $suite)`
Owner

Dans tous les cas la balise #INFO_xx appelle generer_info_entite() qui ensuite délègue éventuellement.

Il faut donc gérer les arguments supplémentaires eventuels via un tableau d'args je pense qu'on ajoute à generer_info_entite() et qui est ignoré par défaut et passe en splat sur les fonction de délégation si il y en a alors...

Enfin au choix l'un ou l'autre, mais je pense qu'il serait bon de traiter le problème d'emblée qu'on ait au moins un fonctionnement cohérent de l'ensemble

Dans tous les cas la balise `#INFO_xx` appelle `generer_info_entite()` qui ensuite délègue éventuellement. Il faut donc gérer les arguments supplémentaires *eventuels* via un tableau d'args je pense qu'on ajoute à `generer_info_entite()` et qui est ignoré par défaut et passe en splat sur les fonction de délégation si il y en a alors... Enfin au choix l'un ou l'autre, mais je pense qu'il serait bon de traiter le problème d'emblée qu'on ait au moins un fonctionnement cohérent de l'ensemble

bé oui, on dit pareil donc :)
ça doit être générique, dès qu'il y a des args en plus à la balise squelette, on les récupère et passe dans les fonctions suivantes

bé oui, on dit pareil donc :) ça doit être générique, dès qu'il y a des args en plus à la balise squelette, on les récupère et passe dans les fonctions suivantes
Owner

ah mais @tcharlss tu finis cette PR ou on laisse tomber ?

ah mais @tcharlss tu finis cette PR ou on laisse tomber ?
Poster
Owner

Je l'avais gardée dans un coin de ma tête mais sans avancer dessus encore.
Oui je vais essayer de la boucler.

Je l'avais gardée dans un coin de ma tête mais sans avancer dessus encore. Oui je vais essayer de la boucler.
Owner

je tente ma chance encore ? :p

je tente ma chance encore ? :p
tcharlss added 1 commit 3 days ago
Poster
Owner

Enfin, il faudrait éviter que ce qu'on faisait avant à la compilation sur #INTRODUCTION soit maintenant fait à chaque calcul :

  • le trouver_table
  • la recuperation de la longueur de coupe

Traité dans 6bb47d4a32, ça je pense que c'est bon.

Je vais voir ce que je peux faire pour la question de collecter tous les arguments supplémentaires dans #INFO_XX (je promets rien !).

> Enfin, il faudrait éviter que ce qu'on faisait avant à la compilation sur #INTRODUCTION soit maintenant fait à chaque calcul : > * le trouver_table > * la recuperation de la longueur de coupe Traité dans 6bb47d4a32, ça je pense que c'est bon. Je vais voir ce que je peux faire pour la question de collecter tous les arguments supplémentaires dans \#INFO_XX (je promets rien !).
Poster
Owner

@cerdic Bon pour le 2ème point je pense avoir le truc, mais il reste quelque chose qui m'intrigue.

Pour récupérer tous les params dans la balise #INFO, j'utilise la propriété $p->param comme vu dans la balise #FILTRE .

Mais quels que soient les paramètres, le tableau contient toujours une valeur vide au début, exemple pour #INFO_TITRE{article,10} :

var_dump($p->param[0]);

array (size=3)
  0 => string '' (length=0)
  1 => 
    array (size=1)
      0 => 
        object(Texte)[13]
          public 'type' => string 'texte' (length=5)
          public 'texte' => string 'article' (length=7)
          public 'avant' => string '' (length=0)
          public 'apres' => string '' (length=0)
          public 'ligne' => int 0
  2 => 
    array (size=1)
      0 => 
        object(Texte)[14]
          public 'type' => string 'texte' (length=5)
          public 'texte' => string '10' (length=2)
          public 'avant' => string '' (length=0)
          public 'apres' => string '' (length=0)
          public 'ligne' => int 0

Est-ce qu'il faut s'attendre à ce qu'il y ait toujours cette valeur vide au début ?
Ou ça dépend de quelque chose en particulier ?

@cerdic Bon pour le 2ème point je pense avoir le truc, mais il reste quelque chose qui m'intrigue. Pour récupérer tous les params dans la balise #INFO, j'utilise la propriété `$p->param` comme vu dans la balise [#FILTRE](https://git.spip.net/spip/spip/src/branch/master/ecrire/public/balises.php#L1766) . Mais quels que soient les paramètres, le tableau contient toujours une valeur vide au début, exemple pour `#INFO_TITRE{article,10}` : ```php var_dump($p->param[0]); array (size=3) 0 => string '' (length=0) 1 => array (size=1) 0 => object(Texte)[13] public 'type' => string 'texte' (length=5) public 'texte' => string 'article' (length=7) public 'avant' => string '' (length=0) public 'apres' => string '' (length=0) public 'ligne' => int 0 2 => array (size=1) 0 => object(Texte)[14] public 'type' => string 'texte' (length=5) public 'texte' => string '10' (length=2) public 'avant' => string '' (length=0) public 'apres' => string '' (length=0) public 'ligne' => int 0 ``` Est-ce qu'il faut s'attendre à ce qu'il y ait toujours cette valeur vide au début ? Ou ça dépend de quelque chose en particulier ?
tcharlss added 1 commit 3 days ago
8999afcbc6 La balise `#INFO_XX` prend en compte tous les paramètres présents après objet et id_objet et les transmet aux fonctions generer_xxx.
Poster
Owner

Bon j'ai commité en assumant pour l'instant que le point cité précédemment était tout le temps vrai.

Tous les paramètres de #INFO_XX sont donc transmis aux fonctions generer_xx.
Par contre je n'ai pas été jusqu'à vérifier et limiter le nombre de paramètres possibles pour chaque fonction avec ReflectionFunction().

Ci-dessous les résultats de mes tests :

#INFO_URL{article, 10}
La-panse-2

#INFO_URL{article, 10, truc=machin, mon_ancre}
La-panse-2?truc=machin#mon_ancre


#INTRODUCTION

On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et ayant à bâbord et à tribord deux ailes qui s’abattent, tantôt l’une, tantôt l’autre, selon le vent, et remplacent la quille. Deuxièmement, le retour de Herm ; retour qui se compliquait d’un lourd lest de pierres. On allait à vide, mais on revenait chargé. Le prix de la joute était la chaloupe. Elle était d’avance donnée au vainqueur. Cette panse avait servi de bateau-pilote ; le pilote qui l’avait montée et conduite (...)

#INFO_INTRODUCTION{article, 10}

On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et ayant à bâbord et à tribord deux ailes qui s’abattent, tantôt l’une, tantôt l’autre, selon le vent, et remplacent la quille. Deuxièmement, le retour de Herm ; retour qui se compliquait d’un lourd lest de pierres. On allait à vide, mais on revenait chargé. Le prix de la joute était la chaloupe. Elle était d’avance donnée au vainqueur. Cette panse avait servi de bateau-pilote ; le pilote qui l’avait montée et conduite (...)


#INTRODUCTION{100, ' SUITE'}

On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et SUITE

#INFO_INTRODUCTION{article, 10, 100, ' SUITE'}

On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et SUITE


#INTRODUCTION{' SUITE'}

On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et ayant à bâbord et à tribord deux ailes qui s’abattent, tantôt l’une, tantôt l’autre, selon le vent, et remplacent la quille. Deuxièmement, le retour de Herm ; retour qui se compliquait d’un lourd lest de pierres. On allait à vide, mais on revenait chargé. Le prix de la joute était la chaloupe. Elle était d’avance donnée au vainqueur. Cette panse avait servi de bateau-pilote ; le pilote qui l’avait montée et conduite SUITE

#INFO_INTRODUCTION{article, 10, ' SUITE'}

On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et ayant à bâbord et à tribord deux ailes qui s’abattent, tantôt l’une, tantôt l’autre, selon le vent, et remplacent la quille. Deuxièmement, le retour de Herm ; retour qui se compliquait d’un lourd lest de pierres. On allait à vide, mais on revenait chargé. Le prix de la joute était la chaloupe. Elle était d’avance donnée au vainqueur. Cette panse avait servi de bateau-pilote ; le pilote qui l’avait montée et conduite SUITE

Bon j'ai commité en assumant pour l'instant que le point cité précédemment était tout le temps vrai. Tous les paramètres de \#INFO_XX sont donc transmis aux fonctions generer_xx. Par contre je n'ai pas été jusqu'à vérifier et limiter le nombre de paramètres possibles pour chaque fonction avec ReflectionFunction(). Ci-dessous les résultats de mes tests : `#INFO_URL{article, 10}` La-panse-2 `#INFO_URL{article, 10, truc=machin, mon_ancre}` La-panse-2?truc=machin#mon_ancre ---- `#INTRODUCTION` On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et ayant à bâbord et à tribord deux ailes qui s’abattent, tantôt l’une, tantôt l’autre, selon le vent, et remplacent la quille. Deuxièmement, le retour de Herm ; retour qui se compliquait d’un lourd lest de pierres. On allait à vide, mais on revenait chargé. Le prix de la joute était la chaloupe. Elle était d’avance donnée au vainqueur. Cette panse avait servi de bateau-pilote ; le pilote qui l’avait montée et conduite (...) `#INFO_INTRODUCTION{article, 10}` On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et ayant à bâbord et à tribord deux ailes qui s’abattent, tantôt l’une, tantôt l’autre, selon le vent, et remplacent la quille. Deuxièmement, le retour de Herm ; retour qui se compliquait d’un lourd lest de pierres. On allait à vide, mais on revenait chargé. Le prix de la joute était la chaloupe. Elle était d’avance donnée au vainqueur. Cette panse avait servi de bateau-pilote ; le pilote qui l’avait montée et conduite (...) ---- `#INTRODUCTION{100, ' SUITE'}` On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et SUITE `#INFO_INTRODUCTION{article, 10, 100, ' SUITE'}` On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et SUITE ---- `#INTRODUCTION{' SUITE'}` On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et ayant à bâbord et à tribord deux ailes qui s’abattent, tantôt l’une, tantôt l’autre, selon le vent, et remplacent la quille. Deuxièmement, le retour de Herm ; retour qui se compliquait d’un lourd lest de pierres. On allait à vide, mais on revenait chargé. Le prix de la joute était la chaloupe. Elle était d’avance donnée au vainqueur. Cette panse avait servi de bateau-pilote ; le pilote qui l’avait montée et conduite SUITE `#INFO_INTRODUCTION{article, 10, ' SUITE'}` On rencontre encore quelquefois en mer cet ancien gabarit de Hollande, joufflu et plat, et ayant à bâbord et à tribord deux ailes qui s’abattent, tantôt l’une, tantôt l’autre, selon le vent, et remplacent la quille. Deuxièmement, le retour de Herm ; retour qui se compliquait d’un lourd lest de pierres. On allait à vide, mais on revenait chargé. Le prix de la joute était la chaloupe. Elle était d’avance donnée au vainqueur. Cette panse avait servi de bateau-pilote ; le pilote qui l’avait montée et conduite SUITE
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

This pull request currently doesn't have any dependencies.

Loading…
There is no content yet.