Zobrazení bloku přes více presenterů
- baki
- Člen | 21
Čaute,
chtěl jsem se zeptat, jakým způsobem by se dalo udělat vykreslení odkazu na
přihlášení, aby bylo viditelné ve vybraných šablonách různých
presenterů.
Snad jsem se vyjádřil dost jasně. Mohl bych to udělat tak, že to napíšu
přímo do té šablony, ale když mám to samé na dvou místech, snažím se
to udělat nějak elegantněji.
Díky za rady ;)
- baki
- Člen | 21
Jasně, ale ten widget (používám control) lze udělat jen pod tím daným presenterem, ne?
a dále řeším jakým elegantním způsobem zapsat do nějaké metody něco aby byl výsledek takovýto:
<a href="{link homepage:add}">Přidat článek</a> | <a href="{link sign:out}">Odhlásit se</a>
Editoval baki (29. 11. 2010 13:50)
- mkoubik
- Člen | 728
- pokud chceš použít control ve více presenterech, dej tovvárničku
(
createComponentXyz
) do společného předka těch presenterů (případně doBasePresenter
u). - to by šlo vyřešit opět komponentou ve společném předkovi s vlastní
šablonou (zbytečně složité), nebo předat šabloně objekt
Nette\Html
, ale musel bys to celé obalit např<p>
(inline prvky stejně musí být uvnitř nějakého blokového).
$add = Html::el('a')->href($this->link('Homepage:add'))->setText('Přidat článek');
$signout = Html::el('a')->href($this->link('Sign:out'))->setText('Odhlásit se');
$html = Html::el('p');
$html->add($add);
$html->add(Html::el('span')->setText(' | '));
$html->add($signout);
A $html
pak předat BasePresenter::beforeRender()
do šablony, ale nevim, jestli to není overkill.
Editoval mkoubik (29. 11. 2010 14:21)
- Tharos
- Člen | 1030
Nee, nebude. Tohle je prostě řešení čistě na úrovni šablon. Jedná-li se pouze o sdílení útržku HTML kódu, tak je IMHO zbytečné řešit to na úrovni Presenteru, na to přece stačí samotné šablony.
V templates/@login.latte
můžeš mít například:
<p><a href="{plink ...}">Přihlásit se</a></p>
V šabloně umístěné v templates/Default/default.latte
můžeš pak snadno zapsat:
{include '../@login.latte`}
To samé platí analogicky pro jakoukoliv šablonu view. Dej vědět – je to řešením Tvého problému, anebo jsem špatně pochopil zadání?
EDIT: V tom vkládaném kusu šablony můžeš snadno použít i makro plink s destination včetně modulu, takže se ten odkaz korektně vygeneruje prakticky odevšud, kam to vložíš.
Editoval Tharos (29. 11. 2010 15:21)