Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Personnaliser l'affichage de mes types de contenu

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.

Salut,

j'ai déjà fait pas mal de recherches sur les moyens de personnaliser le rendu HTML de mes types de contenu, créés avec CCK.

Les moyens que j'ai vus, par ordre de souplesse :

  1. Utilisation de l'onglet "Affichage des champs" dans l'édition d'un type de contenu dans le module CCK.
  2. réécriture du template en créant un fichier "node-typedecontenu.tpl.php" dans le thème courant.
  3. extension du système précédent, par l'utilisation du module contemplate.

Selon moi, la solution 1, trop basique, ne permet pas de faire grand chose. A l'inverse, les solution 2 et 3 sont très riches, mais malheureusement trop complexes, elles impliquent l'écriture de pas mal de code, elles nécessitent des compétences de développeur php, au moins basiques, associées à un grand plongeon dans les méandres de la doc de l'API Drupal.

Par contre, une autre approche, qui m'a paru vraiment pertinente, c'est ce que propose le module views, quand le style de ligne est "Champs" : on sélectionne les champs, on personnalise la sortie, on reformate, on modifie le rendu html, etc. Tout cela sans la moindre ligne de code php.

Malheureusement, sauf erreur de ma part, le module views n'est pas fait pour ça, et s'il permet de bien personnaliser l'affichage d'un liste de noeuds, il ne peut plus rien faire quand il s'agit d'afficher un noeud en particulier.

Vous confirmez ce malheur ? Vous ne pensez pas qu'un module permettant les mêmes personnalisations d'affichage que ce que "views" permet, mais appliqué à des noeuds (affichage complet, teaser, et RSS) serait vraiment intéressant ? (à moins que ça n'existe déjà ? Mais j'en doute...)

Merci d'avance pour vos commentaire ;-)

Version de Drupal : 

Si ça peut t'aider:

De mon côté, j'utilise le module Contemplate pour récupérer le contenu intégral de mon type de contenu, puis je créer un template spécifique pour ma node (node-manode.tpl.php) à partir du fichier node.tpl.php.

Ensuite, je remplace la variable $content du fichier manode.tpl.php par le contenu du code généré par Contemplate pour agir sur ce que je veux (styles, scripts,variables CCK...).

Je ne trouve pas que ce soit si bricolage que ça, tout est "proprement" rangé dans ton dossier de theme. Enfin, c'est une question de point de vue :).

Et puis pour moi views n'est pas vraiment fait pour faire du theming de node.

En tout cas, je galère, avec le templating :(

Par exemple : j'ai un champ CCK de type Datetime, utilisant la possibilité de définir une période (date de début et date de fin, donc). Par défaut cette période est écrite simplement "Date déb - Date fin". Comment gérer ça en mode "template" ?

Dans mon fichier node-experience.tpl.php (si vous suivez, mon type de contenu est donc "experience"), j'ai tenté la chose suivante :

<?php
 
  $date_raw_begin
= $node->field_xp_dates[0]['value'];
 
$date_raw_end   = $node->field_xp_dates[0]['value2'];
 
//Format_date wants a date object, so create one
 
$date_object_begin = date_make_date($date_raw_begin);
 
$date_object_end   = date_make_date($date_raw_end);
 
//Long is set up the way you want at /admin/settings/date-time/formats
 
$formatted_date_begin = date_format_date($date_object,'long');
 
$formatted_date_end   = date_format_date($date_object,'long');

  echo (
'De ' + $formatted_date_begin + ' à ' + $formatted_date_end)
?>

Salut

Je suis pas vraiment d'accord avec toi.

Je suis graphiste et une des meilleures raisons pour laquelle je suis passé sur Drupal c'est les moyens de personnalisations graphiques qu'il offre!
Absolument pas besoin de connaitre Php pour faire déjà des choses parmi les plus fantaisistes, seule une bonne connaissance en CSS/HTML fera l'affaire.

Il ne faut pas considérer contemplate comme une extension du système de templating mais comme un outil et s'en servir exactement comme s'en sert Marvine, autrement le code que tu utiliseras sera stocké en base de données et non dans des fichiers ce qui est plus propre, plus conventionnel et qui n'a rien à voir avec du "bricolage".

View quand à lui offre des outils de templating très puissant, lorsque tu cliques sur "theme:informations" (réglages présent sur chaque view) view te propose une liste de fichiers tpl.php à copier dans ton repertoire de thème puis à personnaliser. La suggestion s'applique aussi sur ces fichiers ce qui fait que tu peux non seulement créer un style propre à une vue ou à un de ses champs mais l'appliquer seulement sur une région, un bloc, une page, etc..
En plus de fournir ce mécanisme, view fournit aussi des noms de classe css que tu peux repérer avec firebug par exemple et réutiliser directement dans ton syle.css

Et je ne parle pas des dizaines de modules existants te permettant encore pardessus tout ca de modifier l'affichage de tes contenu...

Le templating de Drupal est puissant et son apprentissage ne se fera pas en claquant des doigts, mais en aucun cas limité ou pauvre. Il gagne vraiment à être assimilé car vaut le coup!

Bon courage!

Et je ne parle pas des dizaines de modules existants te permettant encore pardessus tout ca de modifier l'affichage de tes contenu...

Quels modules par exemple ?

Le templating de Drupal est puissant et son apprentissage ne se fera pas en claquant des doigts, mais en aucun cas limité ou pauvre. Il gagne vraiment à être assimilé car vaut le coup!

Tu as surement raison, je ne connais surement pas assez le système pour le juger comme il se doit. Je déplorais juste qu'il n'y a pas d'outil graphique aussi sympa que ce que permet "view", pour personnaliser l'affichage d'un noeud.

Hello,
Benj, je prends le train en marche dans cette discussion car je suis également en train de m'arracher les cheveux pour obtenir un affichage x d'une vue que j'ai créé. En réalité (c'est tout bête) je voudrais créer un nouveau bloc qui s'afficherait sur ma page d'accueil uniquement (sous un contenu statique, style message de bienvenue). Ce bloc je voudrais qu'il affiche une image à gauche et du texte à droite. Si je comprends bien ce que tu viens d'expliquer je dois :
- Récupérer "Sortie du style: views-view-unformatted.tpl.php" et le sauvegarder en le nommant views-view-unformatted--mavue.tpl.php
- Je peux ensuite ajouter / modifier le nom des styles (h3, div etc)
- Ajouter ces nouveaux styles dans le fichier style.css
Est-ce correct ou est-ce que je n'ai décidément vraiment rien compris ? :-/
Un grand merci pour tous vos bons conseils en tout cas ! C'est super de pouvoir vous lire et de bénéficier de vos conseils!
Bonne fin de journée à tous,
Orb

