Récupérer les champs d'une view avec D5.7

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!

Toujours dans ma recherche de themes sur les views (Je suis repassé a Drupal5), je souhaite thémer mes teasers d'une page que j'ai créée (frontpage)

J'ai donc ajouté a la suite de mon fichier template.php cette méthode:

function theme_views_view_teasers_frontpage($view, $nodes){}

Comment peut-on récupérer simplement et de façon pas trop coûteuse les valeurs des champs que j'ai sélectionnés via ma view?

Un truc du genre $view->title si j'ai ajouté le champs (title) dans ma view etc.

Je ne veux pas faire de node_load, même si je possède le nid grâce au paramètre $nodes.

Ca serait trop coûteux je pense...
Y'a t-il une autre façon de faire?

Merci pour votre aide!

Forum : 
Version de Drupal : 

Pour info, si tu utilises node_load($nid), il y a un système de cache donc à priori tu peux y aller ;)

L'objet $view contient le paramétrage de la vue donc, $view->title t'affichera son titre, pas celui des nodes.
Sinon, j'ai la flegme de vérifier, mais il me semble que $nodes est un tableau d'objets.
Ces objets contiennent les champs des nodes que tu as spécifié dans ta vue.
Du coup, fais un print_r($nodes), tu verras la structure et l'info title y est présente, je crois par contre que ce n'est pas ->title mais ->node_title ou un truc du genre.

Ah ok!!!
Il ya du cache!!!

Ca pour une nouvelle, c'est une bonne nouvelle ;-)

Merci de ta précieuse réponse, c'est ce qu'il me manquait pour continuer!!

Merci encore!

Ok j'ai fais les tests, et pour complément d'informations pour les autres drupaleurs:

QUand on séléctionne dans le type de la vue:

teaser list

ou bien

Full nodes

:

On ne récupere dans les objets nodes que la date de création ainsi qie le nid. 5je pense que le système délegue l'affichage aux templates node.tpl.php ou node-TYPE.tpl.php on encore node-view-VIEWNAME.tpl.php, car a l'intérieur de ceux-ci, l'objet $node est construit correctement.

Quand on selectionne au contraire

list view

ou autre, on récupere les bons champs sélectionnés dans la construction de la vue!

Webastien, je me trompe?

Ok, j'ai bein compris le fonctionnement du theming des views.

Pour faire un truc un plus poussé, (et surtout plus optimisé que de parcourir des tableaux d'objets 2 fois afin de trouver le nom des champs a extraire), j'aimerais pouvoir utiliser la fonction

views_theme_field()

En fait, conanissant les champs que j'ai ajouté à ma vue, je veux les thémer individuellement SANS parcourir le tableau de tous les champs par un foreach.

On peut spécifier directement la propriété a thémer en remplaçant ça:

views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view)
par:

views_theme_field('views_handle_field', 'node_created', $fields, $field, $node, $view)
où le node_created représente la propriété à thémer.

Seul HIC, c'est le champ $field dont j'ai besoin pour utiliser la fonction correctement, et je ne peut l'obtenir qu'en faisant un foreach sur $view->field ou en faisant $view->field[0] si c'ets le premier champ à thémer...

QU'en pensez-vous, yaurai t-il un autre moyen de choisir le champs que l'on veut thémere directement?

Merci!

Plus simple et moins couteux qu'un node_load, tu peux utiliser les fonctions de thème de views, la granularité de ceux ci permet de thèmer juste un field précis :

la déclaration se fait comme cela :

<?php
function theme_views_handle_field_TABLENAME_FIELDNAME($fields, $field, $data);
?>

Plus d'informations ici