volání view komponenty uvnitř šablony komponenty
- Filip111
- Člen | 244
Zkouším napsat komponentu pro komentáře a trochu jsem se zamotal.
Mám komponentu comments, kde mám dvě view – klasický render, který
vypíše seznam příspěvků a renderAddForm, který vykreslí formulář pro
vložení nového příspěvku.
Pokud je chci volat seprátně, tak funguje:
{control comments}
{control comments:addForm}
Chtěl bych se ale zbavit druhého volání a dát ho dovnitř komponenty
samotné.
Lze zavolat jiné view této komponenty přímo uvnitř defaultní šablony
komponenty? Tedy komponentu vytvořím jako {control comments}, ale namísto
{control comments:addForm} použiji v šabloně komponenty comments
něco jako:
<h2>Komentáře</h2>
{* vypis komentaru *}
{foreach $list as $c}...{/foreach}
{* zavolani jinoho view teto komponenty *}
{control this:addForm}
Díky.
- Filip111
- Člen | 244
To mě napadlo – zkoušel jsem a to funguje a v případě komentářů je to nejspíš i rozumný řešení.
Přeci jen si ale říkám, co když nebudu chtít vypisovat nejen formulář, co když tam budu chtít mít víc prvků, nebo nějaký dynamický text z DB, nebo rovnou dva formuláře místo jednoho. Potom se mi hodí mít nový pohled.
Navíc jsem se v tom vrtal asi hodinu a zajímá mě jestli to opravdu jde nebo vymýšlím blbost.
- voda
- Člen | 561
Mohlo by fungovat {control $control:addForm}
. Nebo si přepiš
metodu Nette\Application\UI\Control::getWidget()
a přidej si tam zkratku na this
.
- voda
- Člen | 561
Můžeš to udělat podobně jako to je v Nette\Forms\Rendering\DefaultFormRenderer::render().
Pokud zavoláš render {widget comments}
bez parametrů, tak se ti
vykreslí komentáře a formulář nebo si budeš volat jen jednotlivé časti
{widget comments comments} {widget comments form}…
.