Makro na automatické doplnění prázdných buněk do tabulky
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Tori
- Člen | 32
V docs jsem našla super věc, totiž makra {first}
a
{last}
s parametry, které zalamují řádky tabulky po n
iteracích cyklu. Jen mi ještě chybělo doplnění prázdných buněk, pokud
počet prvků není beze zbytku dělitelný počtem sloupců (ale možná jsem
málo hledala). Tak třeba se to někomu hodí.
Šablona:
{var $sloupcu = 4}
{foreach [1,2,3,4,5,6] as $text}
{first}<table>{/first}
{first $sloupcu}<tr>{/first}
<td>{$text}</td>
{fill $sloupcu}<td> </td>{/fill}
{last $sloupcu}</tr>{/last}
{last}</table>{/last}
{/foreach}
Výstup:
<table>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
<td> </td>
<td> </td>
</tr>
</table>
Makro:
$template->onPrepareFilters[] = function($template) {
$template->registerFilter($latte = new Nette\Latte\Engine);
$set = new Nette\Latte\Macros\MacroSet($latte->compiler);
$set->addMacro(
'fill',
function($node, $writer) {
return $writer->write('if ($iterator->isLast() && $iterator->counter % '.$node->args.'): ob_start()');
},
function($node, $writer) {
return $writer->write('echo str_repeat(ob_get_clean(), ('.$node->args.' - $iterator->getCounter() % '.$node->args.')); endif;');
}
);
};
Editoval Tori (10. 1. 2013 23:20)