Partiel du 05/05/2020

Drupal 8

Partiel du 05/05/2020

Soumis par Antoine le lun 04/05/2020 - 16:14

Ce partiel dure 4 heures

L'entreprise Immo+ est un promoteur qui permet à des agents immobiliers indépendants de vendre les appartements qu'elle construit à travers toute la France. Chaque agent dispose d'un site Drupal qu'il peut mettre en forme comme il le souhaite. Par contre, ils doivent installer le module immoplus qui va ajouter plusieurs fonctionnalités à leur site. 

Suite au passage à Drupal 8, votre entreprise est chargée de réécrire le module immoplus.

ATTENTION : votre module doit s'appeler par votre nom de famille (sans aucun caractère spécial). A la fin de l'épreuve, vous devez l'envoyer zippé à l'adresse a.moulin@unistra.fr.

Objectif n°1 (1 heures)

Ce module doit créer deux types de contenus lors de l'installation:

  • les immeubles avec les champs : nom (titre), adresse rue, code postal, ville, photo, description et un champ de taxonomie qui permet de choisir le standing parmi "Normal" "Élevé" "Supérieur"
  • les appartement avec les champs : titre, description, nbre de pièce, photo et un champ référence qui permet d'indiquer l'immeuble dans lequel l'appartement se trouve.

Lors de l'installation un immeuble et deux appartements doivent être créés. Vous pouvez inventer les données, les images sont disponible en bas de la page.

Objectif n°2 (1 heure)

Le module doit créer deux pages : 1 page "Immeubles"et 1 pages "Appartements"

La page "Immeubles"

Cette page contient :

  • un bouton qui permet de créer un immeuble
  • un tableau avec la liste des immeubles avec les colonnes suivantes :
    • nom qui pointe vers le nœud de l'immeuble
    • ville
    • standing
//Pour afficher la valeur d'un champ dans une cellule d'un render array vous devez utiliser
$row[]=$node->get('nommachine_champs')->value;

//Pour afficher un terme de taxonomie
//En haut du contrôleur 
use Drupal\taxonomy\Entity\Term;

//Puis dans la cellule
$row[]=\Drupal\taxonomy\Entity\Term::load($node->get('nommachine_champs')->target_id)->getName();

La page "Appartements"

Cette page affiche toutes les photos des appartements les unes en dessous des autres

//Dans twig on peut afficher une image après avoir chargé le noeud :
<img src="{{ file_url(node.machine_name_field_image.entity.uri.value) }}" alt="{{ node.machine_name_field_image.alt }}" />

Navigation

Le module doit créer un lien de menu sur le menu principal. Ce lien doit indiquer immo+ et pointer vers la page "Immeubles"

Sur les pages "Immeubles" et "Appartements" des onglets permettent de passer d'une page à l'autre. 

Objectif n°3 (40 minutes)

Ajouter la librairie datatables au tableau créé lors de l'objectif n°2. Si vous n'arrivez pas à faire l'objectif n°2, fait un tableau directement dans un template. Attention pour fonctionner datatable a besoin d'un tableau qui respecte les normes html (<table><thead></thead><tbody></tbody><tfoot></tfoot></table>)

Les cdn des fichiers css et js sont inscrits à cette adresse :https://datatables.net/

Le code js à mettre pour que datatable s'applique à la table avec l'id myTable (en plus des cdn)

 

(function ($) {
  $(document).ready( function () {
    $('#myTable').DataTable();
} );
}(jQuery));

 

Objectif n°4 (1 heure)

Créer un bloc qui est censé être placé par l'utilisateur uniquement sur des pages d'appartement. Ce bloc qui aura comme identifiant votre nom de famille devra afficher un lien qui pointe vers la page de l'immeuble auquel appartient l'appartement affiché dans le bloc central. Comme on ne peut pas faire confiance à l'utilisateur, vous devrez tester si la page sur laquelle se trouve le bloc affiche bien un appartement.

//Pour récupérer le noeud affiché
$node = \Drupal::routeMatch()->getParameter('node');

 

Version