CurlyBrackets foreach – SmartCachingI­terator

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

Zdravím, mám problém se SmartCachingIteratorem, když iteruji položky typu SimpleXMLElement .. Po přepsání do php to jede v poho

romansklenar
Člen | 655
+
0
-

Při použítí těchto značek se vytváří objekt SmartCachingIterator pro využití všech featurek jako isLast, isOdd apod. takže se zde vztahují i všechna jeho omezení, která má (viz jeho konstruktor).

Ola
Člen | 385
+
0
-

Jo, já vím, ale potřeboval bych to nějak vypnout, ten php kód je docela nepřehledný oproti CB (třeba přes wsforeach – without smart, nebo cforeach – classic foreach) ..

Jan Tvrdík
Nette guru | 2595
+
0
-

Stačí si upravit CurlyBracketsFilter::$macros.

David Grudl
Nette Core | 8228
+
0
-

Chybí tu to hlavní: jaký problém tam je?

Ola
Člen | 385
+
0
-

No ve SCI v podstatě žádný, jenom by bylo dobré, kdyby tam byl nějakej foreach nepoužívající právě pro tyhle případy (ten php foreach v šabloně se mi nelíbí a manuální úpravu $macros .. to už to snad radši nechám v tom php :))

Editoval Ola (8. 3. 2009 7:59)

Jan Tvrdík
Nette guru | 2595
+
0
-

Ola napsal(a): manuální úpravu $macros .. to už to snad radši nechám v tom php

Úprava $macros je zcela korektní a čistý způsob. Co ti na něm vadí?

David Grudl
Nette Core | 8228
+
0
-

Jo problém je v tom, že se ti nelíbí kód? Tak s takovým hlašením chyb běž… víš kam.

Ola
Člen | 385
+
0
-

Sorry :) Asi sem to měl dát spíš do feature request..

Jakub Šulák
Člen | 222
+
0
-

Dotaz trochu mimo výše uvedené příspěvky.

Není nějaká šikovná zkratka v CurlyBrackets pro foreach na omezení počtu průchodů?

Něco jako:

<?php
  {foreach $array as $value}
    {if $iterator->getCounter()<=2}
	<p>{$value}</p>
    {/if}
  {/foreach}

// zkratka
  {foreach:2 $array as $value}
    <p>{$value}</p>
  {/foreach}

?>

Typický příklad je výpis novinek, nebo produktů ve slevě, apod.

A další dotaz, pokud mám vnořené foreach, tak jak funguje proměnná $iterator?

David Grudl
Nette Core | 8228
+
0
-

Výpis novinek nebo produktů ve slevě by bylo rozumnější spíš omezit už na straně modelu, ne? Každopádně myslím, že jde o docela minoritní požadavek, takže speciální zkratku bych asi nepřidával.

Ve vnořených foreach patří $iterator vždy tomu nejbližšímu cyklu. Pokud bys potřeboval přistupovat k $iterator nadřazeného cyklu, tak je nejjednodušší si ho uložit do pomocné proměnné.

PetrP
Člen | 587
+
0
-

Mě by se spíš jednou za čas hodilo nějaké jednoduché opakovadlo:

{loop 10}
{/loop}

<!-- ano můžu použít např {for}, ale to je na víc ťukání ;] -->
Jan Tvrdík
Nette guru | 2595
+
0
-

PetrP napsal(a):

Mě by se spíš jednou za čas hodilo nějaké jednoduché opakovadlo:

{loop 10}
{/loop}

<!-- ano můžu použít např {for}, ale to je na víc ťukání ;] -->

Tak si to napiš pomocí $macros.