create component a sablony

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

zdravim dobre duse a nette guru-ov :)

mam takyto kod

	public function createComponentCatmenu($name) {
		if (is_null($this->catMenu))
			$this->catMenu = '';//createCatMenu();

		$template = new \Nette\Templates\Template(__DIR__.'/../templates/catmenu.phtml');
		$template->registerFilter(new \Nette\Templates\LatteFilter());

		$template->test= 'test';

		$template->render();
	}

v sablone mam

{control catmenu}

funkcia sa zavola, ked dam za $template->render prikaz exit; , vsetko funguje … teda akoze $template sa vyrenderuje a program skonci. ale ked nie, tak dostavam krasnu hlasku

InvalidArgumentException
Component with name 'catmenu' does not exist.

chapem, ze ked mam nieco ako $form = new AppForm; tak pouzijem return $form; a som v suchu. ale co mam vratit v mojom pripade? da sa to vobec? dik za napady

Panda
Člen | 569
+
0
-

Nedá, systém továrniček předpokládá, že budeš vytvářet objekt, který dědí od Component (resp. Control, pokud se jedná o vykreslitelnou komponentu). Až na tom objektu se volá metoda render, která má vykreslit šablonu.

Napsal bych to nějak takto:

Soubor CatMenu.php:

<?php
class CatMenu extends \Nette\Application\Control
{
	public function render()
	{
		// šablonu není potřeba ručně vytvářet
		$this->template->setFile(__DIR__ . '/catmenu.phtml');
		$this->template->test = 'test';
		// ...
		$this->template->render();
	}
}

A továrna:

protected function createComponentCatmenu()
{
	$menu = new CatMenu();
	// na tomto místě by se od komponenty vkládala data
	return $menu;
}
xr
Člen | 94
+
0
-

dik, tento system poznam, akurat som dufal, ze existuje nieco kratsie – v zmysle adresarovej a suborovej struktury – nechcel som vytvarat dalsie triedy a adresare (napr components) …

Panda
Člen | 569
+
0
-

Můžeš vytvořit jen jednu třídu, která bude reprezentovat obecnou komponentu založenou na šabloně.