Gérer du contenu typé

Vous êtes ici pour suivre une série de tutoriaux Drupal pour débutants. Si vous cherchiez des articles plus poussés et/ou généraux, consultez le blog.
Dans cet article

Créer du contenu

Drupal est un système de gestion de contenu, il est donc évident qu'il permet de gérer du contenu (content). Un contenu peut être de diverse nature (article, page, petite annonce, ...): nous y reviendrons dans le paragraphe suivant.

Drupal étant un outil pour la création de site web, votre contenu représente une page du site que vous avez écrite et qui fait que votre site est unique et vous appartient. Ce contenu est donc la notion la plus essentielle de Drupal. Votre site est capable aujourd'hui de gérer des tas d'entité (entity), nous le décrirons en détail dans l'article suivant. Mais historiquement, il n'existait (ou presque) que l'entité de contenu permettant la création de page web et l'on appelait cela dans le monde Drupal un nœud (node). C'est la raison pour laquelle le module qui apporte cette fonctionnalité se nomme "Node" et non "Contenu" comme l'on aurait pu s'y attendre.

Un nœud est un contenu : une page de votre site, identifiable via un identifiant unique: son ID qui définit son URL de base sous la forme /node/xxx. Il est caractérisé par son type de contenu (content type) et des métadonnées comme un auteur, une date de création, de modification, s'il est publié ou non, etc...

Il est important de bien saisir cette notion de nœud. Un nœud aura une url au sein de votre site. Grâce à cette URL, le contenu de ce nœud sera accessible au sein de votre site. Par exemple: une image que vous placez dans l'un de vos articles n'est pas un nœud. Elle n'a donc pas d'URL Drupal propre et ne s'affichera donc que au sein de votre article: c'est une image de l'article, pas un nœud. L'article dans lequel se trouve l'image a pour sa part une URL, un auteur, une date de création, etc... c'est un node !

Etude de cas

Supposons que vous souhaitiez créer une galerie d'images. Vous devez alors déterminer si une image dans une galerie devra être un nœud ? Pour trancher il vous faut vous poser les questions suivantes:

  • Un unique auteur crée-t-il sa galerie ? Ou bien est-ce une galerie collaborative ?
  • Souhaitez-vous une URL pour la galerie et/ou une pour chaque image ?
  • Chaque image doit-elle pouvoir être commentée individuellement ?

Selon vos réponses, plusieurs solutions techniques s'offrent à vous :

a) Vous souhaitez créer un album comme dans Facebook: Pour vous chaque image devra donc être un nœud: l'utilisateur va en effet ajouter une par une les images dans son album, possiblement à des périodes très éloignées dans le temps. Chaque image doit pouvoir être visible et commentée individuellement. Vous créez alors un type de contenu "Image de galerie" et votre galerie sera une vue (nous y reviendrons) groupant ensemble les images qui doivent l'être.

b) Vous souhaitez créer une galerie photo simple - une page regroupant pleins de photos de votre mariage, ou de votre dernière convention Star Trek par exemple ! Pour vous chaque "Galerie Photo" sera un nœud: vous créez alors un type de contenu galerie capable de contenir plusieurs images. Lorsqu'un utilisateur veut créer une galerie, il créera un nœud de type "Galerie Photo" et y uploadera ses photos. Sa galerie aura une URL propre qu'il pourra partager avec ses amis et elle pourra être commentée et partagée. (mais pas chaque photo individuellement).

En conclusion, lorsque vous créerez votre site, vous devrez déterminer ce qui sera un nœud (un contenu) et ce qui sera juste une vue, c'est-à-dire un assemblage de nœuds ou de parties de nœud(s).

Euh... Bon ! Là j'ai conscience qu'à ce niveau, cette dernière phrase est un peu difficile ! Mais nous détaillerons plus loin !

Typer son contenu

Ajouter un contenu

Vous l'avez compris, chaque contenu a un type. Ce type de contenu (content type) ne détermine pas sa nature (Utilisateur, Fichier, Nœud, etc..) c'est un autre concept. Ce type de contenu permet plutôt de typer le nœud par usage (recette de cuisine, article de blog, etc...).

Avec un exemple ce sera plus clair: un tutoriel et une recette de cuisine seront deux types de contenu de même nature: il s'agit de texte, éventuellement agrémenté d'images et de vidéos: des nœuds (nodes). En revanche, ce seront leur usage et leur champs (field) qui différeront. Les tutoriaux par exemple devront avoir une introduction et une conclusion, un niveau de difficulté, etc.. Les recettes de cuisine auront au contraire une liste d'ingrédient, un temps de cuisson, etc... Tutoriel et recette de cuisine sont donc deux types de nœuds différents qui n'auront pas les mêmes champs.

Un contenu = un assemblage de champ

Nous en arrivons donc à la notion de champs (field), extrêmement importante.

Vous trouverez parfois dans de vieilles documentation la dénomination champ CKK (CCK field) pour des raisons historiques. Jusqu'à la version Drupal 6, ce découpage en champ était en effet apporté par un module complémentaire appelé Content Construction Kit ou CCK. Cette notion est aujourd'hui complètement obsolète car Drupal gère tout lui-même désormais.

Un type de contenu est donc composé de champs. Ces champs ont eux-mêmes des natures différentes, chacune permettant des configurations différentes liées à cette nature.

Par exemple : un champ peut-être de type fichier (file field); vous pourrez grâce à lui lier un fichier à un nœud, comme une pièce jointe. Vous aurez alors accès à des configurations spécifiques aux fichiers: vous pourrez limiter la taille et le nombre de fichiers, définir les extensions autorisées, etc..

