Vlastní komponenta nebo makro nebo šablona
- Madaovi
- Člen | 1
Ahoj, Nette se učím od včera, čtu poctivě dokumentaci, ale jedna věc mi není jasná a pořád mi vrtá hlavou.
Řekněme, že bych chtěl udělat „komponentu“ která bude generovat boxík. Obsah boxíku budu předávat „komponentě“ jako parametry.
Př. boxíku:
<div class="box">
<img src="{$imgSrc}" alt={$title}>
<strong class="box__title">{$title}</strong>
<p class="box__text">{$text}</p>
</div>
Použití si představuji zhruba takto (vygeneruje dva boxíky za sebou):
{component box $imgSrc1, $title1, $text1}
{component box $imgSrc2, $title2, $text2}
Jak vytvořit takovouto „komponentu“, abych ji mohl používat
v šablonách? Měla by to být komponenta, kterou budu vkládat přes
{control ...}
? Nebo šablona, kterou budu vkládat přes
{include ...}
? Nebo vlastni makro, které budu vkládat přes
{mujBoxik ...}
? Nebo ještě něco jiného?
Můžete mi vysvětlit který způsob použít (z hlediska best practices) a proč právě ten? Jaké má vhodný způsob výhody/nevýhody oproti ostatním možnostem.
Díky
Editoval Madaovi (1. 10. 2016 18:01)
- Martk
- Člen | 661
{include …} – musíš psát umístění souboru
{control …} a {mujBoxik …} – Výhoda
mujBoxik oproti control je kratší zápis, ale jakmile budeš chtít strčit
hodně dat do proměnné text, tak budeš muset použít:
{capture $text1}
...
{/capture}
{control box $imgSrc1, $title1, $text1}
Asi před rokem a něco jsem narazil na doplněk od aleskafka component-macro , která má hezkou syntaxi, jelikož je to dlouho neudržované (pokoušel jsem se poslat pr) a potřeboval jsem tam udělat hodně změn, tak jsem vytvořil chováním stejnou komponentu, zjednodušil jsem to a vyházel pro mě zbytečné věci:
Instalace:
public function createTemplate() {
$template = parent::createTemplate();
$appDir; // Získej z DI
WebChemistry\Macros\ComponentMacro::install($template->getLatte()->getCompiler(), $appDir . '/latte-components');
return $template;
}
Syntax:
<Box n:component="imgSrc => xxx, title => title">
Text
</Box>
Soubor %appDir%/latte-components/box.latte:
<div class="box">
<img src="{$imgSrc}" alt={$title}>
<strong class="box__title">{$title}</strong>
<p class="box__text">{$_content}</p>
</div>
Editoval Antik (1. 10. 2016 18:37)
- iNviNho
- Člen | 352
Prepac som na cestach, ale odporucam checknut ako vytvarat komponenty je to pekne napisane :)