[{"data":1,"prerenderedAt":328},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fpages-et-routage-shell":3,"section:\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fpages-et-routage-shell":327},{"id":4,"title":5,"body":6,"description":313,"extension":314,"meta":315,"navigation":316,"path":323,"seo":324,"stem":325,"__hash__":326},"docs\u002F2.next\u002F3.dodock\u002F10.developpeurs\u002Fpages-et-routage-shell.md","Pages et routage dans les shells",{"type":7,"value":8,"toc":301},"minimark",[9,13,31,36,50,61,69,76,96,102,113,138,147,150,154,169,216,219,234,238,249,294,297],[10,11,5],"h1",{"id":12},"pages-et-routage-dans-les-shells",[14,15,16,17,21,22,26,27,30],"p",{},"Une ",[18,19,20],"strong",{},"page"," (doctype ",[23,24,25],"code",{},"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 ",[18,28,29],{},"shell"," (module) une page doit s'afficher.",[32,33,35],"h2",{"id":34},"les-trois-types-de-page","Les trois types de page",[14,37,38,39,41,42,45,46,49],{},"Le comportement de routage d'une page dépend de deux champs du doctype ",[23,40,25],{}," : ",[23,43,44],{},"system_page"," et ",[23,47,48],{},"shared_page",". Une page ne peut pas porter les deux indicateurs à la fois.",[51,52,53,54,57,58,60],"mermaid",{},"\nflowchart LR\n    Q{\"Page\"} -->|\"system_page\"| S[\"Aucun shell",[55,56],"br",{},"\u002Fdesk\u002Fdesktop\"]\n    Q -->|\"shared_page\"| K[\"Le shell en cours",[55,59],{},"\u002Fdesk\u002Fstock\u002Fprint\u002FItem\u002FX\"]\n    Q -->|\"ni l'un ni l'autre\"| M[\"Le shell de son module\"]\n    K -.->|\"ouvert à froid\"| M\n",[62,63,65,66,68],"h3",{"id":64},"page-système-system_page","Page système (",[23,67,44],{},")",[14,70,71,72,75],{},"Une page système fait partie du desk lui-même plutôt que d'un module. Elle s'ouvre ",[18,73,74],{},"sans shell"," : son URL reste nue et la barre latérale ne change pas.",[77,78,79,90,93],"ul",{},[80,81,82,83,86,87,89],"li",{},"L'URL ne contient pas de segment de shell. ",[23,84,85],{},"\u002Fdesk\u002Fdesktop"," reste ",[23,88,85],{},".",[80,91,92],{},"La barre latérale affichée avant l'ouverture de la page reste visible.",[80,94,95],{},"La page n'apparaît pas dans la liste des entités routables d'un module.",[62,97,99,100,68],{"id":98},"page-partagée-shared_page","Page partagée (",[23,101,48],{},[14,103,104,105,108,109,112],{},"Une page partagée agit sur un document depuis n'importe où. Elle s'ouvre dans ",[18,106,107],{},"le shell actuellement à l'écran",", quel qu'il soit. La page ",[23,110,111],{},"print"," (impression) en est l'exemple livré avec le framework.",[77,114,115,129,135],{},[80,116,117,118,122,123,126,127,89],{},"Si l'utilisateur se trouve dans le shell ",[119,120,121],"em",{},"Utilisateurs"," et imprime un document, l'URL devient ",[23,124,125],{},"\u002Fdesk\u002Fusers\u002Fprint\u002FUser\u002FAdministrator"," et la barre latérale reste sur ",[119,128,121],{},[80,130,131,132,89],{},"Lors d'un saut (awesomebar, raccourci), la page partagée reste dans le shell en cours, y compris ",[119,133,134],{},"Private",[80,136,137],{},"Si aucune shell n'est nommé dans l'URL, la page s'ouvre dans le shell de son propre module.",[62,139,141,142,144,145,68],{"id":140},"page-standard-ni-system_page-ni-shared_page","Page standard (ni ",[23,143,44],{},", ni ",[23,146,48],{},[14,148,149],{},"Une page standard s'ouvre dans le shell du module sous lequel elle est classée.",[32,151,153],{"id":152},"configurer-une-page","Configurer une page",[14,155,156,157,45,159,161,162,164,165,168],{},"Les champs ",[23,158,44],{},[23,160,48],{}," sont des cases à cocher sur le doctype ",[23,163,25],{},". Une page avec les deux cases cochées est refusée à l'enregistrement. Seul l'",[18,166,167],{},"Administrator"," peut modifier une page, et la création demande le mode développeur.",[170,171,176],"pre",{"className":172,"code":173,"language":174,"meta":175,"style":175},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Exemple : créer une page partagée par code\npage = frappe.new_doc(\"Page\")\npage.page_name = \"Mon action partagée\"\npage.module = \"Stock\"\npage.shared_page = 1\npage.insert()\n","python","",[23,177,178,186,192,198,204,210],{"__ignoreMap":175},[179,180,183],"span",{"class":181,"line":182},"line",1,[179,184,185],{},"# Exemple : créer une page partagée par code\n",[179,187,189],{"class":181,"line":188},2,[179,190,191],{},"page = frappe.new_doc(\"Page\")\n",[179,193,195],{"class":181,"line":194},3,[179,196,197],{},"page.page_name = \"Mon action partagée\"\n",[179,199,201],{"class":181,"line":200},4,[179,202,203],{},"page.module = \"Stock\"\n",[179,205,207],{"class":181,"line":206},5,[179,208,209],{},"page.shared_page = 1\n",[179,211,213],{"class":181,"line":212},6,[179,214,215],{},"page.insert()\n",[14,217,218],{},"La validation empêche de poser les deux indicateurs simultanément :",[170,220,222],{"className":172,"code":221,"language":174,"meta":175,"style":175},"if self.system_page and self.shared_page:\n    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.\"))\n",[23,223,224,229],{"__ignoreMap":175},[179,225,226],{"class":181,"line":182},[179,227,228],{},"if self.system_page and self.shared_page:\n",[179,230,231],{"class":181,"line":188},[179,232,233],{},"    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.\"))\n",[32,235,237],{"id":236},"comportement-du-routeur","Comportement du routeur",[14,239,240,241,244,245,248],{},"Le routeur (",[23,242,243],{},"frappe.router",") lit les indicateurs depuis ",[23,246,247],{},"frappe.boot.page_info"," pour décider du shell à écrire dans l'URL.",[77,250,251,267,285],{},[80,252,253,41,256,259,260,263,264,89],{},[18,254,255],{},"Page système",[23,257,258],{},"shell_for_route"," renvoie ",[23,261,262],{},"null",". Le routeur supprime tout segment de shell déjà présent dans l'URL via ",[23,265,266],{},"drop_shell_from_url",[80,268,269,41,272,275,276,279,280,282,283,89],{},[18,270,271],{},"Page partagée",[23,273,274],{},"shell_can_show"," renvoie toujours ",[23,277,278],{},"true",", ce qui permet à la page de rester dans le shell à l'écran. ",[23,281,258],{}," conserve le shell courant même lors d'un saut, y compris depuis ",[119,284,134],{},[80,286,287,41,290,293],{},[18,288,289],{},"Liens",[23,291,292],{},"sidebar_item.get_route"," ne préfixe pas une page système avec un shell, car le routeur le retirerait à l'arrivée.",[14,295,296],{},"Une URL qui contient encore un segment de shell pour une page système est corrigée à l'ouverture : le routeur retire ce segment.",[298,299,300],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":175,"searchDepth":182,"depth":188,"links":302},[303,311,312],{"id":34,"depth":188,"text":35,"children":304},[305,307,309],{"id":64,"depth":194,"text":306},"Page système (system_page)",{"id":98,"depth":194,"text":308},"Page partagée (shared_page)",{"id":140,"depth":194,"text":310},"Page standard (ni system_page, ni shared_page)",{"id":152,"depth":188,"text":153},{"id":236,"depth":188,"text":237},"Comprendre dans quel shell une page s'ouvre et configurer son routage avec les indicateurs system_page et shared_page.","md",{"reviewed":316,"last_verified":317,"sources":318},true,"2026-11-03",[319,320,321,322],"dodock@develop:frappe\u002Fcore\u002Fdoctype\u002Fpage\u002Fpage.json","dodock@develop:frappe\u002Fcore\u002Fdoctype\u002Fpage\u002Fpage.py","dodock@develop:frappe\u002Fpublic\u002Fjs\u002Ffrappe\u002Frouter.js","dodock@develop:frappe\u002Fdesk\u002Fdesk_views.py","\u002Fnext\u002Fdodock\u002Fdeveloppeurs\u002Fpages-et-routage-shell",{"title":5,"description":313},"2.next\u002F3.dodock\u002F10.developpeurs\u002Fpages-et-routage-shell","vYWB5wAdcCuZ6wEq-90gmsOCOurptwi6BydqS9EW3XA",{},1793871747668]