Les contenus structurés

Un article de ReaxiaWiki.

La description des types doit être spécifiée avant la phase de développement. Pour plus de détails, veuillez consulter la page sur l'analyse et la modélisation des contenus.

Sommaire

Création d’un type de contenu

Se connecter avec un compte développeur

Un fois qu'un type a été défini, il faut se connecter à l'interface d'administration de Reaxia pour le créer :

  • Se connecter avec un compte développeur
  • Dans le menu : Outils d'administration > Créer et gérer les types de contenu du site.
  • Saisir le titre du type dans le champs "Créer un type", et cliquer sur OK.
  • Cliquer ensuite sur le nom du titre dans la liste pour l'éditer.
  • Définir les propriétés du type.
  • Définir les champs du type.

"Propriétés du type"

Options du type
Agrandir
Options du type
  • Cette liste est triée : cocher cette option permet au contributeur de spécifier un ordre particulier aux éléments du contenu. Par exemple, pour une FAQ ou un diaporama, l'ordre d'affichage des éléments doit être précisé par les contributeurs. La liste des éléments est alors affichée avec une colonne "Ordre" à gauche, et deux flèches permettent de monter ou de descendre les éléments dans la liste.
  • Ce contenu est directement en ligne : cette boite à cocher indique que le contenu est directement affiché sur le site final. Toute modification sur le contenu est alors directement visible sur le site final, sans publication. Le contenu n'apparaît plus dans la liste des contenus à mettre à jour lors d'une publication.
  • Nom de l'affichage par défaut : il est possible de spécifier ici un nom de librairie d'affichage pour automatiser dans certains cas l'affichage des contenus.
  • Description : ce texte s'affiche lors de la création d'un nouveau contenu. Il permet de donner des indications sur ce type et le contexte dans lequel il doit être utilisé.
  • Libellé des boutons d'ajout et de suppression de bloc : dans la liste des éléments du contenu créé avec ce type, deux boutons permettent d'ajouter ou de supprimer des éléments (ou blocs). Vous pouvez choisir ici le libellé de ces deux boutons. Par exemple, pour un type "Nouvelles", les libellés seront "Ajouter une nouvelle" et "Supprimer la nouvelle".

L'onglet "Champs"

Champs
Agrandir
Champs

Pour ajouter un champ, cliquez sur le bouton "Nouveau champ" au bas de la page. Le nouveau champ apparaît alors dans la liste des champs du type.

Chaque champ possède un libellé qui sera repris dans les entêtes de colonne de la liste, dans l'éditeur et dans la zone de recherche. Ce libellé peut contenir des accents et des espaces.

Un nom de champ du type single_line_1 est généré automatiquement. Le nom du champ désigne le nom qui sera utilisé pour créer la ou les nouvelles colonnes nécessaires au stockage de ce contenu dans la base de données. On retrouve aussi ce nom dans les clés du tableau associatif qui contient chaque élément du contenu dans la librairie d'affichage.

Enfin, chaque champ possède un certain nombre d'options. Pour les afficher, une fois le champ créé, cliquer sur son libellé dans la liste :

Tous les champs :
  • Afficher dans la liste : spécifie si ce champ doit être affiché dans la liste en tant que colonne.
  • Afficher en tant que critère de recherche : spécifie si ce champ doit être affiché dans la zone de recherche quand "Afficher plus de critères" est coché.
