Dynamicky načítané presenery do odkazu
- Oli
- Člen | 1215
Zdravím,
chtěl jsem se zeptat jestli je možné psát dynamické odkazy. Že by nebyl
odkaz napevno napsaný, ale dynamicky načtený z databáze. Konkrétně mám
odkaz v kompponentě (proto plink, t en jedinej mě fungoval) a potřeboval
bych volat něco jako:
<h3><a href="{plink $dynamic->presenter_name:$dynamic->presenter_name|action $dynamic->slug}">{$dynamic->title}</a></h3>
z databáze se načte presenter: $dynamic->presetner_name
(např: News). Potom se uřízne poslední písmeno a převedou se všechny
písmena na malý (např. new). Výsledek by tedy
byl: News:new $dynamic->slug
Je takovéhle vytvaření odkazů vůbec možné? Případně jak ho docílit?
Díky moc
- Filip Procházka
- Moderator | 4668
Do databáze si uložíš název presenteru a argumenty, potom zavoláš s daty z databáze
$link = $presenter->lazyLink($nazevPresenteru, $argumenty);
Získáš objekt, který když převedeš na string, bude odkazem. Pokud se ti to nehodí, můžeš odkazy vytvářet rovnou
$link = $presenter->link($nazevPresenteru, $argumenty);
Potom si je v nějakém strukturovaném poli předáš do šablony a vykreslíš.
- Filip Procházka
- Moderator | 4668
Dělat tohle v šabloně je hloupé. Lepší je připravit si to v komponentě do pole a pak jen vykreslit.
- Oli
- Člen | 1215
Díky moc!
Tím lazyLink
em mě to nešlo. Tím linkem jsem to nějak udělal.
Asi to není uplně správné řešení. Udělal jsem si string bez slugu a ten
potom pripojil až v šabloně. Jinak bych musel procházet pole navíc
i v prsenteru. Řeším to tedy takhle:
v presenteru:
$link = $value->presenter_name.":".Strings::lower(($value->presenter_name == "News" ? $value->presenter_name : Strings::truncate($value->presenter_name, --$length, null)));
$this->link[$value->id] = $this->presenter->link($link);
$this->template->link = $this->link;
a v šabloně:
<div n:foreach="$dynamics as $dynamic">
...
<h3><a href="{$link[$dynamic->id]."/".$dynamic->slug}">{$dynamic->title}</a></h3>
</div>
- Filip Procházka
- Moderator | 4668
To je naprosto otřesné řešení, na tohle se používají filtry nad routami
- Oli
- Člen | 1215
Promin, ale nejak nechapu jak to muze pomoct. Je pravda, ze jsem se už dřív koukal na nějaký filtry, ale jaksi jsem to nepochopil, takže používám jen Route::FILTER_TABLE pro překlad. Mohl by jsi prosím trochu objasnit jak to v tomhle konkrétním případě pomůže? Třeba pak konečně pochopím jak se to vlastně používá :-)
- Filip Procházka
- Moderator | 4668
Uděláš si routu, které nastavíš dva filtry, tyto dva filtry budou
přijímat IDčko v parametru <slug>
a budou ho překládat
na cestu. Prostuduj si tohle
téma, třeba napoví (ber v úvahu, že je to psané pro dibi) – po
můj druhý příspěvěk, to s tím ModelsLoaderem
je
deprecated.