Jak zařídit správně fungující ifCurrent při poli parametrů?
- stpnkcrk
- Generous Backer | 190
Zdravím!
Vytvářím odkazy a parametry jim předávám v podobě pole, např.:
<?php
$args = array(
'id' => 'profil',
'showPics' => TRUE,
...
);
?>
Syntaxe {link :Page: $args}
nefunguje, ale to se dá nahradit
{$presenter->link(':Page:', $args)}
.
Jak to ale udělat v případě, kdy potřebuji
{ifCurrent :Page: $args}
?
Pomocí
$presenter->getLastCreatedRequestFlag(':Page:', $args)
se mi to
nedaří. Víte někdo, jak na to?
- David Grudl
- Nette Core | 8218
Tam by se použilo
$presenter->getLastCreatedRequestFlag("current")
, zjišťuje to
info o posledním generovaném linku. Ale jelikož jsou hlášeny nějaké
feature-request ohledne ifCurrent, nemůžu zaručit, že tyto funkce se
nezmění.
- PetrP
- Člen | 587
skocourek napsal(a):
Zdravím!
Vytvářím odkazy a parametry jim předávám v podobě pole, např.:
Syntaxe
{link :Page: $args}
nefunguje, ale to se dá nahradit{$presenter->link(':Page:', $args)}
.
Toto se dá obejít takto (viz zde)
{link :Page: array() + $args}
Není to náka magie, v php to znamená defakto array_merge(array(),
$args).
A curlyBracket zde
testuje jestli řetězec začíná na array
a když ne tak to cele
obalí do array()
což způsobuje tu chybu. Jinak navrhovaná
syntaxe z hvězdičkou, alespoň podle zdrojového kódu nefunguje.
Jak to ale udělat v případě, kdy potřebuji
{ifCurrent :Page: $args}
?
By mělo fungovat stejně.
- David Grudl
- Nette Core | 8218
PetrP napsal(a):
Toto se dá obejít takto (viz zde)
{link :Page: array() + $args}
Upravil jsem filtr a není potřeba to obcházet.
- cuga
- Člen | 210
nicmene ten ifCurrent mi nefunguje ani tak… delam nekde chybu?
<?php
{foreach $result as $row}
<li{ifCurrent cajovyListek:zobrazit 'url' => $row['curl']} class="active"{/if}>
<a href="{plink zobrazit $row['curl']}" title="{$row['ctitle']}">{!$row['ctitle']}</a>
</li>
{/foreach}
?>
Editoval cuga (28. 3. 2009 0:50)
- pmg
- Člen | 372
Promiň, nevšiml jsem si otazníku za tou čárkou. Při vyhodnocování aktuálnosti požadavku se neodstraní parametry s výchozí hodnotou, takže pak počet nemusí sedět.
- David Grudl
- Nette Core | 8218
pmg napsal(a):
A mám takové tušení, že ten problém byl nejspíš v něčem jiném, než jsem tipoval.
Taky bych řek' ;) Hlavně že to dobře dopadlo a nikomu se nic nestalo!
- pmg
- Člen | 372
Nechci už s tím dál spamovat, ale nedá mi to. Původně jsem chtěl projevit trochu nejistoty, když jsem psal, že to David určitě fixne, ale nedařilo se mi to zformulovat.
Pokud to je tím, čím myslím, David to určitě rychle fixne.
To vyzní, jako že v opačném případě si s tím asi neporadí. :-)
Nebudu se už ptát, čím to teda bylo, ale když jsem to testoval, odpovídalo chybě v detekci defaultních parametrů. Asi to budu muset najít v changelogu, protože jinak nebudu spát. :-(
- pmg
- Člen | 372
Zdá se, že se opravdu nic nezměnilo. Pokud se parametr a
v odkazu uvede redundantně, nevyhodnotí se jako current.
TestPresenter.php
<?php
class TestPresenter extends Presenter
{
public function renderDefault($a = 1)
{
$this->layout = NULL;
}
}
Test.default.phtml
<pre>
<a href="{link this 'a' => 1}">a = 1</a>, <a href="{link this 'a' => 2}">a = 2</a>
this: {link this} {ifCurrent this}current{/if}
a = 1: {link this 'a' => 1} {ifCurrent this 'a' => 1}current{/if}
a = 2: {link this 'a' => 2} {ifCurrent this 'a' => 2}current{/if}
</pre>