Jak na šablonu komponenty bez layoutu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
medhi
Generous Backer | 255
+
0
-

Ahoj,
podle všeho komponenty nemají vlastní layout, ale automaticky používají layout presenteru, který však z komponenty nejde nijak vypnout.
Rád bych šablonu komponenty zobrazil úplně zvlášť, bez layoutu nebo s jiným layoutem, jak na to?

Nette 0.9.5

pekelnik
Člen | 462
+
0
-

Imho komponenty žádný layout nepoužívají… nerad bych kecal… ale sám jsem se s tím že by mi komponenta natahovala nějaký layout nesetkal…

Pro inspiraci přikládám ukázkovou implementaci komponenty, která podporuje „views“:

<?php

namespace App;

use Nette\Application\Control;

abstract class BaseControl extends Control
{
	public function formatTemplateFile($view = NULL)
	{
		return preg_replace('~\.php$~Ui', ($view === NULL ? '' : '-'.$view).'.phtml', $this->getReflection()->getFilename());
	}

	public function render($view = NULL)
	{
		$this->template->setFile($this->formatTemplateFile($view));
		$this->template->render();
	}
}
?>
medhi
Generous Backer | 255
+
0
-

„Vlastní view“ mám právě taky, ale potřebuji ho volat přímo z šablony komponenty, asi takto:

<iframe src="{link photosForm!}"></iframe>

Nyní to tedy dělám přes signál,

	public function handlePhotosForm()
	{
		$this->renderTemplate = 'GalleryControlPhotosForm.phtml';
	}

který mi v render() nastaví správnou šablonu.

Bohužel obsah iframe není jen šablona komponenty, ale celý @layout.phtml, který obsahuje šablonu komponenty.

Já bych potřeboval, aby v iframe byla pouze šablona komponenty.

redhead
Člen | 1313
+
0
-

To je proto, že v iframe nevypisuješ jenom tu komponentu, ale celý presenter (se signálem). To znamená, že se vyrenderuje naprosto stejně jako kdyby si přišel na nějaký presenter, tedy i s layoutem. Možná můžeš zkusit v tom signálu layout vypnout přes setLayout(null) (nad presenterem).

medhi
Generous Backer | 255
+
0
-

$this->presenter->setLayout(NULL) bouhužel nefunguje, ani s FALSE :(

Šaman
Člen | 2635
+
0
-

Asi mi něco uniká, ale proč místo <iframe src="{link photosForm!}"></iframe> nevložíš na stránku přímo komponentu (widget)? Pak je to bez layoutu.

pekelnik
Člen | 462
+
0
-

Nějak nechápu proč používáš ten signál…

Nestačilo by použít obyčejné view a v něm pomocí setLayout() nebo {extends none} (tuším) prostě vykreslit jen šablonu?

Vykreslení šablony bez layoutu je normální věc stačí k tomu tuším neuvést {block #content} ale to záleží jak to máš udělané…

medhi
Generous Backer | 255
+
0
-

Šaman: Chci si udělat takový multiuploader, takže stránka musí je v pozadí nezávisle.
pekelnik: To by stačilo, ale já to mám celé v komponentě, takže bych to nerad nějak roztahoval mimo tu komponentu.

pekelnik
Člen | 462
+
0
-

@medhi – že je to celé komponenta mi uniklo, sry…