Module sans view ?

Module sans view ?

par Jean-Yves WEINSBERG,
Nombre de réponses : 6
Bonjour à tous,
Je chercher à créer un nouveau type de module qui me permettrait d'afficher les documents modifiés depuis les dernières 48h dans un dossier de moodledata donné comme variable du module .
J'ai réussi à reprendre le module Label et à modifier le formulaire de création/édition.
Maintenant j'ai deux problèmes :
  1. J'ai vu qu'il est marqué en "dur" dans course/lib.php que tous les modules dans un thèmes ont un lien vers leur view.php or moi je veux juste une liste des derniers fichiers avec un lien vers chacun de ces fichiers sans avoir a faire un click pour aller voir s'il y'a du nouveau. J'ai réussi à m'arranger avec la fonction ressourcename_get_coursemodule_info en faisant $info->extra = "></a><br "; mais ca fait un peu bidouille sourire Celà dit vu qu'il est spécifié que seul le module label fait exception sur cette histoire de lien je vois pas d'autre solutions. Est-ce que je me trompe ?
  2. J'aimerai pouvoir faire un lien vers un fichier de moodledata sans avoir à créer une ressource file parce que j'ai des centaines de cours a gérer avec chacun une quinzaine de thème et j'ai un script qui m'ajoute automatiquement une ressource directory et, si j'arrive a faire marcher mon module, mon module lié au même répertoire. En plus de celà je veux qu'on puisse déposer des fichiers directement en FTP dans moodledata et que ceux-ci soient reconnu par mon script (ce qui est le cas actuellement mais si je dois avoir une resource file pour linker le fichier ca sera plus possible)
Voila j'espere que j'ai été clair et que vous pourrez m'aider à trouver des solutions sourire

Merci d'avance
Moyenne des évaluations  -
En réponse à Jean-Yves WEINSBERG

Re: Module sans view ?

par Valery Fremaux,

Oui, je pense avoir compris ton besoin.

Apparemment c'est plus d'un bloc que tu as besoin que d'une activité (module). Un module dans Moodle est une micro application qui doit pouvoir être instanciée plusieurs fois dans un cours. C'est le cas d'une instance de ressource, mais aussi d'un forum.

Le code d'action d'un bloc qui affiche son contenu peut parfaitement faire ce travail de test du contenu d'un répertoire physique et de lister les fichiers modifiés. Le bloc utiliserait probablement un modèle de donnée (une table ou deux) pour :

  • Déterminer en fonction du contexte (contexte du bloc au sens Moodle : cours, section générale) quel répertoire est concerné
  • Enregistrer quelques métadonnées qui permettent d'enregistrer l'état de consultation (pour savoir ce qui est nouveau, il faut mémoriser ce qui est ancien).

Si ce dispositif doit être reproduit plusieurs fois et avec des paramètres différents dans le cours alors c'est bien d'un module dont tu as besoin, quoi qu'un bloc peut être utilisé en instances multiples (jamais testé) s'il est programmé pour le faire.

A partir du moment où tu ne cherches pas à partir de la page d'affichage du cours, (et que tu n'as donc pas besoin de "basculer" sur un écran de module) un bloc multiple te permet donc de lister ce que tu cherches dans une instance, et de configurer cette instance pour désigner le répertoire physique à prendre en charge. Si ce bloc est multiple, tu pourras en coller plusieurs dans les gouttières, chacun avec son paramètre fixé par l'administrateur du cours. 

En réponse à Valery Fremaux

Re: Module sans view ?

par Jean-Yves WEINSBERG,
Déjà, merci bcp pour ta réponse.

Le problème c'est que j'ai besoin d'entre 15 et 20 modules de ce type par cours (un par thème, puisqu'a chaque thème est relié un dossier dans moodle data) et surtout je ne veux pas que ca s'affiche dans un bloc dans les gouttières mais dans le thème correspondant. Mon problème n'aurait pas de solutions sans modifier le coeur de Moodle ? ( ce que je me refuse à faire )

Si oui, il faudrait proposer aux développeurs de permettre de créer des modules qui agiraient comme des labels dynamiques.
En réponse à Jean-Yves WEINSBERG

Re: Module sans view ?

par Valery Fremaux,
Tu veux dire, qui dérouleraient une partie de leur contenu dynamique dans le déroulé même du cours ?
En réponse à Valery Fremaux

Re: Module sans view ?

par Jean-Yves WEINSBERG,
Oui, ou en tt cas qu'on puisse définir une fonction dans lib.php du module qui serait appellée pour l'affichage dans le "corps" du cours. Et ce serait dans cette fonction que pour la plupart des modules on afficherait le nom du module avec un lien vers sa page view.php.
Et pour mon module je pourrais dans cette fonction scanner le dossier et afficher les dernieres Maj.
De manière générale ca permettrait de dynamiser le contenu même des cours, ca ne coûterait pas beaucoup de temps en développement et les modifications du coeur de moodle seraient minimes ( d'après ce que j'ai pu voir j'ai pas non plus fouillé en détails toutes les fonctions par manque de temps ).
En réponse à Jean-Yves WEINSBERG

Re: Module sans view ?

par Valery Fremaux,

En effet, la modification n'est pas très importante. Elle concerne essentiellement les fichiers du répertoire "course" notemment celui qui prend en charge la boucle d'affichage des sections (thématique ou calendaire).

Les développeurs du module/patch opencourseware ont du faire quelque chose de similaire, puisqu'ils modifient la barre d'outils affiché pour chaque entrée de module :

http://metasolutions.us/resources/moodle/mods/ocw_metamod.php

A noter que tout semble se passer dans la fonction "print_section" dans course/lib.php.

Il doit être possible de caler un piège dans la boucle de construction de la section pour prendre en compte le cas particulier d'une ressource "in-course", se substituant au lien habituellement imprimé, et remplaçant ce lien (dont on voit très bien la construction dans cette fonction) par le résultat d'un appel de fonction supplémentaire dans l'activité (modname_get_incourse_content($moduleid)) pourrait le faire.

On peut même généraliser cette production à tous les modules, pourvu qu'ils fournissent cette fonction :

$incourse_function = $mod->modname . '_get_incourse_content';
if (isset($mod->hasincoursecontent) && $mod->hasincoursecontent){
   include_once("{$CFG->rootdir}/mod/{$mod->modname}/lib.php");
   if (function_exists($incourse_function)){
      echo $incourse_function($mod->id);
   }
}

Voilà un type de wrapping dynamique très utilisé dans Moodle.

On suppose ici que le module dispose d'un champ optionnel hasincoursecontent booléen à 1 dans la base.

En réponse à Valery Fremaux

Re: Module sans view ?

par Jean-Yves WEINSBERG,
Oui je pensais à quelque chose comme cà.
Mais je ne veux pas modifier course/lib.php par moi même pour que mon site reste compatible avec les mise à jour.
Vous n'avez pas de contact avec l'équipe qui s'occupe de çà pour leur suggérer cette modificaton ?