Submitted by Luneh on
Bonjour,
Utilisant le module image_attach, j'aurais aimé pouvoir personnaliser un peu plus l'aspect de ma page et sortir l'image de la zone de contenu pour la placer dans un bloc situé dans une autre région de mon template.
Sur le site Drupal en anglais, j'avais trouvé quelqu'un qui donnait une piste. En insérant les lignes suivantes dans contemplate il était possible de faire afficher l'image:
<?php
$node = node_load($nid);
print theme('image_attach_body', $node);
?>
J'aimerais le même type de chose mais pour la création d'un bloc et pour cela quelque chose cloche visiblement. Quelqu'un serait-il en mesure de m'aiguiller un peu? Je ne connais rien à PHP... mais j'apprends vite.
Merci beaucoup d'avance.
Hello, Pourquoi ne pas
Permalien Soumis par drupalfrance le 26 Février, 2007 - 12:27
Hello,
Pourquoi ne pas utiliser le code que tu as cité, mais dans un bloc ? Le truc, c'est que la variable
$nid
(l'id du node) ne sera pas disponible dans le bloc, il faudrait donc la récupérer dans l'url grâce à la fonction arg(), ce qui donne :Ce code suppose que le bloc est utilisé sur les pages de type www.monsite.com/node/18 (c. à d. les pages qui affichent un node).
Est-ce que ça te paraît clair ?
Ah ben tu vois, je n'y
Permalien Soumis par Luneh le 26 Février, 2007 - 13:02
Ah ben tu vois, je n'y connais tellement rien en php que je n'aurais pas su dire. Ta suggestion va tout à fait dans le sens de ce dont j'ai besoin.
Bon, j'ai donc suivi ton conseil qui m'a donné au final un dédoublement de contenu dans sa totalité, image + texte. Imaginant que c'était normal vu qu'il s'agissait d'appeler theme('image_attach_body', $node), j'ai testé avec autre chose qui était suggéré mais en intégrant arg(1) comme tu l'as suggéré.
Je parviens à avoir presque ce que je souhaite avec le code suivant:
<?php
$node = node_load(arg(1));
$image = node_load($node->iid);
print l(image_display($image, 'thumbnail'), "node/$node->nid", array(), NULL, NULL, FALSE, TRUE);
?>
Presque, parce que sur les nodes qui n'ont pas d'image attachée, je récupère ce message d'erreur:
* warning: implode(): Bad arguments. in /home/hyboria/www/modules/node.module on line 378.
* user warning: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 query: SELECT n.nid, n.vid, n.type, n.status, n.created, n.changed, n.comment, n.promote, n.moderate, n.sticky, r.timestamp AS revision_timestamp, r.title, r.body, r.teaser, r.log, r.format, u.uid, u.name, u.picture, u.data FROM node n INNER JOIN users u ON u.uid = n.uid INNER JOIN node_revisions r ON r.vid = n.vid WHERE in /home/hyboria/www/includes/database.mysql.inc on line 121.
Il faut donc un "if" mais je n'ai pas trouvé quelque chose de satisfaisant.
Là encore, dans le code d'origine, la suggestion c'est:
<?php
if ($iid) {
$node = node_load($nid);
$image = node_load($node->iid);
print l(image_display($image, 'thumbnail'), "node/$node->nid", array(), NULL, NULL, FALSE, TRUE);
}
?>
Mais rien ne s'affiche si j'intègre le "if" au code qui fonctionne avec arg(1). Si je comprends bien le raisonnement de ce que tu m'as expliqué dans ton premier post, mon problème ici c'est que la variable $iid n'est pas non plus disponible dans le bloc... Je dois intégrer quoi cette fois?
Un grand merci de m'aider. A défaut de savoir utiliser php je suis tenace... mais quand même :P
Caroline
Je dirais qu'il faut
Permalien Soumis par drupalfrance le 26 Février, 2007 - 15:39
Je dirais qu'il faut déplacer le test plus bas, à l'endroit où $node->iid est disponible :
Du nouveau.
Permalien Soumis par Luneh le 26 Février, 2007 - 15:52
[Edit]
Ca fonctionne!!!
Mille mercis!
Bon, maintenant prions pour que je ne revienne pas dans quelques temps pleurnicher parce qu'en fait ça n'est pas tout à fait ça. :P
Tant mieux ! N'hésite pas
Permalien Soumis par drupalfrance le 26 Février, 2007 - 19:37
Tant mieux !
N'hésite pas si tu as d'autres questions.