Vypsání og:image, og:video – vždy se definuje blok (v if i elseif naráz)
- CZechBoY
- Člen | 3608
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
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);
- David Kudera
- Člen | 455
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)