Skip to Content
MoodlePartie 16 — Quiz (auto-évaluation)Quiz 3 — Frontend & thèmes

Quiz 3 — Frontend & thèmes

⏱️ TL;DR — 20 questions sur le JavaScript, les templates, l’Output API et les thèmes (Parties 7–8). Réponds de tête, puis déplie.


1. Qu’est-ce qu’un module AMD dans Moodle ?

Réponse

Un module JavaScript ES6 (dans amd/src/, transpilé vers amd/build/) exportant des fonctions (souvent init). Le système JS modulaire natif de Moodle — pas de <script> en dur.

2. Comment charge-t-on un module AMD depuis PHP ?

Réponse

$PAGE->requires->js_call_amd('component/module', 'init', $args) — charge le module et appelle sa fonction, avec des arguments passés en JSON. Le pont PHP → JS.

3. Pourquoi les templates Mustache sont-ils « logique-less » ?

Réponse

Ils ne contiennent que du balisage + des placeholders ({{var}} auto-échappés, {{#tasks}}…{{/tasks}}). La logique reste en PHP (export_for_template). Sécurité XSS gratuite + séparation nette.

4. Peut-on rendre un template Mustache côté JavaScript ?

Réponse

Oui, avec core/templates (renderForPromise) : le même template sert côté PHP et côté client → UI dynamique sans dupliquer le markup. Proche du rendu React.

5. À quoi sert core/str ?

Réponse

À charger les chaînes de langue côté JS (asynchrone) : pas de texte en dur, i18n respectée jusque dans le JavaScript. L’équivalent JS de get_string().

6. À quoi sert la « pix API » ?

Réponse

À afficher des icônes thémables et accessibles ($OUTPUT->pix_icon('t/check', $alt)). Tes icônes vont dans pix/. Évite les <img> en dur.

7. Que sont un « renderable » et un « templatable » ?

Réponse

Un renderable est un objet à afficher ; templatable ajoute export_for_template() qui produit les données simples que Mustache consomme. L’Output API sépare données et vue.

8. Quel est le thème par défaut, et que fait un thème enfant ?

Réponse

Le thème par défaut est Boost. Un thème peut hériter d’un parent (comme Boost) et ne surcharger que ce qu’il change (SCSS, templates, réglages).

9. Comment personnaliser le style d’un thème sans tout réécrire ?

Réponse

Via les réglages du thème (couleur, logo) et un champ SCSS brut (Boost), ou en héritant de Boost et en surchargeant des variables/templates. Purger le cache thème ensuite.

10. Que doivent implémenter get_content() et applicable_formats() d’un bloc ?

Réponse

get_content() renvoie l’objet {text, footer} du bloc (avec cache interne) ; applicable_formats() déclare le bloc est ajoutable (course-view, my, site…).

11. Comment configurer un bloc par instance ?

Réponse

Via edit_form.php (des champs config_*), accessibles ensuite par $this->config->xxx. Chaque bloc posé a sa config.

12. À quoi servent addinstance et myaddinstance ?

Réponse

Ce sont les capabilities de bloc : addinstance = ajouter dans un cours, myaddinstance = ajouter au tableau de bord. Elles décident qui peut poser le bloc.

13. À quoi sert Grunt dans le dev frontend Moodle ?

Réponse

À builder l’AMD (amd/src/amd/build/, minifié) et à linter le JS (ESLint). En dev, $CFG->cachejs = false sert la source directement.

14. Comment passer des données PHP au JavaScript proprement ?

Réponse

En 3e argument de js_call_amd(..., [$data]) (sérialisé JSON), reçu par la fonction JS. Pas de variable globale ni de <script> inline.

15. Pourquoi l’accessibilité (WCAG) compte-t-elle en éducation ?

Réponse

Obligation légale fréquente + inclusion : navigation clavier, ARIA, contraste, alt. Moodle vise WCAG ; tes blocs/thèmes doivent suivre. Fait partie de la qualité.

16. Un thème peut-il varier selon le contexte ?

Réponse

Oui : le thème peut différer par appareil, catégorie ou cours selon la config du site. Le sélecteur de thème gère ces cas.

17. Comment un thème surcharge-t-il un template d’un plugin ?

Réponse

En fournissant un template Mustache de même nom ; $PAGE->get_renderer() et le moteur de templates cherchent d’abord côté thème. C’est ce qui rend l’affichage thémable.

18. React est-il natif dans Moodle ?

Réponse

Non : Moodle a son propre système (Mustache + AMD + core JS). Mais certains thèmes/plugins intègrent React. Ta compétence React s’applique surtout côté headless/LTI (Parties 9–10).

19. Où placer les icônes SVG d’un plugin ?

Réponse

Dans le dossier pix/ du plugin (ex. pix/icon.svg), servies via la pix API. Cohérentes avec le thème et accessibles.

20. Pourquoi mon JS ne change-t-il pas malgré ma modification ?

Réponse

Le cache JS est actif. En dev, mets $CFG->cachejs = false (+ themedesignermode = true) ; en prod, il faut rebuilder (Grunt) et purger. Confusion classique.


Quiz suivant : Quiz 4 — Web services & LTI.