Vypsání og:image, og:video – vždy se definuje blok (v if i elseif naráz)

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

Zdravím,
chtěl bych si do hlavičky stránky v @layout.latte vypsat meta og:image a og:video, pokud samozřejmě mám obsah stránky video nebo obrázek.
V content.latte mám podmínku ve stylu

{define fb_image}
  {if (img)}
    {$baseUrl}{$content->url}
  {elseif (video)}
    {define fb_video}http://www.youtube.com/watch?v={$content->url}{/define}
  [/if}
{/define}

ovšem blok fb_video se definuje, ikdyž podmínka projde úspěšně → img == true.

Šlo by to řešit přes proměnný nebo nějak jinak jednodušeji?

Díky za rady a nápady.

jiri.pudil
Nette Blogger | 1034
+
+5
-

Já na to používám jednoduchou komponentu:

class OpenGraphControl extends Nette\Application\UI\Control
{

	/** @var Nette\Utils\Html[] */
	private $tags = [];


	public function addOgTag($property, $content)
	{
		$this->tags[] = Nette\Utils\Html::el('meta', [
			'property' => $property,
			'content' => $content,
		]);
		return $this;
	}


	public function render()
	{
		$el = Nette\Utils\Html::el();

		foreach ($this->tags as $tag) {
			$el->add($tag);
		}

		echo $el;
	}

}

V presenteru potom už jen přidám traitu s továrničkou a v action* metodě definuju tagy:

$this['openGraph']->addOgTag('og:video', 'http://www.youtube.com/watch?v=' . $this->content->url);
radekBrno
Člen | 61
+
0
-

Já to řeším takto:

{ifset $image}<meta property="og:image" content="{$image}" />{/ifset}

Patřičné proměnné plním přímo v render metodách. Mohu s tímto řešením někde narazit?

David Kudera
Člen | 455
+
0
-

radekBrno napsal(a):

Patřičné proměnné plním přímo v render metodách. Mohu s tímto řešením někde narazit?

No možná tak tím, že je to tak obecný a hodně používaný název proměnné, že bych musel pořád přemýšlet, jestli si ji můžu přepsat nebo ne.. Stejný problém, na který narážím třeba na proměnné $user, která je taky v templatě automaticky

Edit: čili mě osobně třeba přijde komponenta lepší. Má svoje vlastní proměnné, nikam jinam nezasahuje atd.

Editoval David Kudera (25. 8. 2014 11:37)

CZechBoY
Člen | 3608
+
0
-

@jiri.pudil jo díky. Komponenta mě nenapadla.
@radekBrno proměnným jsem se chtěl právě nějak vyhnout.