Vložit href jen když existuje hodnoat v proměnné

Damo
Člen | 54
+
0
-

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 | 1167
+
+1
-
{if $item->href}href="{plink $item->href}"{else}something else{/if}
petr.pavel
Člen | 535
+
0
-

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>
Ozzrel
Generous Backer | 51
+
0
-

Ahoj, není na to určen tento příkaz?

https://latte.nette.org/cs/tags#…

dakur
Člen | 493
+
0
-

@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)