Makro plink &deprecated query syntax
- Unlink
- Člen | 298
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
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
Á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)
- Unlink
- Člen | 298
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.
- Eda
- Backer | 220
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.
- David Grudl
- Nette Core | 8238
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
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
@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
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.