Submitted by mlo on
Bonjour,
j'ai créé un champ (texte) dans un contenu "article", et je souhaiterai afficher sa valeur dans un Javascript placé en bas de page. L'interface de Drupal est (bien) pensé pour insérer cette valeur dans le corps de la contribution mais je ne vois pas comment aller chercher cette valeur pour la placer hors de ce périmètre.
Avez-vous des infos à me transmettre ?
merci
Drupal 7 n’offre pas trop de
Permalien Soumis par benfarhat le 30 Avril, 2011 - 23:45
Drupal 7 n'offre pas trop de doc sur le theming des champs (field) ce qui est malheureux,
Donc je t'offre ce que je sais en espérant que ca t'aidera
Dans le fichier node.tpl.php
tu met ca
<?php print render($content['field_texte']); ?>
// field_texte est le nom du champ :)
ici le problème c'est que si par exemple ce champ n'existe que pour un type de contenu tu peut faire un petit test avant:
<?php if ($node->type=='TON_TYPE_DE_CONTENU'): ?>
...
...
<?php print render($content['nom_du_champ_dans_ce_type_de_contenu']); ?>
...
...
Sinon j'me suis arraché la gueule a voir comment faire ca en accédant directement à la base de donnée (si ca t'intéresse)
A mettre dans le fichier page.tpl.php (et tous les autres d'ailleurs)
imagine que tu as fait un contenu nommé article2
et que par exemple ton champ s'appelle field_ordo (pour les ordonnée)
donc voila comment faire
1 - on prend le node id (nid)
2 - on accede à la base de donné en cherchant les node de type article2 et dont le status est à 1 (publié)
3 - puis une petite jointure avec la table qui contient ton champ
généralement drupal créer une table "field_data_field_ordo"
si ton champ s'appelle tarzan tu auras donc une table qui se nomme "field_data_tarzan" (en principe :)
4 - on prend la valeur et on l'affiche
// print arg(1) ; <-- si tu veut afficher le node id
$nodeid = (arg(0) == 'node' && is_numeric(arg(1)))?arg(1):FALSE;
['#form_builder_token'];
$type="article2"; /* nom du contenu pour la requete /
$status=1; / les noeuds publiés /
$query = db_select('node', 'n');
$query->addField('n', 'nid');
$query->addField('n', 'title');
$query->condition('n.type', $type, 'LIKE');
$query->condition('n.status', $status);
$query->condition('n.nid', $nodeid); / la on insère le nid /
$query->leftjoin('field_data_field_ordo', 'o', 'n.nid = o.entity_id'); / la tu change avec le nom de la table /
$query->addField('o', 'field_ordo_value'); / pareil /
$result = $query->execute();
on récupère la valeur /foreach ($result as $row) { /
print $row->field_ordo_value; / et la je l'affiche toi tu le mettra dans ton javascript */
}
et si tu prend un plaisir fou a te plonger dans les données du genre dump de drupal
essai donc ca
$nodeid = (arg(0) == 'node' && is_numeric(arg(1)))?arg(1):FALSE;
foreach ($page['content']['system_main']['nodes'][$nodeid]['field_ordo'] as $key => $val) echo $key .'>>'.$val.'
';
et la c'est un tableau multidimensionnel tu peut faire des retour en arrière ou en avant (en avant il faut que ce soit un array
exemple: foreach ($page['content']['system_main']['nodes'][$nodeid]['field_ordo'] as $key => $val) echo $key .'>>'.$val.'
';
en arrière tu enleve juste le dernier crocher
par exemple
foreach ($page['content']['system_main']['nodes'] as $key => $val) echo $key .'>>'.$val.'
';
voili voilou :) merci à toi et j'espère que ca t'aidera
Cordialement
______________________________________ Benfarhat Elyes
merci pour cette longue et
Permalien Soumis par mlo le 2 Mai, 2011 - 14:07
merci pour cette longue et intéressante réponse. Je comprends mieux l'articulation de la BDD, j'ai pu récupérer ma valeur !
Effectivement le theming est peu documenté, en tout cas en français.
merci encore
++