Pour générer de nouveaux affichages issus d'une requête SQL, cela peut se faire à la main dans un module mais aussi avec l'aide du module : Views.
Nous allons récupérer le module Views en version 7 sur la page officielle : https://www.drupal.org/project/views
Nous allons dans le dossier sites/all/modules pour ne pas le mélanger avec les modules d'origine.
sites/all/modules: décompressez Views
Nous retournons sur la partie suivante : barre noire > modules.
Nous activons le module Views + Views UI.
Nous allons créer une page avec les titres et les textes des contenus de type vehicule.
Rendez vous dans la partie : barre noire > structure > vues.
Ensuite : Add new view / Ajouter une nouvelle vue.
Nom de la vue : Listing voiture 1
Dans la colonne de gauche, nous allons cliquer sur la partie Filter Criteria > Ajouter.
Cocher : Contenu: Type > Appliquer.
Is one of / Fait partie de : vehicule
Nous allons cliquer dans la colonne du milieu sur la partie : Menu: No menu > Entrée de menu normal > Menu Principal > Appliquer
Si vous avez bien pensé à créer des contenus de type véhicules, vous devriez avoir un aperçu qui se génère dans la partie du dessous.
N'oubliez pas d'enregistrer et allez voir en Front, votre page doit se trouver dans le menu et présenter vos véhicules en incluant le titre + le texte.
Et le résultat est bien au RDV :
Nous pouvons adapter le code css pour rendre l'affichage plus visuel.
Nous allons créer un 2e affichage, cette fois-ci de type bloc !
Rendez vous dans la partie : barre noire > structure > vues.
Ensuite : Add new view / Ajouter une nouvelle vue.
Nom de la vue : Listing voiture 2
Dans la colonne de gauche, nous allons cliquer sur "Afficher : contenu" pour choisir "Afficher : contenu",
Toujours dans la colonne de gauche nous allons ajouter Contenu: Titre dans la partie fields.
Si c'est déjà le cas, ne touchez à rien. C'est parfait.
Ensuite Enregistrer.
Rendez-vous dans la partie : barre noire > structure > blocs.
Positionner le bloc que vous venez de créer : View: listing voiture 2: Block
Toujours sur notre lancée, nous allons créer un 3e affichage, cette fois ci nous retournerons sur le type page mais en choisissant nos champs !
Rendez vous dans la partie : barre noire > structure > vues.
Ensuite : Add new view / Ajouter une nouvelle vue.
Nom de la vue : Listing voiture 3
Nous allons cliquer dans la colonne de gauche sur la partie : Format > Afficher:Contenu
Choisissez Fields (Champs).
Ensuite, toujours dans la colonne de gauche, nous allons cliquer sur Fields (Champs) > "ajouter".
Choisissez :
Contenu: Titre
Contenu: carburant (carburant)
Contenu: prix (prix)
Contenu: km (km)
Contenu: modele (modele)
Contenu: photo (photo)
Nous allons cliquer dans la colonne du milieu sur la partie : Menu: No menu > Entrée de menu normal > Menu Principal > Appliquer
Dans la colonne de gauche, nous allons cliquer sur la partie Filter Criteria > Ajouter.
Cocher : Contenu: Type > Appliquer.
Is one of / Fait partie de : vehicule
Pour faire un affichage différent, nous allons cliquer dans la colonne de gauche sur la partie : Format: Unformatted list > Choisir Tableau > Appliquer
Nous allons revenir sur la photo et demander d'afficher la version miniature 100x100 :
Et voici notre résultat :
Avec views nous pouvons également créer des pages pour le BackOffice, nous allons donc créer un 4e affichage de type page !
Rendez vous dans la partie : barre noire > structure > vues.
Ensuite : Add new view / Ajouter une nouvelle vue.
Nom de la vue : Listing Contenu
Nous allons cliquer dans la colonne de gauche sur la partie : Format > Afficher:Contenu
Choisissez Fields (Champs).
Ensuite, toujours dans la colonne de gauche, nous allons cliquer sur Fields (Champs) > "ajouter".
Choisissez :
Contenu: Titre (Titre)
Contenu: Type (Type)
Contenu: Langue (Langue)
Contenu: Lien (Lien)
Contenu: Nid (Nid)
Contenu: Nombre de commentaires (Nombre de commentaires)
Contenu: Post date (Post date)
Contenu: Updated date (Updated date)
Contenu: Edit link (Edit link)
Contenu: Delete link (Delete link)
* Une petite fléche (à côté du bouton ajouter) permet de réordonner les champs.
Sur views, nous pouvons recliquer sur les champs dates pour définir le format français : d/m/Y
Cliquer encore dans la colonne de gauche sur la partie : Format: Unformatted list > Choisir Tableau > Appliquer
Pour la partie Filter Criteria, nous allons choisir : Contenu Type et Exposer (Expose this filter to visitors, to allow them to change it)
Dans la colonne du milieu, le chemin sera /admin/listing-contenu
Toujours dans la colonne du milieu, le Menu sera Normal menu entry avec un titre "Gestion Contenu" et classé dans le menu "Management"
Colonne du milieu : Access: Droit > Role Administrateur (seuls les administrateurs auront le droit de voir cette page et de gérer le contenu).
Enregistrer.
Belle surprise, cela nous ajoute une rubrique dans la barre noire backOffice nommée "Gestion Contenu", mais nous aurions pu la mettre à l'endroit de notre choix.
Avec Drupal nous pouvons aussi modifier le BackOffice pour l'améliorer.
Pour créer un module sur drupal, nous allons nous rendre dans la partie suivante de notre installation : /sites/all/modules/
Pour créer le dossier, nous évitons les espaces et les accents, nous prenons des noms informatiques.
Partons sur un module qui gère des contacts !
Ce plugin nous permettra d'améliorer le BackOffice en ajoutant un formulaire pour saisir les contacts et de créer un bloc qui pourra être placé dans une région pour afficher les contacts.
A l'intérieur de notre dossier, nous allons créer un premier fichier monmodule.info avec le code suivant à l'intérieur :
name = Mon Module description = Voici notre 1er module de test core = 7.x package = Module DIW ; commentaire dans un fichier .info -- commentaire dans un fichier .info ; stylesheets[all][] = style.css ; scripts[] = script.js ; configure = admin/... ; files[] = autrefichier.test ; dependencies[] = nom-du-moduleComme son extension l'indique, un fichier .info est un fichier d'informations.
function monmodule_schema() { db_query("CREATE TABLE IF NOT EXISTS monmodule_annuaire ( id_annuaire int(3) NOT NULL AUTO_INCREMENT, prenom varchar(20) NOT NULL, nom varchar(20) NOT NULL, telephone int(10) unsigned zerofill NOT NULL, PRIMARY KEY (id_annuaire) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;"); }Ce fichier .install est prévu pour s'exécuter automatiquement après une installation.
function monmodule_menu() { $items = array(); $items['admin/annuaire'] = array( 'title' => 'Exemple Annuaire', 'description' => 'Formulaire de test', 'page callback' => 'drupal_get_form' 'page arguments' => array('monmodule_form'), // exécutée pour construire le formulaire 'type' => MENU_NORMAL_ITEM, // lien accessible 'access callback' => TRUE, // ligne obligatoire ); return $items; }le Hook _menu permet de définir un chemin d'url, dans notre cas, cela sera admin/annuaire.
function monmodule_form($form, &$form_state) { $form['prenom'] = array( '#type' => 'textfield', '#title' => 'Votre Prenom', '#size' => 10, '#maxlength' => 20, '#required' => TRUE, ); $form['nom'] = array( '#type' => 'textfield', '#title' => t('last name'), '#maxlength' => 20, '#description' => 'Veuillez saisir votre nom', ); $form['telephone'] = array( '#type' => 'textarea', '#title' => 'Votre telephone', '#maxlength' => 10, '#description' => 'Veuillez saisir votre numero de telephone', ); $form['submit_button'] = array( '#type' => 'submit', '#value' => 'ok', ); return $form; }Le hook _form permet de déclarer un formulaire. $form est un tableau array contenant les champs de formulaires, chacun des champs est représenté par un tableau array contenant les informations sur les cases de saisie.
function monmodule_form_validate($form, &$form_state) { if(empty($form_state['values']['nom'])) form_set_error('nom', 'erreur sur le nom'); }le hook _form_validate permet de prévoir une fonction dédiée au contrôle d'un formulaire
function monmodule_form_submit($form, &$form_state) { drupal_set_message('contact enregistre!'); db_insert('monmodule_annuaire') ->fields(array( 'prenom' => $form_state['values']['prenom'], 'nom' => $form_state['values']['nom'], 'telephone' => $form_state['values']['telephone'], )) ->execute(); }Nous utilisons la fonction prédéfinie dans drupal : drupal_set_message() permettant de délivrer un message de validation.
function monmodule_block_info() { $blocks['monmodule_affichage'] = array( 'info' => 'Bloc permettant d\'afficher l\'annuaire', 'cache' => DRUPAL_CACHE_PER_ROLE, ); return $blocks; }Le Hook _block_info permet de fournir des renseignements sur un nouveau bloc Drupal
function monmodule_block_view($delta = '') { $block['subject'] = 'Affichage des contacts'; $block['content'] = ''; if(user_access('access content')) { $result = db_query('SELECT * FROM {monmodule_annuaire}'); if($result->rowCount() > 0) // s'il y a des contacts ... { $block['content'] .= $result->rowCount() . ' contact'; if($result->rowCount() > 1) $block['content'] .= 's'; $block['content'] .= '