Jak zařídit správně fungující ifCurrent při poli parametrů?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
stpnkcrk
Generous Backer | 190
+
0
-

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

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

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ě.

cuga
Člen | 210
+
0
-

podarilo se nekomu rozbehat to ifCurrent pro parametry?

David Grudl
Nette Core | 8218
+
0
-

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

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

Myslím, že mezi cestou a parametry musí být čárka:

{ifCurrent cajovyListek:zobrazit, 'url' => $row['curl']}
cuga
Člen | 210
+
0
-

nn, v carce to nebude, zkusil jsem ji pridat, ale houby houby zlata rybko :)

pmg
Člen | 372
+
0
-

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.

cuga
Člen | 210
+
0
-

co z toho plyne pro me? :) muzu to nejak resit, nebo spis to je na davida?

pmg
Člen | 372
+
0
-

David to určitě rychle fixne. Doporučuji čekat. :-)

cuga
Člen | 210
+
0
-

V nove revizi 248 uz to fakci :)

pmg
Člen | 372
+
0
-

Co jsem říkal? :-)

David Grudl
Nette Core | 8218
+
0
-

V tom jsem tentokrát v nevině

cuga
Člen | 210
+
0
-

Zajimave :) tak kdo teda v tom ma prsty??? ;) ja sem nic nemenil :)

pmg
Člen | 372
+
0
-

Co jsem viděl, jsou tam nějaké úpravy od Jakuba. A mám takové tušení, že ten problém byl nejspíš v něčem jiném, než jsem tipoval.

David Grudl
Nette Core | 8218
+
0
-

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

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. :-(

David Grudl
Nette Core | 8218
+
0
-

No taky me to zahadne vyreseni netesi, bude fajn, kdyz to prozkoumas

pmg
Člen | 372
+
0
-

Nakonec jsem usnul a zdálo se mi, žes odpověděl.

pmg
Člen | 372
+
0
-

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>
David Grudl
Nette Core | 8218
+
0
-

fixed

pmg
Člen | 372
+
0
-

Fajn, díky.