Postranní boxy – Jaká je Best Practice?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
semtex.989
Člen | 75
+
0
-

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
+
0
-

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}.

semtex.989
Člen | 75
+
0
-

Moc děkuji za vyjádření