Missing template file ‚1‘

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

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
+
0
-

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}