Récupérer la valeur d'un jeton pour un champ liste

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,

À l'origine, je cherchais à faire écrire ce bout de php,

$valeur = "[node:field_list_resistance]";
switch($valeur){
...
  case "moyenne" :
    print '<span>mauvaise</span><span>faible</span><span class="active">moyenne</span><span>bonne</span>';
  break;
  default : "blablabla";
}

Mais ceci ne fonctionne pas...
le switch sur $valeur, qui pourtant est bien égal à "moyenne",
n'affiche que la valeur de default. En gros "moyenne"($valeur) est différent de "moyenne"(switch)...

Problème de formatage ??

Du coup, je me dis que les chiffres seront sûrement plus manipulables.
Et je cherche désespérément le jeton
pour afficher la valeur de la clé sélectionnée d'un champ "liste"
que j'ai intitulé : résistance (field_list_resistance).

Les valeur de mon champ sont :

0|mauvaise
1|faible
2|moyenne
3|bonne

Par exemple, si l'on a sélectionné "moyenne" dans la liste,
je souhaiterais récupérer/utiliser le jeton qui afficherait "2" et non "moyenne".
Dans la liste de jetons, je trouve bien [node:field_list_resistance],
mais rien du genre [node:field_list_resistance:key-value] ou truc du genre...

J'espère être clair. Pas évident.
Merci d'avance pour les idées éventuelles,
Fabien

Forum : 
Version de Drupal : 

$valeur est égale "[node:field_list_resistance]" pas "moyenne", dans votre code. D'ou la valeur par defaut. C'est la valeur de votre token qui pourrait être égale a "moyenne".

Merci pour le retour.

Oui, c'est ce que je faisais au début.
Mais lorsque j'écris (pour le test):

<?php
//...
if([node:field-list-resistance] == "moyenne") print 'actif';
else print
'pas actif';
//...
//OU
//...
if("[node:field-list-resistance]" == "moyenne") print 'actif';
else print
'pas actif';
?>

Dans le premier cas, j'obtiens une erreur (mode php-code) :

Parse error: syntax error, unexpected '[' in /homez.94/rougier/www/test/modules/php/php.module(80) : eval()'d code on line 3

Et dans le deuxième, effectivement il considère le jeton comme une chaîne.
D'où après les essais de passer par une variable, pour essayer de "traiter" le jeton...

Je ne comprend pas pourquoi le jeton ne passe pas...

Bonsoir,

Tu peux peut-être utiliser l'objet $node à la place d'un token.
Je te conseille d'installer et d'activer le module devel afin de pouvoir utiliser la fonction dpm() qui permet de visualiser très rapidement un tableau ou un objet passé en paramètre.

Dans ton cas, il me semble que c'est : $node->field_list_resistance ...

Cordialement,

J'ai fait plusireurs tests, mais rien de concluant.
La variable $node est-elle accessible de partout ?
Lorsque dans mon champ de code php (via Display Suite), je fais :

<?php
print_r
($node);
?>

Rien. Juste l'erreur :
Undefined variable: node dans eval() (ligne 2 dans .../modules/php/php.module(80) : eval()'d code).
?

Et sinon, dans Devel, je ne vois pas la fonction dpm().

Bonne soirée,
Fabien

En revanche, si je charge le noeud avant, je récupère bien les infos qui m'interressent :

<?php $node=node_load(55);
print_r($node->field_list_resistance); ?>

Et j'en reviens au même soucis...
Si je fais :

<?php
$node
=node_load([node:nid]);
print_r($node->field_list_resistance);
?>

//Affiche : Parse error: syntax error, unexpected '[', expecting ')' in .../modules/php/php.module(80) : eval()'d code on line 2

Je deviens fou...

Cette variable existe dans node.tpl.php ou par exemple dans la fonction hook_preprocess_node();

Si devel est activé, tu remplaces ton print_r par dpm (et une fois loggué sur ton site en tant qu'admin tu verras l'objet node et ce qu'il contient.

En fait, le problème est que depuis la zone d'édition "champ de code" de Display Suite,
en mode php-code, la variable $node n'est pas accessible.
Si j'utilise le template "ds-2col-stacked--node-essences.tpl.php", qui est bien celui que je dois utilisé, là $node est dispo.
Si je fais (dans ce template) :
<?php $resistance = $node->field_list_resistance['und'][0]['value']; ?>
J'obtiens bien la valeur à tester.
Maintenant, si je reviens à mon champ de code dans Display Suite :
<?php print $resistance; ?>
Ceci n'affiche l'erreur : Undefined variable: resistance dans eval()...
Évidemment fichiers copiés, cache vidé, etc.

Donc comment rendre disponible cette variable ?
Là, ça me dépasse. La nuit porte conseil...

Cordialement,
Fabien