Image :
  • Réduire les images : Réduit au moment de l'import chaque image, en gardant leurs proportions et en faisant en sorte que leurs dimensions ne dépassent pas les valeurs spécifiées ici. Si cette option n'est pas cochée ou si l'image est déjà plus petite, alors l'image est importée telle qu'elle. La qualité correspond au taux de compression du fichier jpeg de l'image réduite.
  • Inclure aussi l'image agrandie : si l'option précédente est cochée, cocher cette case pour inclure en plus de la première image une version plus grande (qui s'affichera quand on clique sur la vignette par exemple).
  • Réduire les images agrandies : si l'option précédente est cochée, cocher cette case pour recadrer le cas échéant les images plus grandes. On peut ainsi prévoir d'importer des vignettes en format 200x200 max, et des version plus grandes en taille 600x600 max, quelle que soit la dimension de l'image d'origine placée par le contributeur.
Date :
  • Rendre la date optionnelle : contrairement aux autres champs, si cette case n'est pas cochée, il n'est pas possible de laisser la date vide dans un élément de contenu. En cochant cette option, le contributeur aura la possibilité de spécifier explicitement qu'il veut indiquer une date ou non.
Catégorie :
  • Autoriser l'édition en mode contribution : indique si le contributeur pourra ou non éditer la liste des catégories en mode contribution. Si cette case n'est pas cochée, l'éditeur de types de contenu est le seul endroit où cette liste peut être éditée.
  • Un seul niveau (pas de hiérarchie) : indique si la catégorie doit être sur un seul niveau ou sur plusieurs. Une liste sur plusieurs niveaux s'affiche de façon arborescente. Dans les librairies d'affichages, elles sont disponibles sous la forme d'arbres (tableaux de tableaux). Si la catégorie n'a pas vocation à être affichée de façon hiérarchique, cochez cette case de façon à simplifier l'édition des catégories.
  • Autoriser plusieurs sélections : si cette option n'est pas cochée, on ne peut choisir qu'une seule catégorie pour un élément de contenu donné (le choix se fait à l'aide d'une liste déroulante). En cochant cette option, la liste déroulante est remplacée par une liste à sélection multiple, dans laquelle le contributeur peut sélectionner plusieurs éléments à l'aide de la touche ctrl ou shift et de la souris.
  • Afficher dans le contenu du site : indique si la catégorie doit être affichée dans le contenu du site. En cochant cette option, le contenu s’affiche sous forme d’arborescence permettant de créer notamment des contenus multi-pages. Chaque élément de la catégorie est lié à une page.


A noter que dans l'API Reaxia et dans la base de données, les contenus structurés sont appelés « thread ». Exemple : la classe thread_displayer dont les librairies d'affichage héritent.

Tables MySQL créées

Pour chaque type, Reaxia crée automatiquement les tables MySQL nom_du_type et nom_du_type_rxp. « rxp » signifie Reaxia Preview. C'est cette table qui sera utilisée pour afficher le site de prévisualisation. L'autre table contient les données du site final. Lorsque le contributeur met à jour le site, Reaxia recopie les données des tables rxp dans les tables finales correspondantes.

Les librairies d'affichage

Qu'est-ce qu'une librairie d'affichage Reaxia ?

Une librairie d'affichage est une classe PHP chargée, en général, de produire du code HTML pour afficher des éléments d'un type Reaxia.

Une librairie peut avoir aussi d'autres buts :

  • générer du XML pour produire un flux RSS,
  • générer des animations Flash,
  • dessiner une image via des commandes GD,
  • créer un fichier CSV,
  • identifier un internaute dans une liste de membres,
  • rechercher des données dans la base,
  • ...

Pour afficher un type Reaxia de plusieurs manières, il faut créer plusieurs librairies. Dans le cas de nouvelles, une librairie sera chargée d'en afficher plusieurs au format court sur la page d'accueil, tandis qu'une autre sera utilisée dans une page affichant une seule nouvelle en texte intégral. Une troisième librairie pourra générer le flux RSS associé à ces nouvelles.

Comment créer une librairie d'affichage

Les librairies se créent grâce à un assistant présent dans Reaxia Web :

  1. Se connecter à Reaxia Web à l’adresse http://www.monsite.com/reaxia en utilisant un compte développeur.
  2. Dans le menu de gauche, cliquer sur « Outils d'administration » puis sur « Générateur de librairies et de formulaires » dans la page qui s'affiche à droite.
  3. Suivre les étapes de l'assistant.

Les librairies se trouvent dans le dossier reaxia_lib, à la racine du site. Chaque librairie est placée dans un sous-dossier qui porte son nom. Exemple : reaxia_lib/show_page/show_page.php

Une fois que le code d'une librairie a été généré, il faut compléter la méthode d’affichage et éventuellement modifier la requête SQL permettant l'accès aux données :

  • la méthode GetSQLQuery() génère la requête SQL. Ses résultats seront utilisés dans la méthode process_thread_content().
  • la méthode process_thread_content() effectue un traitement sur les résultats de la requête. Ces derniers sont placés dans le tableau $this->Blocs. La partie du code générée met à disposition toutes les données du bloc dans des variables PHP. La variable de retour $html contient en général le code HTML généré par la librairie, mais il est possible de renvoyer un tableau ou un objet.

Utilisation d'une librairie

La valeur retournée par la méthode process_thread_content() s'affiche avec un appel à display_thread() :

<?php
  include_once('reaxia_lib/reaxia.php');
  display_thread('nom_du_thread', 'librairie');
?>

Le premier paramètre passé à display_thread() est le nom du contenu à afficher (nom du thread). Le deuxième paramètre est le nom de la librairie. Un troisième paramètre, facultatif, est un tableau d'options permettant de transmettre des informations à la librairie.

Il est possible de mémoriser la valeur retournée pour un usage ultérieur en ajoutant l'option 'return' avec la valeur true :

<?php
  include_once('reaxia_lib/reaxia.php');
  $returned_value = display_thread('nom_du_thread', 'librairie', array('return' => true));

  // ... traitement ...

  echo $returned_value;
?>

Une librairie donnée est capable de traiter différents types Reaxia, à la condition que ces types aient la même structure (c'est-à-dire les mêmes noms de champs du type single_line_1, paragraph_1_text, etc.).

Créer un formulaire pour la saisie des enregistrements

Il est courant que les visiteurs d'un site aient la possiblité d'entrer des données, par exemple dans le cas d'une inscription ou de l'ajout d'un message dans un livre d'or. Reaxia facilite la création du formulaire associé et prend en charge l'enregistrement des informations dans la base de données.

Créer le formulaire

La première étape est l'utilisation du générateur de formulaires :

  1. Se connecter à Reaxia Web à l’adresse http://www.monsite.com/reaxia en utilisant un compte développeur.
  2. Dans le menu de gauche, cliquer sur « Outils d'administration » puis sur « Générateur de librairies et de formulaires » dans la page qui s’affiche à droite.
  3. Suivre les étapes de l’assistant.

Enregistrer les données

Une fois le formulaire inséré dans le site, il faut pouvoir enregistrer les entrées de l'utilisateur. Pour cela, la fonction Reaxia insert_thread() permet de traiter le $_POST :

<?php
  if (isset($_POST['un_champ_de_mon_formulaire']))
  {
    include_once('reaxia_lib/reaxia.php');
    insert_thread('membres');  // insert_thread va placer les données de $_POST dans la base
  }
?>

insert_thread() utilise les données de la variable $_POST. Il ne faut donc pas modifier les noms des champs du formulaire généré, qui correspondent aux noms des champs du type Reaxia (au format single_line_1, login_1, password_1, etc.).

Le premier paramètre d'insert_thread() est le nom du contenu Reaxia. Le deuxième paramètre, facultatif, est un tableau d'options. Voyons à présent la liste des options proposées.

Les options d'insert_thread

  • SendMail : true pour envoyer les informations du formulaire par e-mail. Les options MailTo, MailFrom, MailFromDisplayName, MailBcc et MailSubject doivent être utilisées pour préciser les paramètres de l'envoi.
  • MailTo : adresse du destinataire.
  • MailFrom : adresse de l'expéditeur.
  • MailFromDisplayName : nom de l'expéditeur.
  • MailBcc : adresse d'un autre destinataire.
  • MailSubject : sujet du message.
  • UseRMM : true pour utiliser Reaxia Mailing Manager, si ce logiciel est installé.
  • RMMProjectId : identifiant du projet Reaxia Mailing Manager.
  • DontSaveInDB : true pour ne pas enregistrer les informations dans la base. Utile si ces informations sont déjà envoyées par e-mail.
  • UniqueField : nom du champ Reaxia dont la valeur doit rester unique. Si un enregistrement contient une valeur déjà contenue dans la table pour ce champ, alors les anciennes informations seront remplacées par les nouvelles.
  • MergeWithMostRecentInfo : n'est utilisé qu'avec l'option UniqueField. Si MergeWithMostRecentInfo vaut true, alors l'écrasement d'une ancienne ligne de la table n'effacera pas les champs qui n'ont pas été renseignés lors du dernier enregistrement.
  • SaveToPublishedTable : true pour enregistrer les informations dans la table finale au lieu d'utiliser la table de prévisualisation.

Exemple d'ajout d'une demande de contact avec envoi automatique d'un e-mail :

<?php
  insert_thread('contacts', array(
      'SendMail' => true,
      'MailTo'   => 'contact@mycompany.com',
      'MailFrom' => stripslashes($_POST['single_line_3']),
      'MailFromDisplayName' => stripslashes($_POST['single_line_1']
          . ' ' . $_POST['single_line_2']),
      'MailSubject' => "Demande d'informations"));
?>