Submitted by prosk on
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!
Pour info, si tu utilises
Permalien Soumis par webastien le 2 Juillet, 2008 - 23:15
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
Permalien Soumis par prosk le 3 Juillet, 2008 - 09:30
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
Permalien Soumis par prosk le 3 Juillet, 2008 - 09:41
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?
Non, tu es dans le vrai ;)
Permalien Soumis par webastien le 3 Juillet, 2008 - 13:23
Non, tu es dans le vrai ;)
active le module views theme
Permalien Soumis par jubjub le 3 Juillet, 2008 - 15:11
active le module views theme wizard !
Ok, j'ai bein compris le
Permalien Soumis par prosk le 4 Juillet, 2008 - 11:30
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
Permalien Soumis par zmove le 4 Juillet, 2008 - 15:44
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 :
Plus d'informations ici