latte šablony – administrace
- Filip111
- Člen | 244
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.
- Filip111
- Člen | 244
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
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
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
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
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
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)
- Grelek
- Člen | 233
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
Každá šablona může dědit od jakékoliv jiné pomocí makra
{layout ...cesta k soubory...}
.