Salut Marco, Salut Orb

Marco: Il faut savoir que la plus par des modules te permettant de changer la présentation de tes contenus ou de ta page s'ajoutent en sur-couche au reste et multiplient les requêtes et la charge du serveur donc pas recommandés sur des sites à fort trafic mais bon tu peux quand même jeter un œil du coté de de panels et ses mini-panels, très puissant pour maitriser le layout d'une page complète ou de tes blocs; composite layout te permet d'utiliser des gabarits complexes pour tes contenus cck, node form column lui te permet de modifier l'apparence de tes formulaires de contenu.
Section attribue un template en fonction de l'url et css injector fait la meme chose mais uniquement avec les feuilles de styles...
Et je ne site la que les plus connus, quelques recherches sur drupal.org avec les mots clé justes t'en feront découvrir surement des dizaines d'autres.
Je ne comprends pas pour quoi tu déplore l'absence d'un outil aussi puissant que views? pourquoi ne pas l'utiliser?

Orb: Tu as presque bien compris la démarche, lorsque view te propose une liste de nom de fichier tpl.php, il commence du plus général au plus precis, utiliser views-view-unformatted.tpl.php aura pour effet de modifier toutes les views du site mais utiliser par exemple views-view--mon_block--block.tpl.php ne modifiera que la vue utilisé dans ce bloc, views-view-field--mon_block--mon_champs.tpl.php seulement un champs dans cette vue, etc... Sans compter que view fournit ses gabarit mais comme tu fais une view de type bloc tu dispose aussi du gabarit block-views-mon_block.tpl.php... A essayer en prenant son temps! :-)
Cependant dans ton cas inutile de se servir d'une vue pour afficher un contenu uniquement sur la page d'accueil, faire un bloc custom et l'afficher sur le front sera bien suffisant et nettement moins gourmand!

Bon courage à vous deux!

Hello Benj,
Merci pour tes éclaircissements ! En réalité ce bloc que je voudrais créer et afficher sur ma page d'accueil ne contiendra qu'une partie de l'information d'un autre contenu. Le site sur lequel je bosse va accueillir des artistes qui pourront s'y présenter. Ce que je tente de faire c'est d'afficher les 5 derniers artistes inscrits sur le site sur la page d'accueil en utilisant une de leurs images et un peu de texte. On pourra cliquer sur l'un d'eux pour accéder ensuit à la fiche complète.
Utiliser views à cette fin se justifie dans ce cas d'après toi ?
Merci merci et... bon appétit !
Orb

Oui c'est tout a fait dans le champ des possibilités offertes par view. Attention cependant à établir une relation correcte entre les contenu et leurs auteurs, tu as plusieurs techniques, tout dépendra si les artistes sont vraiment les auteurs des nodes ou si tu les crées à leur place...
En tout cas bon courage!

Merci merci !
Les artistes seront bien les auteurs... En ce qui concerne les relations ça devrait aller je potasse bouquins, tutos et autres ressources sur le web. Je commence tout doucement a y voir plus clair.
A bientôt,
Orb

Merci pour toutes ces infos. Pour l'instant, cette jungle de modules me dépasse un peu par son volume impressionnant.

Je ne comprends pas pourquoi tu déplore l'absence d'un outil aussi puissant que views? pourquoi ne pas l'utiliser?

Je n'ai pas du être assez clair quand j'ai formulé mon idée : la fonction d'affichage par champs, de Views me parait très bien, mais elle permet juste d'afficher ce que sais faire view, à savoir, une liste de valeurs. View ne permet pas de designer l'affichage complet d'un noeud (ce qu'affiche l'url /node/nid quoi).
Idéalement, j'aurais voulu un outil qui permet de composer des champs en spécifiant basiquement leur affichage, comme permet de le faire view, mais appliqué à un noeud (teaser, full ou RSS), comme le permet Contemplate.

C'est plus clair ?

PS : peut être que l'un des modules que tu m'as listé permet ça, il faut que j'approfondisse.

Ben oui c'est plus clair mais avec views tu peux justement choisir entre un affichage de type champs ou node, ce dernier te permettant d'afficher le ou les nodes exactement comme s'il était consulté a l'url node/nid, tu as bien sur des réglages pour afficher le teaser ou le full.
Ce type de view permet donc de se servir des gabarits de noeud ou de contemplate.

pour formater une sortie qui concatène deux champs (date de début et date de fin), j'utiliserai le module CCK Computed field, il est très puissant, il permet de créer un champs calculé à partir de champs existants texte ou numériques, de faire des requêtes etc...

donc si tu crées un champs qui concatène du texte et tes dates, tu capitalises car tu n'écris qu'une seule fois ta formule, c'est indépendant du thème et tu peux l'utliser dans toutes tes vues.