Postranní boxy – Jaká je Best Practice?
- semtex.989
- Člen | 75
Vrtá mi hlavou, jak co nejlogičtejši implementovat postranní boxy.
Nakonec jsem vytvořil model (ComponentContainer) Sideboxes, kterým se dá
iterovat a vrací jednotlivé modely Sidebox.
Presenter předá šabloně instanci Sideboxes, která nad ní iteruje
asi takto:
<?php
<div class="Column LeftColumn">
{if isset($sideboxes)}
{foreach $sideboxes as $sidebox}
{if $sidebox->isDisplayed() && $sidebox->isGroup('LeftSideboxes')}
<div class="SideBox">
<div class="SideBoxHeading">{$sidebox->getPublicBoxName()}</div>
<div class="SideBoxContent">
{include "@sideboxes/".$sidebox->getBoxName().".phtml", sidebox => $sidebox}
</div>
</div>
{/if}
{/foreach}
{/if}
?>
Nevím, ale jestli je to správné řešení, hlavně mi jde o řešení z hlediska presenteru a modelu
Editoval semtex.989 (26. 8. 2010 17:20)
- Jan Tvrdík
- Nette guru | 2595
Pokud je komponenta Sideboxes
skutečně modelem (přesněji
část modelu), tak je to špatně z hlediska návrhu. Pokud není modelem, tak
je terminologicky špatně označovat ji za model :)
Komponenta Sideboxes
by měla dědit od Controlu
a
mít vlastní šablonu. V presenteru by měla být továřnička
(createComponentSideboxes
) a v šabloně presenteru by mělo být
akorát {control sideboxes}
.
Komponenta Sideboxes
by mohla mít metody
renderLeft
a renderRight
, které budou sloužit pro
vykreslení levého a pravého sloupce. V šabloně presenteru pak bude
{control sideboxes:left}
resp.
{control sideboxes:right}
.
Samotný Sidebox
(spíš SideBoxItem
nebo tak
něco) by měl taky dědit od Controlu
a v šabloně komponenty
Sideboxes
by se měl vypisovat akorát jako
{control $sandbox}
.