#INFO_TITRE et titre de document vide #5729

Closed
opened 2 weeks ago by RealET · 19 comments
RealET commented 2 weeks ago

Bonjour,

Je voulais utiliser #INFO_TITRE{document, #ID_LOGO_ARTICLE} et je me rend compte que ça n'est jamais vide !

Plus précisément, quand ça n'est pas renseigné via l'interface d'admin du logo de l'article, le résultat est logo/nomdufichier.ext

Est-ce qu'il y a un moyen de renvoyer la valeur vide du champ ?

Bonjour, Je voulais utiliser `#INFO_TITRE{document, #ID_LOGO_ARTICLE}` et je me rend compte que ça n'est jamais vide ! Plus précisément, quand ça n'est pas renseigné via l'interface d'admin du logo de l'article, le résultat est `logo/nomdufichier.ext` Est-ce qu'il y a un moyen de renvoyer la valeur vide du champ ?
b_b commented 2 weeks ago
Owner

Version utilisée ?

Version utilisée ?
b_b added the
à confirmer
label 2 weeks ago
Owner

À priori et même à fortiori, c'est fait exprès :

'titre' => "CASE WHEN length(titre)>0 THEN titre ELSE fichier END as titre, '' AS lang",

Tu devrais avoir pareil avec #TITRE dans une boucle document non ?

À priori et même à fortiori, c'est fait exprès : ```php 'titre' => "CASE WHEN length(titre)>0 THEN titre ELSE fichier END as titre, '' AS lang", ``` Tu devrais avoir pareil avec #TITRE dans une boucle document non ?
RealET commented 2 weeks ago
Poster

