Appeler un champ d'un autre type de contenu avec Contemplate

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Ça fait un moment que je tourne en rond sur le même problème d'appel de champ d'un autre type de contenu...

J'ai un type de contenu AAtest qui possède un champ field_txtaa.
j'ai édité mon type de contenu avec Contemplate pour n'afficher que ce champ ce qui marche très bien) :

<div style="background: none repeat scroll 0% 0% rgb(230, 126, 48);"><?php print $node->field_txtaa[0]['view'] ?></div>

puis j'ai créé un contenu avec ce type de contenu, cette node étant la node 270.

Ensuite, j'ai un autre type de contenu BBtest dans lequel je voudrais appeler le contenu du champ field_txtaa (du type de contenu AAtest) que j'ai créé précédemment.
Je l'édite aussi avec Contemplate...sauf que pas moyen de trouver comment appeler le champ créé dans le type de contenu AAtest. J'ai essayé avec cette méthode :

$item_node = node_load(270); //charmement de ma node
$item_node = node_build_content($item_node); //construction du contenu de ma node précédemment chargée
$item_desc = $item_node->field_txtaa[0]['view']; //affichage de mon champ field_txtaa
print $item_desc; ?>

Mais cela ne marche pas...J'ai pourtant suivi quelques tuto, notamment ceux de cette page (sans tenir compte de node reference ici....pour l'instant):

http://drupal.org/node/129295

Quelqu'un connait-il le moyen de fait ça ?

Version de Drupal : 

salut, je n'ai pas de te réponse à t'apporter mais une suggestion. Tu devrais faire un

<?php
 print_r
($item_node); exit;
?>

afin d'être sûr que tu as bien chargé le node 270. Si tu vois que le champs apparait bien dans le print_r, c'est que tu t'y prends mal pour accéder au champs, et écris ici l'affichage de ton champs, on verra mieux !

Bon courage

oui...ça m'affiche bien mon champ dans le print_r, donc je m'y prend mal !!

Voici mon code :

<?php
$item_node
= node_load(270); //charmement de ma node
$item_node = node_build_content($item_node); //construction du contenu de ma node précédemment chargée
$item_desc = $item_node->field_txtaa[0]['view']; //affichage de mon champ field_txtaa
print $item_desc; ?>

<?php
print_r
($item_node); exit;
?>

Voici ce que ça m'affiche avec ce code :

