Makro plink &deprecated query syntax

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

Zdravím, prechádzam na Nette 2.3 a v tejto verzii je query syntax deprecated.

Máme v databáze uložené linky vo formáte :Presenter:action?parameter=hodnota ktoré doteraz fungovali.

Chcel by som sa spýtať či existuje nejaká možnosť ako niečo takéto používať aj naďalej.

Myslím že by sa to mohlo ísť tak že si to v presenteri rozsekám a potom použijem $this->link($url, $parametre) ale moc sa mi to nepáči.

Používa niekto takto generované odkazy alebo je to podľa vás hlúposť.

Ďakujem

Šaman
Člen | 2666
+
0
-

Viz dokumentace
{plink :Presenter:action, parameter => hodnota}
Používáš moduly? Jestli ne, tak ta první dvojtečka je zbytečná.
Pokud má akce action jediný parametr, tak stačí jen {plink :Presenter:action, hodnota}, není třeba ho pojmenovávat, Nette si název zjistí samo.

Unlink
Člen | 298
+
0
-

Áno, to mi je jasné, problém je že ja to mám v databáze vo formáte Presenter:action?parameter=hodnota takže ten link potrebujem vytvárať dynamicky

Preto ma napadlo, že by som to proste rozdelil na Presenter:action a parameter=hodnota z čoho by som spravil to pole parametrov.

Ja len neviem či to je dobrý prístup to ukladať do databázy v takomto formáte a potom to takto sekať.

Doteraz to bolo používané ako {plink $item->url} čo ale teraz už možné nieje.

Editoval Unlink (3. 4. 2015 19:54)

Ondris
Člen | 37
+
0
-

Pokud nikoho nenapadne nějaký lepší řešení, tak bych aspoň ten převod ze stringu na plink schoval do filtru.

Unlink
Člen | 298
+
0
-

Nenapadá nikoho nič?
Alebo aspoň ako by sa to dalo čisto riešiť, lebo princíp ako by sa to dalo by bol

<?php
{if strstr($item->url, "?") !== FALSE}
     {var $l = explode("?", $item->url);$p = [];parse_str($l[1], $p)}
    <a href="{plink $l[0] (expand)$p}">{$item->text}</a>
{else}
    <a href="{plink $item->url}">{$item->text}</a>
{/if}
?>

Lebo toto robí presne čo potrebujem, ale nezdá sa mi to ako dobrý spôsob, díky.

Martk
Člen | 661
+
0
-

Jestli chceš zachovat query parametry, tak bych raději zakomentoval trigger_error, než tvořit prasárny.

Další zmiňované řešení je serializace parametrů do db a následná unserializace (Když se jedná pouze o jeden parameter, tak ukládání jako string).

Eda
Backer | 220
+
0
-

Myslím, že editace kódu Nette je prasárna největší :-)

Asi by bylo dobré to neřešit v šabloně, ale v nějaké službě/presenteru, kde se připravují data pro výpis. Buď tu podmínku, co jsi napsal do Latte, implementovat tam, nebo zvolit nějaký jiný způsob ukládání odkazů do databáze.

Unlink
Člen | 298
+
0
-

No veď to som uviedol len ako príklad, určite by som to radšej do presenteru presunul.
A ako inak by ste odporúčali ukladať tie odkazy, nič iné ma nenapadá.

David Grudl
Nette Core | 8238
+
+2
-

Fakt je, že pro ukládání do databáze je stará syntax vhodnější, asi by stálo za zvážení undeprecadnout ji…

Martk
Člen | 661
+
0
-

Spíše než zakomentování jsem měl napsat, ať si přepíše funkci link do svého BasePresenteru a tam převede query string na $args a následně ať to celé předá do rodiče.

	public function link($destination, $args = array()) {
    $a = strpos($destination, '?');
    if ($a !== FALSE) {
        parse_str(substr($destination, $a + 1), $args); // requires disabled magic quotes
        $destination = substr($destination, 0, $a);
    }

    return parent::link($destination, $args);
}
Unlink
Člen | 298
+
0
-

@Antik myslím že toho by mohlo byť fajn, diky za tip
@DavidGrudl to záleží od toho koľko ľudí potrebuje ukladať takéto odkazy do databázy, ja prevádzam jeden projekt ktorý som nevytvoril na najnovšie nette a máme tam takto riešené menu. Možno by to bolo fajn ponechať aj starú možnosť tvorby linkov.

David Kudera
Člen | 455
+
0
-

Když jsem tehdy mezi novinkami četl, že tenhle způsob tvoření odkazů už se nebude používat, tak mě to vůbec netrápilo. Vlastně jsem tehdy ani vůbec nevěděl, že to jde (mám pocit, že i David někde říkal nebo psal, že to stejně nikdo nezná)… No a až teď jsem si uvědomil, že vlastně mám taky odkazy v db a navíc docela pitomě a že tohle je vlastně možná ideální způsob.

Takže za mě, pokud se to vrátí, tak si nebudu ztěžovat a nejspíš bych to i použil.

Zax
Člen | 370
+
0
-

Pokud ukládám do db parametry, tak obvykle jako array v Doctrině. Tenhle způsob jsem taky neznal a taky se mi líbí víc, takže za mě určitě +1 pro undeprecate.