Je m'en tire avec un modèle : modeles/titrelogo.html
<BOUCLE_TitreLogo(DOCUMENTS){id_document=#ENV{id_document}}{tous}>#TITRE</BOUCLE_TitreLogo>

Appelé par :
#MODELE{titrelogo,id_document=#ID_LOGO_ARTICLE}

Je m'en tire avec un modèle : `modeles/titrelogo.html` `<BOUCLE_TitreLogo(DOCUMENTS){id_document=#ENV{id_document}}{tous}>#TITRE</BOUCLE_TitreLogo>` Appelé par : `#MODELE{titrelogo,id_document=#ID_LOGO_ARTICLE}`
RealET commented 2 weeks ago
Poster

Version utilisée ?

SPIP 4.2.5

> Version utilisée ? SPIP 4.2.5
b_b commented 2 weeks ago
Owner

À priori et même à fortiori, c'est fait exprès :

'titre' => "CASE WHEN length(titre)>0 THEN titre ELSE fichier END as titre, '' AS lang",

Tu devrais avoir pareil avec #TITRE dans une boucle document non ?

Ça ne serait donc pas un bug, on peut fermer ?

> À priori et même à fortiori, c'est fait exprès : > > ```php > 'titre' => "CASE WHEN length(titre)>0 THEN titre ELSE fichier END as titre, '' AS lang", > ``` > > Tu devrais avoir pareil avec #TITRE dans une boucle document non ? Ça ne serait donc pas un bug, on peut fermer ?
RealET commented 2 weeks ago
Poster

Ça ne serait donc pas un bug, on peut fermer ?

Peut-être pas un bug, mais une limitation assez gênante.

Voir spip-contrib-extensions/titre_de_logo#1 pour un cas d'usage très précis.

> Ça ne serait donc pas un bug, on peut fermer ? Peut-être pas un bug, mais une limitation assez gênante. Voir https://git.spip.net/spip-contrib-extensions/titre_de_logo/issues/1#issuecomment-57317 pour un cas d'usage très précis.
RealET commented 2 weeks ago
Poster

Et j'ai bien essayé avec * et **, mais ça ne change rien.

Tout ce que je demande, c'est un moyen de forcer l'accès au titre brut, et pas à cette alternative obligatoire à partir du nom du fichier.

Et j'ai bien essayé avec `* `et `**`, mais ça ne change rien. Tout ce que je demande, c'est un moyen de forcer l'accès au titre brut, et pas à cette alternative obligatoire à partir du nom du fichier.
Owner

#CHAMP_SQL{titre} ferait pas le job (dans une boucle documents) ?

`#CHAMP_SQL{titre}` ferait pas le job (dans une boucle documents) ?
RealET commented 2 weeks ago
Poster

#CHAMP_SQL{titre} ferait pas le job (dans une boucle documents) ?

C'est une bonne idée, mais :

  1. ça n'est pas nécessaire car dans la boucle DOCUMENTS, #TITRE renvoie bien le titre, y compris vide.
  2. ça oblige aussi à faire une boucle alors que je voulais éviter ça avec #INFO_TITRE
> `#CHAMP_SQL{titre}` ferait pas le job (dans une boucle documents) ? C'est une bonne idée, mais : 1. ça n'est pas nécessaire car dans la boucle DOCUMENTS, #TITRE renvoie bien le titre, y compris vide. 2. ça oblige aussi à faire une boucle alors que je voulais éviter ça avec #INFO_TITRE
Owner

#INFO_TITRE est censé renvoyer la même chose que le #TITRE d'une boucle : car ça applique les mêmes filtres par défaut, et utilise la même déclaration du champ "titre" dans l'API objet.

Donc je ne saisis pas trop comment #TITRE peut te sortir le titre vide, si #INFO_TITRE te sort le fallback, vu comme dit @b_b plus haut les deux sont censés utiliser : 'titre' => "CASE WHEN length(titre)>0 THEN titre ELSE fichier END as titre, '' AS lang"

#INFO_TITRE est censé renvoyer la même chose que le #TITRE d'une boucle : car ça applique les mêmes filtres par défaut, et utilise la même déclaration du champ "titre" dans l'API objet. Donc je ne saisis pas trop comment #TITRE peut te sortir le titre vide, si #INFO_TITRE te sort le fallback, vu comme dit @b_b plus haut **les deux** sont censés utiliser : `'titre' => "CASE WHEN length(titre)>0 THEN titre ELSE fichier END as titre, '' AS lang"`
RealET commented 2 weeks ago
Poster

2 choses :

  • j'ai bien testé avec succès #TITRE dans la boucle document, et ça marche comme souhaité : ça renvoie bien la valeur brute, y compris vide
  • ce que tu décris serait alors problématique pour le squelette d'édition du titre d'un document parce que ça remplirait le titre avec le nom du fichier...

PS : @b_b tu as trouvé ta ligne de code où ?

2 choses : * j'ai bien testé avec succès #TITRE dans la boucle document, et ça marche comme souhaité : ça renvoie bien la valeur brute, y compris vide * ce que tu décris serait alors problématique pour le squelette d'édition du titre d'un document parce que ça remplirait le titre avec le nom du fichier... PS : @b_b tu as trouvé ta ligne de code où ?
Owner

Bé dans la déclaration de l'objet, donc là :
https://git.spip.net/spip/medias/src/branch/master/base/medias.php#L136

Et d'ailleurs ce ticket n'a rien à faire dans SPIP noyau puisqu'on parle de la table spip_documents du plugin Médias là :)

Bé dans la déclaration de l'objet, donc là : https://git.spip.net/spip/medias/src/branch/master/base/medias.php#L136 Et d'ailleurs ce ticket n'a rien à faire dans SPIP noyau puisqu'on parle de la table spip_documents du plugin Médias là :)
Owner

Bah il a raison @RealET

<BOUCLE_docs(DOCUMENTS)>
	- id: #ID_DOCUMENT<br>
	- titre: #TITRE<br>
	- info_titre: #INFO_TITRE{document,#ID_DOCUMENT}<br>
	<hr>
</BOUCLE_docs>

Si pas de titre, ça renvoie vide avec #TITRE mais pas avec #INFO_TITRE

#TITRE exécute cela

interdire_scripts(supprimer_numero(typo($Pile[$SP]['titre'], "TYPO", $connect, $Pile[0])))

Ce qui orrespond à $GLOBALS['table_des_traitements']['TITRE'][] = _TRAITEMENT_TYPO_SANS_NUMERO; dans declarer_interfaces()

Appliqué dans la fonction champs_traitements()

M’est avis que que

  • lorsqu’on appelle #TITRE (dans la boucle), on parle du champ SQL correspondant,
  • ce qui n’est pas exactement la même chose que "trouve un titre" (pour les urls),
  • et il semble que #INFO_TITRE soit plus dans cette seconde optique