stdClass Object ( [nid] => 270 [type] => aatest [language] => fr [uid] => 1 [status] => 1 [created] => 1276285805 [changed] => 1276535815 [comment] => 0 [promote] => 0 [moderate] => 0 [sticky] => 0 [tnid] => 0 [translate] => 0 [vid] => 1253 [revision_uid] => 1 [title] => AAtest 1 [body] =>

zegvufygfgz
[teaser] => zegvufygfgz
[log] => [revision_timestamp] => 1276535815 [format] => 2 [name] => admin [picture] => [data] => a:1:{s:13:"form_build_id";s:37:"form-042da911450a474e097c991beec1a96a";} [field_txtaa] => Array ( [0] => Array ( [value] => Soumis à la pression internationale, Israël a finalement annoncé la création d'une "commission publique indépendante" avec participation étrangère, comme le demandait Washington, pour enquêter sur son raid contre une flottille pour Gaza. Cette commission israélienne aura pour mission d'"enquêter sur les aspects relatifs à l'action entreprise par l'Etat d'Israël pour empêcher des navires d'atteindre les côtes de Gaza", selon un communiqué du bureau du premier ministre Benyamin Nétanyahou. [format] => 2 [safe] =>

Soumis à la pression internationale, Israël a finalement annoncé la création d'une "commission publique indépendante" avec participation étrangère, comme le demandait Washington, pour enquêter sur son raid contre une flottille pour Gaza. Cette commission israélienne aura pour mission d'"enquêter sur les aspects relatifs à l'action entreprise par l'Etat d'Israël pour empêcher des navires d'atteindre les côtes de Gaza", selon un communiqué du bureau du premier ministre Benyamin Nétanyahou.
) ) [og_groups] => Array ( [256] => 256 ) [og_groups_both] => Array ( [256] => IME du Jeu de Paume ) [taxonomy] => Array ( ) [files] => Array ( ) [build_mode] => 0 [readmore] => [content] => Array ( [body] => Array ( [#value] =>

zegvufygfgz
[#weight] => 0 ) [field_txtaa] => Array ( [field] => Array ( [#type] => content_field [#title] => texteAA [#field_name] => field_txtaa [#access] => 1 [#label_display] => above [#node] => stdClass Object RECURSION [#teaser] => [#page] => [#context] => full [#single] => 1 [items] => Array ( [0] => Array ( [#item] => Array ( [value] => Soumis à la pression internationale, Israël a finalement annoncé la création d'une "commission publique indépendante" avec participation étrangère, comme le demandait Washington, pour enquêter sur son raid contre une flottille pour Gaza. Cette commission israélienne aura pour mission d'"enquêter sur les aspects relatifs à l'action entreprise par l'Etat d'Israël pour empêcher des navires d'atteindre les côtes de Gaza", selon un communiqué du bureau du premier ministre Benyamin Nétanyahou. [format] => 2 [safe] =>

Soumis à la pression internationale, Israël a finalement annoncé la création d'une "commission publique indépendante" avec participation étrangère, comme le demandait Washington, pour enquêter sur son raid contre une flottille pour Gaza. Cette commission israélienne aura pour mission d'"enquêter sur les aspects relatifs à l'action entreprise par l'Etat d'Israël pour empêcher des navires d'atteindre les côtes de Gaza", selon un communiqué du bureau du premier ministre Benyamin Nétanyahou.
[#delta] => 0 ) [#weight] => 0 [#theme] => text_formatter_default [#field_name] => field_txtaa [#type_name] => aatest [#formatter] => default [#node] => stdClass Object RECURSION ) ) ) [#weight] => 31 [#post_render] => Array ( [0] => content_field_wrapper_post_render ) [#field_name] => field_txtaa [#type_name] => aatest [#context] => full ) [#pre_render] => Array ( [0] => content_alter_extra_weights ) [#content_extra_fields] => Array ( [title] => Array ( [label] => Titre [description] => Formulaire du module node. [weight] => -5 ) [body_field] => Array ( [label] => Corps [description] => Formulaire du module node. [weight] => 0 [view] => body ) [revision_information] => Array ( [label] => Informations sur les révisions [description] => Formulaire du module node. [weight] => 20 ) [menu] => Array ( [label] => Paramètres du menu [description] => Formulaire du module menu. [weight] => -2 ) [path] => Array ( [label] => Paramètres de chemin [description] => Path module form. [weight] => 30 ) [attachments] => Array ( [label] => Fichiers attachés [description] => Formulaire du module upload. [weight] => 30 [view] => files ) ) ) )

esaie de mettre 'value' à la place de 'view' parceque dans le print_r affiché, y'a rien à ['view']. Le hic, si ça fonctionne c'est que je ne suis pas sûr qu'il affichera le texte formaté en html, mais peut-être que tu en as pas besoin ?

OK MERCI ca marche !!!!!!

j'ai effectué la modification que tu m'as dit et ca m'affiche le contenu de mon champ qui provient d'un autre type de contenu !! voici mon code (bien sûr j'ai enlevé le print_r pour que ça marche) :

<?php
$item_node
= node_load(270); //charmement de ma node
$item_node = node_build_content($item_node); //construction du contenu de ma node précédemment chargée
$item_desc = $item_node->field_txtaa[0]; //affichage de mon champ field_txtaa
print $item_desc['value']; ?>

Encore un grand merci pour tes explications !!!

PS: Juste une petite question : c'est quoi alors la vraie différence entre ['view'] et ['value'] ??

Coool.

Je ne sais pas quelle est la différence entre view et value. Mais je crois que value enlève le formatage, j'en suis pas sûr. Comme toi, j'ai fait un print_r ! Mais il existe une fonction qui récupère le formatage, je l'avais trouvé à l'époque !

Daccord !

Merci pour tout, maintenant avec l'aide que tu m'as apporté, je peux m'atteler à essayer d'afficher des champs mais cette fois-ci via NodeRéférence !!! :)

Et si tu retrouves ta fameuse fonction, je suis preneur !!

Merci

Oui j'ai un champ CCK fichier/image.

Le truc c'est que cette image variera donc il n'est pas possible de l'appeler en dur...
Sinon oui Chu, c'était la bonne solution pour un appel en dur, je viens de la tester.

Haha !!!
Chui dans de beaux draps !!! non mais sérieux ca marche nikel avec les champs texte et pas les champs images ou datestamp...enfin tout ce qui touche pas au texte marche pas... Doit bien yavoir un moyen !!!

mon code :

<?php foreach ((array)$field_ref_presta as $item) { ?>   <?php
$item_nid
= $item['nid'];
$item_node = node_load($item_nid);
$item_node = node_build_content($item_node);

$item_desc1 = $item_node->field_img_etab[0];
$item_desc2 = $item_node->field_adr_etab[0];
$item_desc3 = $item_node->field_cp_etab[0];
$item_desc4 = $item_node->field_ville_etab[0];
$item_desc5 = $item_node->field_date_ouverture[0];
$item_desc6 = $item_node->field_nbre_places[0]; ?>

<?php
print $item_desc1['value'];  
print
$item_desc2['value'];   
print
$item_desc3['value'];   
print
$item_desc4['value'];   
print
$item_desc5['value'];   
print
$item_desc6['value'];
?>
       
<?php } ?>

en sachant que field_img_etab est mon champ image.

Tu sais, t'as une solution bourrin et rapide : tu créé une vue qui récupére exactement ce que t'as besoin comme t'as besoin. Tu récupère le code sql que t'as besoin. tu la place dans ton template.php. Tu appelles cette fonction plutôt que ton node_load() et tu accèdes aux champs que t'as besoin.

Sinon à coup de print_r() tu verras bien les champs image apparaitre et comment le récupérer, c'est comme ça que j'ai procédé ! Normalement ça doit passer que ce soit des champs image/texte ou autre. Vérifie bien à ce niveau !

Utilise abondamment la fonction print_r() pour étudier la structure des nodes et trouver les informations à afficher en fonction des champs, relis ce fil, relis la doc PHP si nécessaire, mais tu as tous les éléments suffisants pour y arriver...

---edit---
drupal974 est trop rapide pour moi

Bon OK j'arrive à importer mon image.

Le code pour les intéressés :

<?php foreach ((array)$field_ref_presta as $item) { ?>   <?php
$item_nid
= $item['nid'];
$item_node = node_load($item_nid);
$item_node = node_build_content($item_node);

$item_desc1 = $item_node->field_img_etab[0];
$item_desc2 = $item_node->field_adr_etab[0];
$item_desc3 = $item_node->field_cp_etab[0];
$item_desc4 = $item_node->field_ville_etab[0];
$item_desc5 = $item_node->field_date_ouverture[0];
$item_desc6 = $item_node->field_nbre_places[0]; ?>

<div style="width: 250px; height: 75px; float: left;"><?php echo '<img width="250" src="/'.$item_desc1['filepath'].'">'; ?></div>

<div><?php print $item_desc2['value'];    
print
$item_desc3['value'];    
print
$item_desc4['value'];   
print
$item_desc5['value'];    
print
$item_desc6['value']; ?>
</div>
<?php } ?>

Le truc c'est que maintenant, mon image est affiché en grand et non avec mes paramètres ImageCache que je lui avait attribué (crop et scale).

Là je ne vois pas du tout comment ajouter ca a mon image surtout que l'appel d'image cache sur l'image est définit par [#theme] lorsque j'affiche avec print_r.....

C'est pour afficher les champs d'un contenu avec node référence. sauf que moi je ne veux pas tous les champs ou que le titre, je veux pouvoir en sélectionner un certain nombre moi même et les positionner comme je le souhaite.
En gros pour une contribution appartenant à un établissement, les informations de l'établissement lié (avec NodeRéférence) doivent apparaître en haut du contenu affiché.

Je ne peux pas faire ça avec view puisque je veux pouvoir placer les éléments librement, et donc je dois passer par Contemplate.

Pourquoi, il y aurait une méthode plus simple ??

En fait, ta méthode peut fonctionner dans l'absolu, mais à mon avis, tu devrais chercher l'erreur à partir du code que tu utilises là :

<?php
 $item_node
= node_load(270); //charmement de ma node
$item_node = node_build_content($item_node); //construction du contenu de ma node précédemment chargée
$item_desc = $item_node->field_txtaa[0]['view']; //affichage de mon champ field_txtaa
?>

Que tu passes par contentmachin ou que tu définissent un fichier de template (node-type-de-content.tpl.php, j'aurai privilégié ici mais ça revient au même finalement), ton fichier de template te sert qu'à positionner tes éléments.

Maintenant ton pb vient du fait que tu n'arrives pas à charger comme tu le souhaites, ton node. Tu devrais faire des print_r, bien annalyser le contenu qui s'affiche pour ensuite le récupérer et voir s'il n'existe pas d'autres fonctions.

Si ce n'est pas le cas, créé ta requête pour récupérer le node toi même, en utilisant le module view pour récupérer les champs que t'as besoin (il affichera la requêtte), tu la recopie et tu l'insère dans une fonction.

Bon courage

Justement j'utilise Organic Group et il ne n'est pas possible d'afficher en fonction du groupe avec view (j'ai pourtant tout essayé avec les relations et les arguments) donc c'est pour cela que j'ai opté pour Contemplate.