Frappe Framework
Générateurs
Si chaque document doit avoir une page, le DocType devient générateur : route, condition de visibilité, hook et modèle HTML.
Quand utiliser un générateur
Si chaque document d’un DocType correspond à une page web, on met en place un générateur (generator).
- Ajoutez un champ
route, qui fixe l’adresse de la page. Il est obligatoire. - Ajoutez un champ de condition, qui dit si la page est visible.
- Citez le DocType dans
website_generators, danshooks.py. - Faites hériter le contrôleur de
frappe.website.website_generator.WebsiteGenerator. - Créez le modèle de page.
- Ajoutez le contexte du modèle.
- Personnalisez la route et la vue liste.
Exemple Job Opening
Le DocType reçoit published et route. Dans ERPNext, le hook existant devient :
website_generators = ["Item Group", "Item", "Sales Partner", "Job Opening"]Si la propriété n’existe pas dans hooks.py, il faut l’ajouter.
La classe JobOpening hérite de WebsiteGenerator, pas de Document. La propriété website indique le modèle templates/generators/job_opening.html, le champ de condition published et le titre job_title. get_context pose le fil d’Ariane dans context.parents, vers jobs / « All Jobs ». Après cela, le formulaire affiche le lien « See in Website ».
Le modèle étend templates/web.html, inclut le fil d’Ariane, affiche job_title et description, et un lien « Apply Now » vers /job_application.
Vue liste
La source annonce une méthode get_list_view, puis montre get_list_context, qui fixe context.title et context.introduction.
Point d’attention
Sans le champ route, le générateur de l’exemple n’est pas complet. La classe doit hériter de WebsiteGenerator. Le nom de méthode publié pour la liste est get_list_context dans le code, et get_list_view dans le titre de section.
