Filtrovat výpis proměnné v Latte šabloně

před 10 měsíci

egin_28
Člen | 9
+
0
-

Ahoj,

lze nějak filtrovat, kolik toho mám vypsat z proměnné do latte šablony? Něco jako SQL dotaz BETWEEN.

Rád bych v latte vypsal jen něco mezi určitými znaky/stringy z DB.

{foreach $foods as $food}
{$food|between „mezi timto“ and „a timto“}
{/foreach}

Nejlépe nějak takto :)

Díky

před 10 měsíci

duke
Člen | 643
+
+1
-

Pokud ti rozumím správně a jde ti o lexikografické filtrování, tak např. takto:

{foreach $foods as $food}
{continueIf $food < $from || $food >= $to}
{$food}
{/foreach}

Nicméně vhodnější je si to vyfiltrovat už v presenteru/komponentě.

před 10 měsíci

egin_28
Člen | 9
+
0
-

duke napsal(a):

Pokud ti rozumím správně a jde ti o lexikografické filtrování, tak např. takto:

{foreach $foods as $food}
{continueIf $food < $from || $food >= $to}
{$food}
{/foreach}

Nicméně vhodnější je si to vyfiltrovat už v presenteru/komponentě.

Díky, to by mi také pomohlo. Nicméně to asi používám špatně:

{var $test = 50}

{foreach $foodsFromHusa as $food}
  {continueIf $food->id == $test}
  {$food->foodFromHusa}
{/foreach}

Tento kód vrátí obsah z DB, přestože ve sloupci id žádná hodnota 50 není. Když to neguji, tak se nic nevrátí.

Asi půjdu cestou filtrování v presenteru.

Editoval egin_28 (24. 8. 2018 16:22)

před 10 měsíci

duke
Člen | 643
+
+1
-

Špatně jsi porozuměl tomu, co makro continueIf dělá. Dělá (podmíněně) totéž, co dělá php příkaz continue v cyklech (for, while, foreach, atp.). Tj. ukončí danou iteraci a pokračuje s příští (tj. přeskočí zbytek kódu do konce dané iterace cyklu). Tzn., že pokud – jak říkáš – ve sloupci id žádná hodnota 50 není, pak se continue nevykoná a tedy se to chová, jakobys tam žádné continueIf neměl. Kdyby tam hodnota 50 naopak byla, tak by ji to přeskočilo. Chceš-li to tedy omezit pouze na zobrazení položky s id 50, musíš tam mít:

{continueIf $food->id !== $test}

Editoval duke (24. 8. 2018 16:44)

před 10 měsíci

egin_28
Člen | 9
+
0
-

duke napsal(a):

Špatně jsi porozuměl tomu, co makro continueIf dělá. Dělá (podmíněně) totéž, co dělá php příkaz continue v cyklech (for, while, foreach, atp.). Tj. ukončí danou iteraci a pokračuje s příští (tj. přeskočí zbytek kódu do konce dané iterace cyklu). Tzn., že pokud – jak říkáš – ve sloupci id žádná hodnota 50 není, pak se continue nevykoná a tedy se to chová, jakobys tam žádné continueIf neměl. Kdyby tam hodnota 50 naopak byla, tak by ji to přeskočilo. Chceš-li to tedy omezit pouze na zobrazení položky s id 50, musíš tam mít:

{continueIf $food->id !== $test}

Ano, pochopil jsem to přesně obráceně. Děkuji za vysvětlení.