Jak na šablonu komponenty bez layoutu
- pekelnik
- Člen | 462
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
„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
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).
- pekelnik
- Člen | 462
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é…