Comment utiliser Views PHP pour réécrire les résultats d'un champ?

7

J'utilise Views PHP pour réécrire les champs dans Views. Je peux accéder à toutes les variables MAIS celles qui ont un mode de construction. Dans mon cas, j'ai un champ Content: Node (qui peut être construit en fonction de n'importe quel affichage), qui devrait être accessible en utilisant la variable $row->nodefield. Cependant, le contenu de cette variable est toujours vide. J'ai essayé avec d'autres variables, et chaque champ avec un mode de construction ne sera pas rendu en PHP vues .

entrez la description de l'image ici

Est-ce un problème de conception ou manque-t-il quelque chose?

J'utilise Drupal 7 et Views 3

ÉDITER

L'utilisation de dpm () sur les valeurs disponibles renvoie les informations suivantes:

dpm ($ ligne)

entrez la description de l'image ici

dpm (données $)

entrez la description de l'image ici

znat
la source

Réponses:

6

Au-dessus de la section "Code de sortie", vous devez vérifier la $datavariable dans le champ "Valeur".

Habituellement, je trouve juste dpm($data)le domaine dont j'ai besoin. Vous pouvez ensuite l'enregistrer dans la $static['myvalue']variable pour l'utiliser dans le champ "Code de sortie".

C'est déroutant, mais pour une raison quelconque, si vous essayez uniquement les $row->xxxvariables dans la section "Code de sortie", elles sont vides ou définies sur le node-id.

Chance G
la source
Je vous remercie. Je suis nouveau dans ce domaine, alors pourriez-vous m'aider davantage: lorsque je copie dpm($data)dans le champ de valeur, Views renvoie un "appel à la fonction non définie dpm ()" error "
znat
D'ACCORD. DPM est une fonction devel, il ne fonctionnera pas si vous n'avez pas le devel module installé. Installez-le ou utilisez simplement print_r ($ data).
Chance G
Je n'ai trouvé aucun contenu pertinent. (voir ma modification) Tous les champs semblent nuls dans l'objet $ row. J'ai essayé d'autres variables telles que $ view ou $ handler sans succès. Le jeton [nodefield] est cependant disponible dans Rewrite Results, donc il devrait être quelque part. Une autre idée?
znat
3

Les $rowéléments Variables disponibles dans les vues sont en quelque sorte inutiles pour obtenir des valeurs de champ. Mais vous n'avez pas besoin d'utiliser noad_loadpour obtenir les données dont vous avez besoin. Tout d'abord, comme d'habitude, cachez la sortie du champ que vous souhaitez réécrire, puis dans le champ Code de sortie de votre champ PHP, vous pouvez utiliser $datacomme ceci:

<?php echo check_markup($data->field_field_body[0]['rendered']['#markup'], 'nitf_body'); ?>

Dans ce cas, je supprime les balises non autorisées et attribuées au contenu pour une utilisation dans une exportation NITF. Si vous n'êtes pas sûr de ce qu'il contient $data, vous pouvez bien sûr print_r($data)y jeter un œil.

Scott Lahteine
la source
que voulez-vous dire exactement par: "D'abord, comme d'habitude, cachez la sortie du champ que vous souhaitez réécrire"? Souhaitez-vous revenir à la case "Exclure de l'affichage" dans le champ que nous voulons réécrire?
Antonio
Oui. Vous utilisez "Exclure de l'affichage" chaque fois que vous souhaitez obtenir la valeur d'un champ et l'utiliser dans un champ personnalisé suivant.
Scott Lahteine
1
Vous pouvez utiliser $data->field_field_body[0]['raw']['value']pour obtenir la valeur brute.
user2534880
1

Conseil supplémentaire: le tableau $ data contient en effet les données brutes du nœud et peut être imprimé. Mais pour le rendre correctement, nous devons traiter les champs avec des fonctions comme field_view_field .

Druvision
la source
1

Essayez-vous de faire cela à l'intérieur des vues? Pourquoi ne pas simplement thématiser le modèle de vues lui-même au lieu d'utiliser le PHP global? Je ne sais pas si print_r fonctionnera à l'intérieur du champ d'affichage. Si c'était moi, je cliquerais simplement sur le thème -> informations, vous verrez quelque chose comme views-view-field - MyViewName.tpl.php

(modifier, clarification) Sous le dossier du thème du module de vues, copiez "views-view-field.tpl.php" puis renommez-le en "views-view-field - MyViewName.tpl.php" et placez-le dans votre dossier / templates dans votre site eux. Dans le fichier, vous verrez quelque chose comme

<?php print $output; ?> 

Vous pouvez supprimer cela et ajouter manuellement tous vos champs comme

<div class="MyPrettyTitle"><?php print $row->_field_data['nid']['entity']->title; ?></div> 
<div class="MyNodeBody">
<?php print $row->_field_data['nid']['entity']->body['und'][0]['value'];?>
</div>

etc. Ou enveloppez la sortie $ avec ce que vous voulez.

De plus, je n'ai jamais eu beaucoup de chance avec DEVEL, j'utilise toujours:

<?php print var_dump($row);?> 

Ensuite, en regardant la source de la page pour obtenir les variables. Peut-être que j'utilise mal DEVEL, mais je trouve que je peux obtenir les variables pour chaque ligne beaucoup plus facilement avec un ancien var_dump PHP classique.

DrupalMonster
la source
Cela donne des lignes en double!
user219492
0

J'ai passé deux jours pour trouver la solution. La manière la plus simple est de mettre à jour le "Module Php Views" en 7.x-2.x-dev. Le responsable a résolu ce problème dans leur version 2.x.

Vous pouvez télécharger ici (assurez-vous de télécharger 7.x-2.x-dev ): https://www.drupal.org/project/views_php

L'espoir peut aider quelqu'un.

jmu
la source
0

Vous ne devez JAMAIS stocker de code PHP dans votre base de données (et avec View PHP vous le ferez). Utilisez plutôt un crochet Vues pour modifier les résultats.

ssibal
la source
Salut @ssibal, et merci pour votre contribution. Pouvez-vous expliquer pourquoi cela devrait être évité? Cela augmenterait considérablement la qualité de votre message.
Neograph734