Missing template file ‚1‘
- Ondřej Mirtes
- Člen | 1536
Ahoj,
přecházím v jednom projektu na nové šablony a zlobí mi AJAX.
Pokud je vypnutý (odkazy nejsou v jQuery oajaxovány), vše se bez problému provede. Pokud ho zapnu, vrací mi server kód 500 a FileNotFoundException s tímto textem:
Missing template file 'D:\Webs\www\Trance\html/../app/templates/WebModule/1'
Přitom zahlasování v anketě se provede. Vykreslení ankety je v layoutu:
@{control poll}
Továrnička v BasePresenteru
:
protected function createComponentPoll() {
$poll = new PollControl;
$poll->setExpiration(Environment::getConfig('expiration')->poll);
return $poll;
}
Okleštěný kód PollControl
:
<?php
class PollControl extends BaseControl {
public function handleVote($answer) {
$this->getComponent('model')->vote($answer);
$this->validateControl();
$this->invalidateControl('poll');
if (!Environment::getHttpRequest()->isAjax()) $this->redirect('this');
}
public function render() {
$this->{'render'.$this->mode}();
}
private function renderPoll() {
$template = $this->createTemplate();
$template->setFile(dirname(__FILE__) . '/Poll.phtml');
$model = $this->getComponent('model');
$template->poll = $model->getLatestPoll();
$template->colors = $this->colors;
$template->answersCount = PollControlModel::ANSWERS_COUNT;
$template->hasVoted = $model->hasVoted();
if ($template->poll == null) $this->renderNoPoll();
else $template->render();
}
}
A z call stacku na mě kouká tahle řádka z Default.default.phtml (netuším, co tam dělá, když tu komponentu vykresluji v @layout.phtml, ale jinak je to šablona, na jejíž stránce zrovna jsem):
if ($_cb->extends) { ob_end_clean(); LatteMacros::includeTemplate($_cb->extends, get_defined_vars(), $template)->render(); }
Zkrátka nevím, proč to hrabe do šablon presenterů a ještě to hledá takovej podivnej název…
Editoval LastHunter (14. 9. 2009 17:36)
- Ondřej Mirtes
- Člen | 1536
Tak jsem přišel na řešení, je to ale ultra-magie nezmíněná ani v tomto příspěvku: https://forum.nette.org/…agie-v-praxi
Default.default.phtml byla od @layoutu oddělená ještě jednou úrovní, @layout.homepage.html. Tak jsem před {extends} bloky přidal zavináče a už to jede:
Default.default.phtml:
@{extends @layout.homepage.phtml}
...
@layout.homepage.phtml (Proč zde musím uvádět extends, když by mělo fungovat automaticky? Očividně funguje jen přímo v šablonách konkrétních view):
@{extends @layout.phtml}
{block #content}