Master page

Master page představuje jakýsi rámec s vyznačenými regiony, do kterých může stránka, která danou master page používá, vkládat obsah. Často se používá pro záhlaví a zápatí webu.

Při použití standardního boilerplate jsou master page umístěny ve složce masters, kde v souboru main.master je obsah hlavní master page:

<%@ Master %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <je:region runat="server" id="head" />
    </head>
    <body>
        <header>
            <je:a runat="server" href="/cs/">My Site</a>
        </header>
        <je:region runat="server" id="main" />
    </body>
</html>

Controly <je:region> vyznačují oblasti, do které budou stránky vkládat obsah. Jak je z příkladu vidět, regionů může být v masteru více, jen musí mít každý unikátní jméno zapsané v atributu id. Master v .aspx stránce potom použijeme takto:

<%@ Page %>
<je:master runat="server" href="/masters/main.master" />

<je:content runat="server" forRegion="head">
    <h1>Headline</h1>
    <!-- obsah pro hlavičku -->
</je:content>

<je:content runat="server" forRegion="main">
    <p>Body text</p>
    <!-- hlavní obsah -->
</je:content>

V atributu forRegion controlu <je:content> použijeme jméno z atributu id controlu <je:region>, do kterého chceme obsah vypsat. Na stránce, která používá master, může mít každý <je:region> maximálně jeden odpovídající <je:content>. Pokud není <je:content> pro některý <je:region> uveden, považuje se za prázdný.

Poznámky

Kompletní a podrobný popis toho, jak funguje sestavení stránky, je uveden v článku Sestavení stránky, nicméně velmi zjednodušeně je to takto:

Z tohoto důvodů nelze použít například zápis:

<je:container runat="server" expect="article">
    <je:content runat="server" forRegion="main">
        <!-- obsah stránky -->
    </je:content>
</je:container>

Obsah <je:content> bude totiž fakticky přemístěn mimo <je:container>. Zápis:

<je:content runat="server" forRegion="main">
    <je:container runat="server" expect="article">
        <!-- obsah stránky -->
    </je:container>
</je:content>

je zcela v pořádku.

Taktéž control <je:master> lze uzavřít do kontejneru a v controlech <je:content> používat relativní cesty k polím proměnných, tedy například:

<%@ Page %>
<je:container runat="server" expect="article">
    <je:master runat="server" href="/masters/main.master" />
</je:container>

<je:content runat="server" forRegion="head">
    <je:item runat="server" field=".extraHead" />
</je:content>

<je:content runat="server" forRegion="main">
    <je:item runat="server" field=".title" tag="h1" />
    <je:item runat="server" field=".text" />
</je:content>

Jelikož <je:master> bude nahrazen obsahem master souboru a obsahy <je:content> budou vloženy namísto příslušných <je:region>. Celý vygenerovaný obsah bude tedy zaobalen <je:container>.

Připomínky a postřehy

Máte-li nějakou připomínku, dobrý nápad nebo jste našli v dokumentaci chybu, rádi od vás uslyšíme.