Problém se setLayout(), chyba 404

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

Zdravím,

mám mírný problém s použítím funkce setLayout().
Vypisuje mi chybu 404, ale layout existuje a pokud adresu, kterou získám z pole $this->FormatLayoutTemplateFiles() zadám do prohlížeče, normálně se k ní dostanu.

<?php
	protected function startup() {
		parent::startup();
		$this->setLayout("test");
		print_r($this->formatLayoutTemplateFiles());
	}
?>

Chyba je ale „Page not found. Missing template ‚…\xampp\htdocs\fotbal\app\templates\Muzi\muzi.latte‘.“, nette tedy ani můj test.latte nehledá, ale hledá něco úplně jiného.

Kromě startupu jsem zkoušel to zkoušel hodit i do actionDefault(), a chyba se změnila pouze na to, že nelze nalézt default.latte (který samozřejmě také neexistuje, ale mělo by to hledat šablonu kterou jsem zadal, tedy test.latte)

Zde je pole, které se mi vypíše:

<?php
Array
(
    [0] => C:\xampp\htdocs\fotbal\app/templates/Muzi/@test.latte
    [1] => C:\xampp\htdocs\fotbal\app/templates/Muzi.@test.latte
    [2] => C:\xampp\htdocs\fotbal\app/templates/Muzi/@test.phtml
    [3] => C:\xampp\htdocs\fotbal\app/templates/Muzi.@test.phtml
    [4] => C:\xampp\htdocs\fotbal\app/templates/@test.latte
    [5] => C:\xampp\htdocs\fotbal\app/templates/@test.phtml
)
?>

Šablonu mám vytvořenou hnedka na prvním umístění, ve kterém by se mělo hledat, tedy C:\xampp\htdocs\fotbal\app/templates/Muzi/@test.latte

Jedná se o chybu, nebo o mé špatné použití?

22
Člen | 1478
+
0
-

to ale neni chyba, že chybí layout, ale že ti chybí šablona pro view test

Jan Mikeš
Člen | 771
+
0
-

Máš pravdu, popletl jsem si co je to view a co je layout a k čemu slouží.

K tomuto problému jsem se dostal při řešení jedné situace, se kterou si nevím rady.
Jedná se o to, že potřebuji aby jeden presenter využíval latte šablonu jiného presenteru.

Konkrétněji, mám fotbalový klub, presenter Tymy, týmy se děli na muže, dorost, děti… toto jsou další presentery. Všechny věkové kategorie budou mít stejné šablony, ale pouze naplněné jinými daty.

Měl jsem takovou představu, že jednotlivé kategorie budou dědit od TymyPresenteru a jediné .latte šablony budou v /templates/Tymy/ a právě jsem se domníval, že tohoto docílím tímto:

<?php
	$this->setLayout("../Tymy/".$this->getView());
?>

jenže view a layout jsou 2 rozdílné věci, což jsem si neuvědomil.

O data bych se staral potom v presenterech jednotlivých kategorií, jde mi jen o to, aby více presenterů používalo společné šablony.

Možná to patří spíše do začátečníků, ale nerad bych zakládal duplicitní téma, i když tento problém už nesouvisí tolik s nadpiskem, byl bych rád za pomoc.

Editoval Lexi (6. 1. 2012 14:21)

22
Člen | 1478
+
0
-

nestačilo by to udělat jedním presenterem a pouze jinými view?

final class TymyPresenter extends BasePresenter
{
	protected function startup()
	{
		parent::startup();
		$this->setLayout('tymy');
	}

	public function renderMuzi()
	{
		...
	}

	public function renderDororst()
	{
		...
	}

}

a pak mít akorát šablony:

@tymy.latte
muzi.latte
dorost.latte

možná do šablony ještě bude potřeba přidat dědičnosti {extends 'parent_layout.latte'}

Jan Mikeš
Člen | 771
+
0
-

To by právě nešlo, každá z těch sekcí se pak ještě dělí na tabulku, soupisku, rozpis, atd.. a právě šablonu k těmto sekcím budou mít všechny věkové kategorie (prvotně jsem to nepopsal úplně do detailů..),

pak mě ještě napadá přidat další parametr předávaný odkazem s vlastním routerem, např n:href=„Tymy:rozpis, muzi“, ale osobně bych se raději dobral k nějakému řešení, jak použít šablonu cizího presenteru

22
Člen | 1478
+
0
-

šablonu cizího presenteru nepoužiješ, jediné co lze použít, je dědičnost šablon, takže to co mají ty šablony společné, si vyhoď do společné šablony a z té pak dědí ty ostatní šablony, postup je stejný, jako kdyby jsi používal jeden presenter.. navíc se tam dají použít bloky.. viz. dokumentace, které se můžou různě dědit.

Možná by pro tebe bylo lepší si udělat nějaké útržky jenom a pak si podle situace přes {include 'rozpis_table.latte'} includnout design tabulky, který potřebuješ.

Editoval 22 (6. 1. 2012 16:08)

Jan Mikeš
Člen | 771
+
0
-

Ano, to vše vím a i používám dědičnost šablon, šlo mi jen o to, zda vážně neexistuje nějaké takové řešení, nebo musím mít 40 .latte souborů (8 věkových kategorií, 5 různých informací).

Děkuji tedy za info

22
Člen | 1478
+
0
-

nevím, řekl bych, že by ses měl asi zamyslet nad návrhem, s něčím takovým jsem se ještě nesetkal.. abych musel takto duplikovat view pro presentery, imho tohle by měl spravovat jeden presenter úplně v klidu ..

Patrik Votoček
Člen | 2221
+
0
-

Podle mě je u tebe problém už v samotném základním návrhu.

Podle toho co píšeš máš takovéto požadavky:

  • informace o fotbalových týmech
  • 5 různých druhů pohledů
  • 8 věkových kategorií

Z čehož mě vychází:

  • 1 presenter
  • 5 action / view s jedním parametrem (věková kategorie)
Jan Mikeš
Člen | 771
+
0
-

Asi ano. Není důvod to zbytečně komplikovat a překombinovávat, když existuje toto podstatně jednodušší řešení.

Děkuji pěkně za vaše rady.