Autre exemple : un champ de type image (image field) est une extension de la notion de fichier. Les extensions possibles seront automatiquement restreintes à des types d'images (png, jpg, gif, ...) et vous aurez accès à des configurations spécifiques aux images: limiter les dimensions de l'image, recadrer ou redimensionner l'image, etc..

Par défaut, Drupal fournit un certain nombre de types de champs. Et grâce aux modules de la communauté, vous pourrez trouver des types de champs pour à peu près tout ! Pour une URL, email, vidéo, QCM, un sondage Doodle, etc...

Exemple de champs pour un contenu type "Petite Annonce"
Exemple de champs pour un contenu type "Petite Annonce"

Voici quelques-uns des champs les plus courants:

  • Booléen (boolean) : une case à cocher de type vrai ou faux: soit c'est coché, soit c'est décoché. Par exemple "j'ai 18 ans" (promis je le jure !) En terme d'affichage, ce champ peut:
    • Être une simple case à cocher.
    • Être un couple de bouton radio: quand l'un est coché l'autre ne l'est pas et vice-versa.
    • Définir un texte pour l'option "vraie", par exemple "Je suis majeur" et un texte pour la "fausse": "je suis mineur".
  • Nombre (integer, decimal ou float) : permet d'entrer un chiffre. Par exemple, pour un contenu de type "Petite annonce" vous voudrez certainement un champ "prix". Il y a plusieurs types de champs nombre: les nombres à virgule, les entiers, .. Pour un tel champ vous pourrez ainsi :
    • Avoir une ou plusieurs valeurs.
    • Avoir un minimum et un maximum.
    • Un préfixe et un suffixe (par exemple € pour le prix).
    • Avoir une précision (deux chiffres après la virgule).
    • Avoir un séparateur des milliers.
    • ...
  • Fichier (file ou image) : Un champ de fichier permet l'ajout d'un fichier à l'article. Il existe plusieurs sortes de champs fichier: file pour les fichiers génériques et image pour les fichiers images avec des configurations complémentaires. Des modules complémentaires gèrent les vidéos, ou d'autres types de fichiers. Pour un fichier vous pouvez:
    • Permettre l'ajout d'un, deux, trois, ... ou plusieurs fichiers à l'article.
    • Définir si le fichier est public ou privée (protégé par mot de passe .htaccess).
    • Définir dans quel dossier seront stockés les fichiers téléchargés.
    • Restreindre vos fichiers à certaines extensions seulement.
    • Restreindre la taille de vos fichiers (pas plus de 512Mo par exemple).
    • Restreindre la taille (minimale et maximale) des images (dans le cas d'un fichier image).
    • Appliquer un style d'image (dans le cas des images). Ce style permet par exemple de redimensionner le fichier image.
    • Ajouter un champ titre à l'image.
    • Ajouter un champ alt à l'image (ce champ fournit entre autres un texte qui remplace l'image dans un navigateur en braille).
  • Liste (list) : il en existe plusieurs sortes. Les listes de texte (par exemple une liste de pays), les listes d'entiers (par exemple votre nombre d'enfant), les listes de nombres, etc... Vous trouverez les configurations d'usage du type de la liste, mais pourrez aussi définir les différentes valeurs de celle-ci :
    • La liste peut être une liste de cases à cocher ou une liste déroulante.
    • Une, deux, trois ou... plusieurs valeurs peuvent être choisies.
  • Texte (text) : il s'agit d'une zone où l'utilisateur peut ajouter du texte. Cela peut-être un champ long (pour taper un article) ou court (pour taper un prénom), avec ou sans résumé associé. Pour un texte, vous pouvez :
    • Ajouter une ou plusieurs valeurs (par exemple les prénoms de vos enfants).
    • Restreindre le nombre de caractères (cas du texte court), par exemple un prénom de moins de 200 lettres !
    • Restreindre le nombre de lignes (cas du texte long).
    • Filtrer le code ou non: nous verrons qu'il existe des filtres de textes, permettant à l'utilisateur de mettre en forme son texte (gras, italique, etc..) ou au contraire de lui interdire.
  • Référence à une entité (entity reference) : il s'agit d'un champ référençant une autre entité. Par exemple un Utilisateur, un Commentaire, un Paragraphe (nous en reparlerons), un Média, etc.. Ce champ est extrêmement important pour imbriquer les choses dans votre site. Le champ type "Commentaire" par exemple est un exemple précis de champ "référence". Vous pourrez alors :
    • Afficher le libellé de l'entité (le nom de l'utilisateur, le titre de la page jointe, etc..)
    • Afficher l'entité rendue, dans un style d'affichage définit (nous reparlerons de tout cela, c'est un peu précipité ici).

Il existe de nombreux champs et il serait fastidieux de tous vous les décrire, mais je pense que vous avez compris le principe ! En synthèse, si vous souhaitez créer un site de petites annonces, vous pourrez créer un contenu de type "Petite annonce" ayant par exemple les champs suivants :

  • Un champ "liste de texte" pour indiquer la catégorie de l'annonce: "à vendre", "recherche" ou encore "informatique", "maison", etc..
  • Un champ "décimal" pour le prix.
  • Un champ "booléen" pour par exemple indiquer si le prix est fixe ou négociable.
  • Un champ "texte long" pour une description.
  • Un champ "email" pour renseigner l'email du vendeur.
  • Un champ optionnel "phone number" pour le numéro de téléphone du vendeur.
  • Un champ optionnel "image" permettant d'ajouter plusieurs images du produit.
  • Un champ "carte gmaps" pour afficher sur une carte où se trouve le produit.
  • ...

Ajouter un commentaire

Votre nom sera affiché publiquement avec votre commentaire.
Votre email restera privé et n'est utilisé que pour vous notifier de l'approbation de ce commentaire.
Sur internet, vous pouvez être qui vous voulez. Soyez quelqu'un de bien :)