dve podminky v ifCurrent makru

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

Cau,

potreboval bych vlozit dve podminky do makra ifCurrent.

<?php
{ifCurrent Stranky:stranka1 or Stranky:stranka2}
?>

zkousel jsem i

<?php
{ifCurrent Stranky:stranka1|Stranky:stranka2}
?>

ale to take nefunguje

Aurielle
Člen | 1281
+
+1
-

Co zkusit.. ?

{ifCurrent Stranky:stranka1}kód{else}{ifCurrent Stranky:stranka2}{/if}{/if}

Lepší možnost mě momentálně nenapadá :/

Lopata
Člen | 139
+
0
-

Taky moc nevim, ale co třeba

{if $presenter->name == 'Stranky:stranka1' or ...}xyz{/if}

Rozhodně to neni pěkné, ale funguge :-/

Ondřej Mirtes
Člen | 1536
+
0
-

Tohle nefunguje, to by znamenalo, ze se hleda presenter ‚stranka1‘ (vsimni si maleho pismene) uvnitr modulu Stranky.

jansfabik
Člen | 193
+
0
-
{if in_array($presenter->getAction(TRUE), array(':Stranky:stranka1', ':Stranky:stranka2'))}

(nezkoušel jsem to, ale mělo by to fungovat)

je to hroznej zápis, ale můžeš si na to napsat makro

jansfabik
Člen | 193
+
0
-

pro jistotu sem dám i to makro

tohle si dej do BasePresenteru:

public function templatePrepareFilters($template)
{
    parent::templatePrepareFilters($template);

    LatteMacros::$defaultMacros['ifCurrentIn'] = '<?php if (in_array(ltrim($presenter->getAction(TRUE), ":"), array(%%))): ?>';
}

a tohle napíšeš v šabloně:

{ifCurrentIn 'Stranky:stranka1', 'Stranky:stranka2'}
...
{/if}
error414-c
Člen | 45
+
0
-

<?php if (in_array(ltrim($presenter->getAction(TRUE), „:“), array(%%))): ?>

tohle me vyhodi syntax error, nei to nejaka silenost pro php5.3?

Honza Marek
Člen | 1664
+
0
-

error414-c napsal(a):

<?php if (in_array(ltrim($presenter->getAction(TRUE), „:“), array(%%))): ?>

tohle me vyhodi syntax error, nei to nejaka silenost pro php5.3?

Takovýhle komentáře jsou super. Syntax error může být způsoben třeba chybným použitím toho makra. Což ale nemůžeme poznat, když nevidíme, co se ti v šabloně vygenerovalo. To ti ukáže hned laděnka. Taky je otázka, proč to nepoznáš sám?

Pokud máš podezření na to, že výše uvedená konstrukce funguje jen v php 5.3, rád bych věděl, kterou konkrétně část máš na mysli, že by to mohla způsobovat?

Na závěr mi už jen vrtá hlavou, odkdy je php 5.3 šílenost.

error414-c
Člen | 45
+
0
-

nevsiml jsem si uvozovek kolem adresy na presenter ‚Stranky:stranka1‘.

BTW: kde se v manualu doctu jak funguje ta konstrukce

<?php if (in_array(ltrim($presenter->getAction(TRUE), „:“), array(%%))): ?>

rozhodne to neni validni php kod ale nejaky pseudo kod.

jansfabik: moc dik ted uz to funguje paradne

Editoval error414-c (9. 5. 2010 20:15)

redhead
Člen | 1313
+
0
-

validní je kromě %%, za které se dosadí parametry toho makra (‚Stranky:stranka1‘, ‚Stranky:stranka2‘)

error414-c
Člen | 45
+
0
-

redhead: jj, diky, uz se vtom zacinam orientovat, opravdu kralovstvi a pul kone za pouzitelny manual. :)

jansfabik
Člen | 193
+
0
-
BTW: kde se v manualu doctu jak funguje ta konstrukce

<?php if (in_array(ltrim($presenter->getAction(TRUE), ":"), array(%%))): ?>

LatteMacros je třída, která přepisuje všechny značky {block ...}, {link ...} apod. na PHP kód. Tyhle značky se definují v poli $defaultMacros. Tahle featura není moc zdokumentovaná, musíš si ji odvodit ze zdrojového kódu.

Ty dvě procenta se nahradí tím kódem, co uvedeš {ifCurrentIn tady }. To znamená:

<?php if (in_array(ltrim($presenter->getAction(TRUE), ":"), array('Stranky:stranka1', 'Stranky:stranka2'))): ?>
  • $presenter->getAction(TRUE) vrací absolutní cestu akce (:Stranky:stranka1)
  • ltrim odstraní dvojtečku na začátku
  • in_array ověří zda to pole array('Stranky:stranka1', 'Stranky:stranka2') obsahuje tu cestu
error414-c
Člen | 45
+
0
-

jansfabik: parada moc diky

ricco24
Člen | 141
+
0
-

Chcel by som sa spýtať či sa nenašlo nejaké iné riešenie tohoto porblému.
Menilo sa niečo za ten čas ktorý uplynul od odpovede ?

Keď zaregistrujem filter v base prezentery a použijem ho v sablone, tak sa mi neda uzavriet žiadnym z makier {/if} {/ifCurrent} {/ifCurrentIn}

vypise mi chybu ze Unexpected macro.

Editoval ricco24 (23. 3. 2011 14:25)

jtousek
Člen | 951
+
0
-

Přímo v kódu Latte maker jen ifCurrent napsáno: deprecated; use n:class=„$presenter->linkCurrent ? …“.

Což znamená volání této metody: https://api.nette.org/…ent.php.html#316

Jinak se to řešilo tady ale zatím bez výsledku.

iqtq
Člen | 20
+
0
-

ricco24 napsal(a):

Chcel by som sa spýtať či sa nenašlo nejaké iné riešenie tohoto porblému.
Menilo sa niečo za ten čas ktorý uplynul od odpovede ?

Keď zaregistrujem filter v base prezentery a použijem ho v sablone, tak sa mi neda uzavriet žiadnym z makier {/if} {/ifCurrent} {/ifCurrentIn}

vypise mi chybu ze Unexpected macro.

Zkus přidat ještě jedno makro:

LatteMacros::$defaultMacros['/ifCurrentIn'] = '<?php endif ?>';
Kranox
Člen | 9
+
0
-

Ak by to malo platiť pre všetky „podstránky“ daného presenteru Stranky

{ifCurrent Stranky:*}class="aktivne_menu"{/ifCurrent}

a je takisto možné použiť aj makro n:class ak len pre určité podstránky

n:class="$presenter->isLinkCurrent('Stranky:stranka1') || $presenter->isLinkCurrent('Stranky:stranka2') ? aktivne_menu"
Felix
Nette Core | 1245
+
0
-

Nebo lze pouzit upravne makro

https://gist.github.com/3093226