Forcer l'utilisation du renderer de chart_bar

Forcer l'utilisation du renderer de chart_bar

par Ronan Choiselat,
Nombre de réponses : 2

Bonjour


Avec moodle 3.2 et la nouvelle chart API, je cherche à faire en sorte de pouvoir changer la couleur d'un graph. Dans mon cas il s'agit du graph du rapport graphique du plugin scorm.

Côté plugin scorm, j'ai ajouté une option de configuration dans laquelle on choisi une couleur. La valeur est correctement stockée et récupérée.

Côté graph, je découvre qu'il n'y a pas de possibilité de set une couleur autrement qu'en spécifiant un tableau de valeur hex dans le config.php, ce qui ne m'arrange pas.

Aussi ai-je entrepris de me créer mon propre chart_bar (my_chart_bar) qui hérite du core\chart_bar au sein du plugin scorm. Sauf qu'au moment du rendu, j'obtiens une erreur, car moodle essai de trouver un renderer_my_chart_bar() qui n'existe évidemment pas dans le core_renderer.


Ai-je moyen de forcer l'utilisation du renderer_chart_bar() pour mon instance de my_chart_bar ? Quel autre(s) moyen(s) ai-je pour effectuer le rendu de mon graphique ?


D'avance merci

Moyenne des évaluations  -
En réponse à Ronan Choiselat

Re: Forcer l'utilisation du renderer de chart_bar

par Valery Fremaux,
Avatar Développeurs de plugins

C'est un peu le problèmre du déroutage de code par filiation de classe.

Ca ne fonctionne que quand la classe utilisée par le core est le résultat d'une "Factory" qui permet de désigner en amont quelle est la classe à utiliser de préférence à la classe standard.

Cela fonctionne avec quelques classes clef comme le block_manager ou la classe de base moodle_page, mais peut être pas en effet pour le scorm.

Autrement l'héritage de classe ne peut servir que le code local ajouté et une technique de callback dans les classes filles doit être organisée (comme dans l'implémentation des blocs)

Si une telle Factory n'existe pas, alors la seule réponse probablement est un patch core (ce qui ne satisfait personne on est d'accord)


En réponse à Valery Fremaux

Re: Forcer l'utilisation du renderer de chart_bar

par Ronan Choiselat,

Merci pour cette réponse.


Entre temps, j'ai trouvé une solution qui répond à mon besoin, même si elle me semble peu propre.

Je suis partie de l'idée naive que moodle utilise le nom de la classe du graph pour en déduire le renderer à utiliser. Partant de ce principe, j'ai bêtement renommé ma classe my_chart_bar en chart_bar (même nom que la classe dont elle hérite, mais namespace différent).

Le renderer du chart_bar original est correctement appelé, et fonctionne à merveille puisque ma classe étendu de chart_bar ne définit qu'un setter supplémentaire permettant de modifier une propriété déjà existante du chart_bar d'origine.

Bref, cela fonctionne dans ce cas précis car la modification ne fait qu’altérer un paramètre existant.