Submitted by rancky on
Bonjour,
je découvre Drupal depuis quelques jours et je me penche plus particulièrement sur le système de template.
J'ai créé des types de contenus, des contenus et des requêtes avec views pour afficher ces contenus. Les requêtes m'ont généré des blocks que j'utilise à ma guise sur mon site. Les contenus s'affichent, ça marche.
A ce point, j'aimerais savoir déjà si c'est la bonne méthode d'utilisation de views.
Le problème qui se pose ensuite, c'est le code envoyé par Views. J'aimerais récupérer seulement la valeur de chaque champ CCK alors que le système en l'état m'envoie la variable "$content".
Comment faire ?
Soit tu dévclare une view
Permalien Soumis par zmove le 28 Août, 2008 - 16:25
Soit tu dévclare une view en liste ou en tableau et tu choisir chaque champ dans le menu de view prévu à cet effet.
Soit tu affiche une "unformatted" view, et tu récupère la valeur de tes champs dans ton node.tpl.php.
(je te conseil le module devel et contemplate pour trouver comment récupérer la valeur d'un seul champ dans ton node.tpl.php).
Ok, j'avais plus ou moins
Permalien Soumis par rancky le 28 Août, 2008 - 16:40
Ok,
j'avais plus ou moins appréhender cette notion de "unformatted" mais je comprends encore pas très bien à quoi correspond chaque mode (Grid, Liste, Tableau, Unformatted).
Est-ce que le module contemplate est indispensable ? Car il me semble que Views offre des options de template assez complètes :
A quoi correspondent ces templates ? Est-ce que je peux les utiliser pour obtenir la valeur des champs ?
Mon contenu est affiché par
Permalien Soumis par rancky le 28 Août, 2008 - 18:13
Mon contenu est affiché par un bloc et j'ai l'impression que "contemplate" n'influe pas du tout sur le contenu de ce bloc.
De toute façon, je vois pas comment faire car le contenu disponible dans "$content" est déjà formaté avec des balises qui ne m'intéressent pas du tout...
Comment faire pour que Views n'envoie que la valeur des champs sans balises superflues ?
Contemplate ne te sera utile
Permalien Soumis par zmove le 29 Août, 2008 - 08:33
Contemplate ne te sera utile que si tu as une views "unformatted", c'est à dire qu'elle load tout simplement le contenu de node.tpl.php en gros.
Contemplate te permet de récupérer les variable séparément des unes des autres. Par défaut, drupal te fait déjà un mix de ces variables en te fournissant une variable $content.
Mais tu peux avoir chaque champ séparément avec un code du genre
L'exemple ci dessus te sortirai en gros l'image de ton node.
Contemplate permet de te lister toutes ces différentes variables, tu peux très bien faire aussi un
Ce qui te sort tout ton objet node, ca revient au même.
Après le but, c'est de virer $content dans ton node.tpl.php et de mettre chaque champ individuel que tu veux les uns apres les autrs.
Mon contenu est affiché par
Permalien Soumis par rancky le 29 Août, 2008 - 09:35
Mon contenu est affiché par un bloc. Donc print $node->content['field_image'][0]['value'] ne fonctionnera pas il me semble.
Effectivement, j'aimerais avoir dans mes nodes et dans mes blocs chaque champ au lieu de $content.
Est-ce que node.tpl.php est utilisé par les bocks ? Non, à priori ?
Je comprends pas dans quel
Permalien Soumis par rancky le 29 Août, 2008 - 16:18
Je comprends pas dans quel fichier template je dois appeler les champs.
block.tpl.php gère l'affichage de mon bloc mais quel fichier pourrait gérer les champs du node affiché par mon bloc ?
Ok, je viens de trouver
Permalien Soumis par rancky le 29 Août, 2008 - 16:32
Ok,
je viens de trouver comment envoyer le noeud à travers le bloc.
Dans la configuration de la view, il faut choisir la valeur "NODE" pour le paramètre "Row style".
On peut ensuite accéder à chaque champ.
Pas très évident comme concept dans la mesure où l'autre choix pour "Row style" est "FIELD"...
Je parle un peu tout seul mais j'espère que ça profitera à d'autres.
Bonsoir, Cette discution
Permalien Soumis par cloud le 11 Septembre, 2008 - 17:06
Bonsoir,
Cette discution m'a mise sur une piste pour éditer des templates, mais j'aurais besoin d'aide pour éclaircir quelques points :
actuellement j'essaye de faire fonctionner un site anciennement sous D5 vers D6,
et ne peux plus utiliser contemplate à cause d'un bug.
Donc je cherche à modifier la sortie de mes blocks de views directement avec les fichiers templates.
Comme vu dans les précédents posts, j'ai mis la view en "unformated", row style "node"...
et j'ai un fichier block-views-nomdemavue.tpl.php qui est totalement ignoré :
quand je fais un aperçu de la vue j'ai tout le node affiché en entier,
mais quand le block est affiché en page d'accueil, ça n'affiche que la partie "corps" du contenu...
je voudrais savoir si au final node.tpl.php à une influence sur l'apparence du block, et si possible comment le "remanier"..?
Bonjour, si tu choisis row
Permalien Soumis par rancky le 11 Septembre, 2008 - 17:28
Bonjour,
si tu choisis row style "node" dans ta requête Views, ton block va envoyer le node. C'est donc node.tpl.php qui va le prendre en charge et non block.tpl.php.
J'ai mis du temps à piger ça mais je ne sais toujours pas si c'est la bonne méthode car en choisissant row style "node", tu ne peux plus sélectionner les champs dans la requête. Et le block t'envoie tout le node alors que tu n'as pas forcément besoin de tous les champs.
Le vrai problème, c'est tout le code intempestif envoyé par Views (ou généré par Drupal, je ne sais pas).
Ok, merci pour ta
Permalien Soumis par cloud le 11 Septembre, 2008 - 23:24
Ok, merci pour ta réponse!
donc à partir de là le moyen doit être comme avait posté plus haut zmove :
"Après le but, c'est de virer $content dans ton node.tpl.php et de mettre chaque champ individuel que tu veux les uns apres les autres."
...maintenant je comprends pourquoi!
reste à faire un node.tpl.php "propre" bon, là c'est pas gâgné, mais bon faut se lancer :)
Je ne pense pas qu'il soit
Permalien Soumis par rancky le 12 Septembre, 2008 - 09:32
Je ne pense pas qu'il soit possible de virer $content. En revanche, lorsque tu reçois le node, tu peux effectivement accéder à tous les champs individuellement :
- soit en listant ton objet avec print_r($node) et en appelant la bonne propriété de l'objet node
- soit en utilisant contemplate pour récupérer le print des propriétés
Une chose est sûre, il ne faut pas utiliser contemplate pour stocker tes templates. Sinon, tu vas te retrouver avec plusieurs niveaux de templates (en BDD et en .tpl.php) et la maintenance de ton site sera complexe.
Voilà ce que j'ai compris. Mais je cherche toujours comment faire en sorte que Views ne m'envoie que certains champs avec leur valeur nue, sans tout ce foutu code html.
bon, alors pour gérer
Permalien Soumis par cloud le 12 Septembre, 2008 - 17:12
bon, alors pour gérer l'affichage des parties "teaser" des nodes sur dupal 6x, et sans contemplate, on peut faire comme ça :
créer un node-nom_de_mon_type_de_contenu.tpl.php
en s'inspirant de ça : http://drupal.org/node/53464
et en suite pour avoir une view qui liste les nodes avec les teasers en html tout propre qu'on a mis en forme comme on veut dans notre template, il faut créer une view en row style "node", et ça suffit!
bon c'est peut être pas la meilleur méthode, vu qu'on est quand même obligé de créer un (ou plusieurs) nouveau(x) fichier(s) .tpl.php , mais en tout cas, ça marche :)
Effectivement, on peut
Permalien Soumis par rancky le 14 Septembre, 2008 - 18:26
Effectivement, on peut utiliser node-nom_de_mon_type_de_contenu.tpl.php pour créer des templates spécifiques et c'est d'ailleurs le principe de PHPtemplate donc il ne faut pas s'en priver et je pense que c'est la bonne méthode.
En revanche, je cherche comment différencier 2 templates pour un même contenu dans l'organisation suivante :
- page d'accueil : le résumé du node avec une sélection de champ et le lien vers le node complet
- page du node : le node complet
Dans ces 2 cas, node-nom_de_mon_type_de_contenu.tpl.php s'applique.
Comment dois-je nommer le template du contenu résumé en page d'accueil ?
si j'ai bien compris, tu
Permalien Soumis par cloud le 16 Septembre, 2008 - 15:06
si j'ai bien compris, tu n'utilise ta vue qui affiche la partie résumé de tes nodes qu'en page d'accueil?
donc à ce moment là un seul template de type node-nom_du_type_de_contenu.php devrait suffire, donc il ressemblerait à ça :
après, comme tes vues sont en mode block, tu peux aussi jouer avec l'affichage de templates de blocks : http://drupal.org/node/190815
pour ma part, j'ai utilisé un template du type block-nom_de_ma_region.tpl.php, ça fonctionne bien, et du coup le html est minimisé uniquement à ce qu'il me faut :)
j'èspère t'avoir donné une piste...
boon courage
Finalement, j'ai utilisé le
Permalien Soumis par rancky le 16 Septembre, 2008 - 15:23
Finalement,
j'ai utilisé le template fournit par la vue pour le bloc en page d'accueil (node-view-last_decouvrir.tpl.php) et j'utilise ensuite le node-nom_du_type_de_contenu.php pour la page de suite.
Je ne suis pas certain que les templates block fonctionnent lorsqu'on choisit row style : node.
Peux-tu me confirmer cette info ?
ça fonctionne aussi avec
Permalien Soumis par cloud le 16 Septembre, 2008 - 17:08
ça fonctionne aussi avec row style node, à priori l'important est que la view soit disponible en mode block, et du coup les templates pour blocks s'y appliquent aussi... (j'ai utilisé le thème zen comme base pour créer mon thème)
Mais du coup, il faut
Permalien Soumis par rancky le 16 Septembre, 2008 - 18:29
Mais du coup, il faut utiliser $node->nom_de_la_variable dans block-nom_du_bloc.tpl.php et pas $block->nom_de_la_variable ?
ça je ne sais pas si on
Permalien Soumis par cloud le 17 Septembre, 2008 - 15:02
ça je ne sais pas si on peut récupérer les variables comme ça. J'ai mis en forme la sortie des données dans le template du node, et dan sle template de block, j'ai juste mis en forme le titre (donc variable habituelle pour les templates block - $block->subject ) et apres : print $block->content pour ressortir le contenu du teaser du node.