Dans Drupal 7, vous pouvez rendre un champ dans un tpl.php
fichier comme celui-ci:
Mais cela l'imprime avec son étiquette et son HTML. Existe-t-il un moyen d'obtenir uniquement la valeur brute du champ.
Je sais que vous pouvez faire ce qui suit:
Cependant, tout cela implique des étapes supplémentaires. Je me demandais s'il y avait un moyen de le faire directement dans le fichier node.tpl.php. De cette façon, tous les changements sont contenus dans un seul endroit. (De plus, si vous changez les thèmes en un qui nécessite les étiquettes, vous devez revenir dans l'interface d'administration et les réactiver).
la réponse de wolffer-east répond aux objectifs de la question d'origine:
Cependant, le code est assez complexe pour un fichier node.tpl.php qui ne doit contenir que des instructions simples PHP.
Donc à la fin, je l'ai retravaillé comme suit. Dans mon modèle PHP, je mets ce qui suit:
function print_field($field_name) {
if (arg(0) == 'node' && is_numeric(arg(1))) {
// Get the nid
$nid = arg(1);
// Load the node if you need to
$node = node_load($nid);
}
$field= field_get_items('node', $node, $field_name);
print $field[0]['value'];
}
C'est la même chose que wolffer-east, sauf qu'il charge le nœud.
Dans mon fichier de noeud, je peux ensuite utiliser ce qui suit:
<?php print_field('field_body_text') ?>
Cela rend le champ sans étiquettes ni HTML, mais toujours propre.
Une version plus avancée est la suivante:
Dans la fonction template.php print_field ($ field_name, $ format = 'safevalue') {
if (arg(0) == 'node' && is_numeric(arg(1))) {
// Get the nid
$nid = arg(1);
// Load the node if you need to
$node = node_load($nid);
}
$field= field_get_items('node', $node, $field_name);
if ($format = 'url') {
print file_create_url($field[0]['uri']);
} else {
print $field[0][$format];
}
}
Dans node.tpl.php
Vous pouvez échanger "nom de fichier" avec l'un des éléments suivants:
[*] s'applique uniquement aux champs contenant des fichiers/images
Le seul inconvénient est qu'il affiche le message d'erreur suivant:
Remarque: index non défini: safevalue dans print_field () (ligne 16 de template.php)
Je ne sais pas comment résoudre ce message d'erreur, mais je suppose que c'est une question distincte.
Si vous voulez juste la valeur d'un champ donné, ce sera dans l'objet $ node dans votre fichier node.tpl.php (ou node-type.tpl.php).
Normalement, c'est sous quelque chose comme:
$node->field_name['und'][0]['value']
Vous êtes sur la bonne voie!
Plutôt qu'un fichier de modèle de nœud, le balisage individuel d'un champ est contrôlé par son fichier field.tpl.php. Vous pouvez contrôler l'affichage d'un champ de manière très granulaire en en créant un personnalisé - copiez l'implémentation par défaut de votre thème, nommez le champ de copie - field-name.tpl.php et supprimez tout le balisage en excès.
Vous voudrez peut-être essayer
<?php print render($content['field_your_field']); ?>
dans node.tpl.php combiné avec des modules de modes de visualisation de contexte et d'entité ou simplement modifier les paramètres d'affichage du champ dans la configuration du type de contenu
Si vous êtes dans le modèle de nœud, vous pouvez charger le champ, puis obtenir le contenu du champ chargé. Consultez la documentation field_get_items pour plus d'informations. En bref, il renvoie les valeurs souhaitées dans la langue actuelle.
$field_name = 'your_field_here';
$field= field_get_items('node', $node, $field_name);
print $field[0]['value']
devrait le faire. Il renverra un élément pour chaque élément s'il s'agit d'un champ à valeurs multiples. Ils sont accessibles via $field[$key]['value']