latte šablony – administrace

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Filip111
Člen | 244
+
0
-

Ahoj,
rád bych zprovoznil snipety v administraci – překážkou jsou ale includované šablony ve kterých snipety nefungují. Dokázali byste mi poradit, jak nepoužívat includované šablony v následujícím příkladu?

Presenter má funkce renderAdd a renderEdit.
Mám tedy šablony add.latte a edit.latte – obě se liší jen minimálně (např. title případně nějaký link).
Obě ale mají v sobě include šablony detail.latte, kde je zpracován samotný formulář pro vkládání nebo editaci záznamu.
Právě v šabloně detail.latte bych potřeboval vytvořit snipety. Ty ale bohužel nefungují protože je šablona volaná pomocí include.

Dalo by se vyhnout použití include? Uvažoval jsem jak to udělat pomocí blocku, ale pokaždé jsem nakonec skončil zase u include.

Díky.

22
Člen | 1478
+
0
-

Dědičnost šablon..

Filip111
Člen | 244
+
0
-

Dědičnost používám v tom smyslu, že mám @layout.latte, v něm je definovaný blok content a právě šablony add.latte a edit. latte plní tento blok.

Stále ale nevidím to jedno společné místo, kam umístit kód použitelný v add a edit šabloně. Možná mi uniká nějaká zásadní vlastnost dědičnosti šablon…

Nejjednodušší edit.latte vypadá např.:

{block #content}
<h1 n:block="title">Upravit záznam ...</h1>

{include 'detail.latte'}

{/block}

V detail.latte je pak volání několika formulářů, nějaké taby apod.

22
Člen | 1478
+
0
-

udělám si view detail a view add, pak nějakou šablonu default, kde definuju block #content s defaultním obsahem a pak mi to ten block v default.latte přepíše obsahem podle view. Ne?

Edit: mrkni tady..
většina include se dá přepsat formou dědičnosti šablon, aspoň jsem zatím nenašel případ, kdy by to nešlo.

Editoval 22 (9. 2. 2012 13:28)

Filip111
Člen | 244
+
0
-

Asi jsem natvrdlej – dokumentaci jsem samo četl. Mám definovaný blok v layoutu a přepisuji ho právě blokem v edit nebo add.
Pořád ale nechápu ve tvém případě jak dostaneš obsah bloku #content ze souboru default.latte do view add nebo detail. Aby se ti načetl obsah default.latte, tak ho musíš nějak zavolat nebo spojit s view add a detail a to mi právě zajistí include (který je fuj).
Teď to nestíhám, cca do hodiny sem dam kompletní příklad layoutu a šablon.

Filip111
Člen | 244
+
0
-

Sice trošku se zpožděním, ale přece – posílám ukázku jak mám šablony řešené a prosím o návrh jak bych se mohl vyhnout includu. Všechno jsem pro názornost maximálně zjednodušil.
Koukal jsem i na nedávný topic, ale nepomohl mi https://forum.nette.org/…edeni-sablon

layout:

<html lang="cs">
    <head>
		<title>{block #title|striptags|trim}{/block} | Administrace</title>
    </head>
    <body>
	<div id="page_center">

		<div id="content">
			{block #content}
		</div>
    </div>
    </body>
</html>

Latte šablony edit.latte a add.latte odpovídají funkcím renderAdd a renderEdit.
V nich je include na společnou část ve které je formulář pro práci se záznamy.
edit.latte:

{block #content}
	<h1 n:block="title">Upravit záznam</h1>
	{include 'detail.latte'}
{/block}

add.latte:

{block #content}
	<h1 n:block="title">Vytvořit kategorii</h1>
	{include 'detail.latte'}
{/block}

Společná část detail.latte:

{control editForm}

Díky za návrhy.

22
Člen | 1478
+
0
-

nástřel, neověřeno..

//společná část common.latte
{extends '@layout.latte'}
{block #content}
        {block #title}...{/block}
       	{block #detail}...{/block}
	{control editForm}
{/block}
//edit.latte
{extends 'common.latte'}
{block #title}Edit{/block}
{block #detail}...{/block}
//add.latte
{extends 'common.latte'}
{block #title}Add{/block}
{block #detail}...{/block}

Editoval 22 (12. 2. 2012 9:25)

Filip111
Člen | 244
+
0
-

Díky, teď už to chápu a funguje mi to bez include. Nepoužíval jsem extends a pořád jsem to bral především jen jako definici hlavního layoutu a nikoliv jako vícenásobné rozšiřování šablony.

Pořád mi to ale nejde do hlavy – roky jsem používal Smarty a includy v šablonách. U děděných šablon v Nette je potřeba uvažovat jinak, tak nějak od konce.

Editoval Filip111 (12. 2. 2012 11:25)

22
Člen | 1478
+
0
-

No spíš to ber jako šablona → třída, extends ji rozšiřuje a bloky jsou metody, které přetěžuješ :D

Grelek
Člen | 233
+
0
-

Zdravím, možná oživuji kostlivce (předem se omlouvám) ale nechtěl jsem zakládat zbytečně nové téma.
Chtěl bych se jen zeptat, zda-li se dá dědit i od jinud, než z @layout.latte.
Dělám aplikaci ve které mám moduly FrontModule a AdminModule, přičemž potřebuji, abych latte soubory dědil v AdminModule z jiného souboru.

Jsem začátečník, s Nette dělám druhým týdnem, tak prosím omluvte, pokud budu psát blbosti :).

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Každá šablona může dědit od jakékoliv jiné pomocí makra {layout ...cesta k soubory...}.