Vložit href jen když existuje hodnoat v proměnné
- Damo
- Člen | 56
Nedaří se mi vložit/nevložit plink pokud hodnota v proměnné existuje nebo ne.
Příklad
$item->href = "Device:"
nebo
$item->href = ""
v latte mám
...
<a
class="menu-item"
href=""
>
Item A
</a>
...
podminka na isset a plink pada na chybě o syntaxu. Jak dostat přeložený
odkaz do href pokud je $item->href naplněna. Pokud není naplněna, tak attr
href vůbec nepřidávat, popř. vložit „#“
Zkousel jsem
n:attr="href: {$item->href ? plink $item->href : '#'}"
, taktez mi ten plink nebere a padne to na chybě
Editoval Damo (17. 2. 2022 0:08)
- Marek Bartoš
- Nette Blogger | 1280
{if $item->href}href="{plink $item->href}"{else}something else{/if}
- petr.pavel
- Člen | 535
Nebo to posunout výš do presenteru (neprogramovat v šabloně):
$this->template->presenterLink = function (?string $destination): string {
if (empty($destination)) {
return '';
}
return $this->link($destination);
};
<a
class="menu-item"
href="{$presenterLink($item->href)}"
>
Item A
</a>
- dakur
- Člen | 493
@Damo Jak píše @petrpavel, tohle by v šabloně ideálně být nemělo. Pokud jde o jednotlivý výskyt, lepší je to udělat v render metodě presenteru, na výskyty např. uvnitř cyklu je možné přidat filtr:
public function renderDefault(): void
{
$this->template->addFilter('toUrl', function (?string $presenterAction): string {
return ($presenterAction === null || $presenterAction === '') // nevím, jestli prázdná hodnota je null, empty string nebo unset property
? ''
: $this->link($presenterAction);
});
}
{foreach $items as $item}
<a href="{$item->href|toUrl}">...</a>
{/foreach}
Hlavně ale nerozumím, proč u všeho všudy máš ve stringu v šabloně presenter a akci? To je podezřelé už samo o sobě… 🙂
Editoval dakur (17. 2. 2022 13:55)