Bah il a raison @RealET ```html <BOUCLE_docs(DOCUMENTS)> - id: #ID_DOCUMENT<br> - titre: #TITRE<br> - info_titre: #INFO_TITRE{document,#ID_DOCUMENT}<br> <hr> </BOUCLE_docs> ``` Si pas de titre, ça renvoie vide avec `#TITRE` mais pas avec `#INFO_TITRE` `#TITRE` exécute cela ```php interdire_scripts(supprimer_numero(typo($Pile[$SP]['titre'], "TYPO", $connect, $Pile[0]))) ``` Ce qui orrespond à `$GLOBALS['table_des_traitements']['TITRE'][] = _TRAITEMENT_TYPO_SANS_NUMERO;` dans `declarer_interfaces()` Appliqué dans la fonction `champs_traitements()` M’est avis que que - lorsqu’on appelle `#TITRE` (dans la boucle), on parle du champ SQL correspondant, - ce qui n’est pas exactement la même chose que "trouve un titre" (pour les urls), - et il semble que `#INFO_TITRE` soit plus dans cette seconde optique
Owner

Effectivement mea culpa j'étais persuadé que #TITRE utilisait aussi la déclaration mais non.

Pour #INFO_TITRE c'est parfaitement voulu en revanche puisque le but c'est de pouvoir générer à coup sûr un titre pour tous les objets Y COMPRIS ceux qui n'ont pas de champ SQL "titre" comme les auteurs par ex où c'est #NOM, et qu'alors on puisse toujours afficher quelque chose quand on fait un squelette totalement générique pour tout objet existant.

Effectivement mea culpa j'étais persuadé que #TITRE utilisait aussi la déclaration mais non. Pour #INFO_TITRE c'est parfaitement voulu en revanche puisque le but c'est de pouvoir générer à coup sûr un titre pour tous les objets Y COMPRIS ceux qui n'ont pas de champ SQL "titre" comme les auteurs par ex où c'est #NOM, et qu'alors on puisse toujours afficher quelque chose quand on fait un squelette totalement générique pour tout objet existant.
Owner

Donc… à fortiori, on peut fermer le ticket ?

Donc… à fortiori, on peut fermer le ticket ?
RealET commented 2 weeks ago
Poster

Je pense qu'on peut fermer.

Mais ça vaudrait le coup d'une documentation quelque part pour éviter de (re)chercher.
Parce que la doc actuelle indique :

#INFO_XXX{objet_type, id_objet} est une balise qui permet de récupérer la valeur d’un champ en base données sans nécessairement faire une boucle.

Et que cette description tend à faire croire que le résultat devrait être identique à celui avec une boucle.

Au passage, dans la boucle, j'ai dû rajouter {tous} car le logo en tant que document n'était pas renvoyé sans cela.
Et, effectivement, quand je regarde la base, j'ai des logos de rubrique avec le statut prop alors que la rubrique est bien publiée.
C'est peut-être un autre bug.
Je le signale où ? Média ?

Je pense qu'on peut fermer. Mais ça vaudrait le coup d'une documentation quelque part pour éviter de (re)chercher. Parce que la [doc actuelle](https://www.spip.net/fr_article5544.html#INFO_XXX) indique : > #INFO_XXX{objet_type, id_objet} est une balise qui permet de récupérer la valeur d’un champ en base données sans nécessairement faire une boucle. Et que cette description tend à faire croire que le résultat devrait être identique à celui avec une boucle. Au passage, dans la boucle, j'ai dû rajouter `{tous}` car le logo en tant que document n'était pas renvoyé sans cela. Et, effectivement, quand je regarde la base, j'ai des logos de rubrique avec le statut prop alors que la rubrique est bien publiée. C'est peut-être un autre bug. Je le signale où ? Média ?
Owner

Oui, je suppute, dans Média

Oui, je suppute, dans Média
b_b commented 2 weeks ago
Owner

On ferme ici donc.

On ferme ici donc.
b_b closed this issue 2 weeks ago
RealET commented 2 weeks ago
Poster

J'ai rédigé une documentation avec tout ce que j'ai découvert là dessus : https://www.spip.net/ecrire/?exec=article&id_article=6834

J'ai rédigé une documentation avec tout ce que j'ai découvert là dessus : https://www.spip.net/ecrire/?exec=article&id_article=6834
Sign in to join this conversation.
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: spip/spip#5729
Loading…
There is no content yet.