Version de développement
Cette documentation décrit la version « next » (develop), non encore publiée. Pour la version stable, basculez sur « v5 » dans l'en-tête.
Développeurs

Pages et routage dans les shells

Comprendre dans quel shell une page s'ouvre et configurer son routage avec les indicateurs system_page et shared_page.

Pages et routage dans les shells

Une page (doctype Page) peut s'ouvrir dans trois contextes de navigation différents selon sa nature. La barre latérale du desk s'appuie sur deux indicateurs pour décider dans quel shell (module) une page doit s'afficher.

Les trois types de page

Le comportement de routage d'une page dépend de deux champs du doctype Page : system_page et shared_page. Une page ne peut pas porter les deux indicateurs à la fois.

Page système (system_page)

Une page système fait partie du desk lui-même plutôt que d'un module. Elle s'ouvre sans shell : son URL reste nue et la barre latérale ne change pas.

  • L'URL ne contient pas de segment de shell. /desk/desktop reste /desk/desktop.
  • La barre latérale affichée avant l'ouverture de la page reste visible.
  • La page n'apparaît pas dans la liste des entités routables d'un module.

Page partagée (shared_page)

Une page partagée agit sur un document depuis n'importe où. Elle s'ouvre dans le shell actuellement à l'écran, quel qu'il soit. La page print (impression) en est l'exemple livré avec le framework.

  • Si l'utilisateur se trouve dans le shell Utilisateurs et imprime un document, l'URL devient /desk/users/print/User/Administrator et la barre latérale reste sur Utilisateurs.
  • Lors d'un saut (awesomebar, raccourci), la page partagée reste dans le shell en cours, y compris Private.
  • Si aucune shell n'est nommé dans l'URL, la page s'ouvre dans le shell de son propre module.

Page standard (ni system_page, ni shared_page)

Une page standard s'ouvre dans le shell du module sous lequel elle est classée.

Configurer une page

Les champs system_page et shared_page sont des cases à cocher sur le doctype Page. Une page avec les deux cases cochées est refusée à l'enregistrement. Seul l'Administrator peut modifier une page, et la création demande le mode développeur.

# Exemple : créer une page partagée par code
page = frappe.new_doc("Page")
page.page_name = "Mon action partagée"
page.module = "Stock"
page.shared_page = 1
page.insert()

La validation empêche de poser les deux indicateurs simultanément :

if self.system_page and self.shared_page:
    frappe.throw(_("A page is either a System Page, which opens in no sidebar, or a Shared Page, which opens in any. It cannot be both."))

Comportement du routeur

Le routeur (frappe.router) lit les indicateurs depuis frappe.boot.page_info pour décider du shell à écrire dans l'URL.

  • Page système : shell_for_route renvoie null. Le routeur supprime tout segment de shell déjà présent dans l'URL via drop_shell_from_url.
  • Page partagée : shell_can_show renvoie toujours true, ce qui permet à la page de rester dans le shell à l'écran. shell_for_route conserve le shell courant même lors d'un saut, y compris depuis Private.
  • Liens : sidebar_item.get_route ne préfixe pas une page système avec un shell, car le routeur le retirerait à l'arrivée.

Une URL qui contient encore un segment de shell pour une page système est corrigée à l'ouverture : le routeur retire ce segment.