spip4 et logo des articles dans spip_documents

Bonjour,

J’aurais une question concernant le stockage des logos des objets dans la table documents depuis spip4.

Si je fais:

<BOUCLE(ARTICLES){par titre}>
<BOUCLE(DOCUMENTS) {id_article}{mode=logoon}{statut=prop}>
#FICHIER - #LARGEUR - #HAUTEUR
</BOUCLE>
</BOUCLE>

Pourquoi la boucle ne me retourne rien du tout?
Alors que quand je vais voir dans phpmyadmin, il y a bien les lignes?

Je souhaiterais récupérer la largeur et la hauteur entrées en base de tous mes logos pour ensuite pouvoir les modifier sans avoir a reup le logo sur chaque article.

Merci de votre aide

Bonjour,

Voir l’indication de @b_b ici : Indiquer la largeur d'un logo article avec raccourci SPIP - #2 par b_b

Oups :wink:

En relisant le besoin, ce doit être {statut=publie} qui affichera tous les logos.

Autrement, un document avec {statut=prop} et {mode=logoon} semble lié à un logo d’événement; la BOUCLE serait à faire sur les événements.

Salut Graphie,
Ca ne marche pas nom plus en mettant {statut=publie}.
Dans la base de donnée, les logos sont stockés avec le statut prop

Mais ces logos sont associés à quel objet ? Article ou événement, par ex. ?
Est-ce que la BOUCLE se fait sur le bon objet ?

C’est qu’un critère empêche le retour. Soit un critère explicite inadéquat genre {statut=publie} (au hasard) soit un critère implicite automagique ajouté par SPIP et qu’il faudrait désactiver.

Avec ?var_mode=debug , demande donc à voir quelle est la requête générée par SPIP pour la boucle, en cliquant sur l’onglet « résultat » de la boucle, et tu verras exactement quels critères MYSQL sont utilisés et tu pourras trouver quel critère SPIP tu dois désactiver ou corriger… au besoin en t’aidant de phpMyAdmin, puisque tu l’utilises déjà, pour la compréhension mise au point vérification.

Salut JLuc,

Je viens d’utiliser le debug et voici ce que j’ai obtenu dans le champ résultats:

SELECT documents.id_document
FROM spip_documents AS `documents`
WHERE (documents.taille > 0 OR documents.distant='oui')
	AND (documents.id_article = 1916)
	AND (documents.mode = 'logoon')
	AND (documents.statut = 'prop')

Il y a bien dans la table cette ligne mais spip ne me renvoie rien dans la boucle…

Graphie, il s’agit des logos des articles et oui je fais la boucle sur le bon objet.

Peut être te trompes tu en disant « Il y a bien dans la table cette ligne ».
Pour le savoir, que donne l’exécution de cette requête exacte dans phpmyadmin ?

Et sinon c’est que ton squelette ne fait rien du résultat attendu, soit qu’il ne le calcule pas du tout soit qu’il ne l’affiche pas. Ça peut être à cause du contenu de cette boucle (ou peut être de la boucle englobante mais ça m’étonnerait puisque le debugueur fournit un id_article)

Avec cette boucle ça fonctionne sans problème :

<BOUCLE(DOCUMENTS){mode=logoon}{tout}>
#FICHIER - #LARGEUR - #HAUTEUR
</BOUCLE>

C’est cette condition qui pose problème : documents.id_article = 1916
Bizarre que ça déclenche pas de jointure sur spip_documents_liens.

À tester :

<BOUCLE(ARTICLES) {par titre}>
<BOUCLE(DOCUMENTS documents_liens) {id_article} {mode=logoon} {tout}>
#FICHIER - #LARGEUR - #HAUTEUR
</BOUCLE>
</BOUCLE>

Alors effectivement cette boucle fonctionne sans problème.
Par contre, dès que j’essaie de l’englober dans une boucle article (en rajoutant l’id article bien sûr), ca ne marche plus…

Le problème semble venir de la jointure effectivement. Quand je fais avec ta boucle, ca ne fonctionne toujours pas…
Alors que pour tous les autres types de documents, je n’ai pas ce problème de jointure.

Je suis perdue

Chez moi, sur SPIP 4.2 dev la boucle suivante fonctionne bien :

<BOUCLE_a(ARTICLES)>
[article (#ID_ARTICLE)]
<BOUCLE(DOCUMENTS){id_article}{mode=logoon}{tout}>
#FICHIER - #LARGEUR - #HAUTEUR
</BOUCLE>
</BOUCLE_a>

La requête générée par la boucle des documents est bonne, cf :

SELECT documents.fichier, documents.largeur, documents.hauteur
FROM spip_documents AS `documents`  
INNER JOIN spip_documents_liens AS L1 ON ( L1.id_document = documents.id_document )
WHERE (documents.taille > 0 OR documents.distant='oui')
	AND (L1.id_objet = 108)
	AND (L1.objet = 'article')
	AND (documents.mode = 'logoon')

Quand je saisie la même boucle chez moi, je n’ai que « article » suivi de l’id de l’article qui s’affiche.
Et le résultat donne ca:

SELECT documents.fichier, documents.largeur, documents.hauteur
FROM spip_documents AS `documents`
WHERE (documents.taille > 0 OR documents.distant='oui')
	AND (documents.id_article = 1916)
	AND (documents.mode = 'logoon')

C’est bien la fameuse ligne de jointure qui me manque…
Je suis en 4.1.2 pour ma part.
Est ce possible qu’il ai un plugin qui interfère sur la jointure naturelle de spip?

Ha ben vi, quand on soupçonne un bug de SPIP la première chose à faire est de tester sans aucun plugin :slight_smile: Ensuite, si le bug n’est plus présent, il faut réactiver les plugins un à un entre chaque test pour trouver le fautif.

Alors j’ai testé en désactivant tous mes plugins, puis en vidant le cache et toujours le même résultat…

J’ai un autre site qui lui est en 4.0.7 et je n’ai pas ce problème.
C’est étrange quand même cette histoire :frowning:

Je suis en 4.0 et ton cas ressemble à celui que l’on rencontre lorsque l’on active le plugin « role de document »

Historiquement, le filtre « mode= » interroge la colonne « media » et non la colonne « mode », si tu mets {mode=image} , il affiche quelque chose ?

à l’inverse, est-ce que lorsque tu mets {role=logo} , il affiche seulement les logos ?

Salut Yohooo,
Alors je n’utilise pas le plugin « Role de document ».

Quand j’utilise le filtre {mode=image}, cela m’affiche les images présentes dans les articles mais pas le logo de l’article.

Le filtre {role=logo} n’ai pas reconnue et me retourne une erreur.