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

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>&nbsp;</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>&nbsp;</td>
		<td>&nbsp;</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)