Joomla! Template Override:

OpenGraph-Tags im Artikel


Bei diesem Template Override handelt es sich um ein Override von "com_content / article" und ermöglicht es, einen Artikel mit entsprechenden OpenGraph-Tags zu befüllen ohne ein Plugin installieren zu müssen.

Folgende Artikelparameter sind notwendig:

  • Komplettes Beitragsbild (als .jpg)
  • Alternativer Text (komplettes Beitragsbild)
  • Meta-Beschreibung

Solltet ihr stattdessen lieber die Werte vom Einleitungsbild nutzen wollen, ändert die Zeile 32, 33 und 34 einfach wie folgt ab:

$doc->setMetaData('og:image', JUri::root() . $images->image_intro , 'property');
$doc->setMetaData('og:image:secure_url', JUri::root() . $images->image_intro , 'property');
$doc->setMetaData('og:image:alt', $images->image_intro_alt , 'property');

In Zeile 35 wird der MIME-Type des Bildes definiert. Hier haben wir uns für "image/jpeg" entschieden. Solltet ihr neben .jpg noch andere Bildformate nutzen, könnt ihr diese Zeile einfach löschen.

Nach gleichem Schema können dann weitere Metatags hinzugefügt, oder entfernt werden.

Im Screenshot haben wir die Ausgabe der Metatags mal in Schriftform dargestellt.

Benötigte Override-Dateien


  • <?php
    /**
     * @package     Joomla.Site
     * @subpackage  com_content
     *
     * @copyright   Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
     * @license     GNU General Public License version 2 or later; see LICENSE.txt
     */
    
    defined('_JEXEC') or die;
    
    JHtml::addIncludePath(JPATH_COMPONENT . '/helpers');
    
    // Create shortcuts to some parameters.
    $params  = $this->item->params;
    $images  = json_decode($this->item->images);
    $urls    = json_decode($this->item->urls);
    $canEdit = $params->get('access-edit');
    $user    = JFactory::getUser();
    $info    = $params->get('info_block_position', 0);
    
    // Check if associations are implemented. If they are, define the parameter.
    $assocParam = (JLanguageAssociations::isEnabled() && $params->get('show_associations'));
    JHtml::_('behavior.caption');
    
    // OpenGraph aus dem Artikel
    $doc = JFactory::getDocument();
    $doc->setMetaData('article:author', $this->item->author , 'property');
    $doc->setMetaData('article:published_time', JHtml::_('date', $this->item->publish_up, 'Y-m-d\TH:i:sO'), 'property');
    $doc->setMetaData('article:modified_time', JHtml::_('date', $this->item->modified , 'Y-m-d\TH:i:sO'), 'property');
    $doc->setMetaData('article:publisher', JUri::root(), 'property');
    $doc->setMetaData('og:image', JUri::root() . $images->image_fulltext , 'property');
    $doc->setMetaData('og:image:secure_url', JUri::root() . $images->image_fulltext , 'property');
    $doc->setMetaData('og:image:alt', $images->image_fulltext_alt , 'property');
    $doc->setMetaData('og:image:type', 'image/jpeg' , 'property');
    $doc->setMetaData('og:updated_time', JHtml::_('date', $this->item->modified , 'Y-m-d\TH:i:sO'), 'property');
    $doc->setMetaData('og:title', $this->item->title, 'property');
    $doc->setMetaData('og:type', 'article', 'property');
    $doc->setMetaData('og:description', $this->item->metadesc, 'property');
    $doc->setMetaData('og:locale', $this->item->language, 'property');
    $doc->setMetaData('og:url', $this->document->base, 'property');
    ?>
    <div class="item-page<?php echo $this->pageclass_sfx; ?>" itemscope itemtype="https://schema.org/Article">
    	<meta itemprop="inLanguage" content="<?php echo ($this->item->language === '*') ? JFactory::getConfig()->get('language') : $this->item->language; ?>" />
    	<?php if ($this->params->get('show_page_heading')) : ?>
    	<div class="page-header">
    		<h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1>
    	</div>
    	<?php endif;
    	if (!empty($this->item->pagination) && $this->item->pagination && !$this->item->paginationposition && $this->item->paginationrelative)
    	{
    		echo $this->item->pagination;
    	}
    	?>
    
    	<?php // Todo Not that elegant would be nice to group the params ?>
    	<?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') || $params->get('show_create_date')
    	|| $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') || $assocParam); ?>
    
    	<?php if (!$useDefList && $this->print) : ?>
    		<div id="pop-print" class="btn hidden-print">
    			<?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
    		</div>
    		<div class="clearfix"> </div>
    	<?php endif; ?>
    	<?php if ($params->get('show_title') || $params->get('show_author')) : ?>
    	<div class="page-header">
    		<?php if ($params->get('show_title')) : ?>
    			<h2 itemprop="headline">
    				<?php echo $this->escape($this->item->title); ?>
    			</h2>
    		<?php endif; ?>
    		<?php if ($this->item->state == 0) : ?>
    			<span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span>
    		<?php endif; ?>
    		<?php if (strtotime($this->item->publish_up) > strtotime(JFactory::getDate())) : ?>
    			<span class="label label-warning"><?php echo JText::_('JNOTPUBLISHEDYET'); ?></span>
    		<?php endif; ?>
    		<?php if ((strtotime($this->item->publish_down) < strtotime(JFactory::getDate())) && $this->item->publish_down != JFactory::getDbo()->getNullDate()) : ?>
    			<span class="label label-warning"><?php echo JText::_('JEXPIRED'); ?></span>
    		<?php endif; ?>
    	</div>
    	<?php endif; ?>
    	<?php if (!$this->print) : ?>
    		<?php if ($canEdit || $params->get('show_print_icon') || $params->get('show_email_icon')) : ?>
    			<?php echo JLayoutHelper::render('joomla.content.icons', array('params' => $params, 'item' => $this->item, 'print' => false)); ?>
    		<?php endif; ?>
    	<?php else : ?>
    		<?php if ($useDefList) : ?>
    			<div id="pop-print" class="btn hidden-print">
    				<?php echo JHtml::_('icon.print_screen', $this->item, $params); ?>
    			</div>
    		<?php endif; ?>
    	<?php endif; ?>
    
    	<?php // Content is generated by content plugin event "onContentAfterTitle" ?>
    	<?php echo $this->item->event->afterDisplayTitle; ?>
    
    	<?php if ($useDefList && ($info == 0 || $info == 2)) : ?>
    		<?php // Todo: for Joomla4 joomla.content.info_block.block can be changed to joomla.content.info_block ?>
    		<?php echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'above')); ?>
    	<?php endif; ?>
    
    	<?php if ($info == 0 && $params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
    		<?php $this->item->tagLayout = new JLayoutFile('joomla.content.tags'); ?>
    
    		<?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
    	<?php endif; ?>
    
    	<?php // Content is generated by content plugin event "onContentBeforeDisplay" ?>
    	<?php echo $this->item->event->beforeDisplayContent; ?>
    
    	<?php if (isset($urls) && ((!empty($urls->urls_position) && ($urls->urls_position == '0')) || ($params->get('urls_position') == '0' && empty($urls->urls_position)))
    		|| (empty($urls->urls_position) && (!$params->get('urls_position')))) : ?>
    	<?php echo $this->loadTemplate('links'); ?>
    	<?php endif; ?>
    	<?php if ($params->get('access-view')) : ?>
    	<?php echo JLayoutHelper::render('joomla.content.full_image', $this->item); ?>
    	<?php
    	if (!empty($this->item->pagination) && $this->item->pagination && !$this->item->paginationposition && !$this->item->paginationrelative) :
    		echo $this->item->pagination;
    	endif;
    	?>
    	<?php if (isset ($this->item->toc)) :
    		echo $this->item->toc;
    	endif; ?>
    	<div itemprop="articleBody">
    		<?php echo $this->item->text; ?>
    	</div>
    
    	<?php if ($info == 1 || $info == 2) : ?>
    		<?php if ($useDefList) : ?>
    				<?php // Todo: for Joomla4 joomla.content.info_block.block can be changed to joomla.content.info_block ?>
    			<?php echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'below')); ?>
    		<?php endif; ?>
    		<?php if ($params->get('show_tags', 1) && !empty($this->item->tags->itemTags)) : ?>
    			<?php $this->item->tagLayout = new JLayoutFile('joomla.content.tags'); ?>
    			<?php echo $this->item->tagLayout->render($this->item->tags->itemTags); ?>
    		<?php endif; ?>
    	<?php endif; ?>
    
    	<?php
    	if (!empty($this->item->pagination) && $this->item->pagination && $this->item->paginationposition && !$this->item->paginationrelative) :
    		echo $this->item->pagination;
    	?>
    	<?php endif; ?>
    	<?php if (isset($urls) && ((!empty($urls->urls_position) && ($urls->urls_position == '1')) || ($params->get('urls_position') == '1'))) : ?>
    	<?php echo $this->loadTemplate('links'); ?>
    	<?php endif; ?>
    	<?php // Optional teaser intro text for guests ?>
    	<?php elseif ($params->get('show_noauth') == true && $user->get('guest')) : ?>
    	<?php echo JLayoutHelper::render('joomla.content.intro_image', $this->item); ?>
    	<?php echo JHtml::_('content.prepare', $this->item->introtext); ?>
    	<?php // Optional link to let them register to see the whole article. ?>
    	<?php if ($params->get('show_readmore') && $this->item->fulltext != null) : ?>
    	<?php $menu = JFactory::getApplication()->getMenu(); ?>
    	<?php $active = $menu->getActive(); ?>
    	<?php $itemId = $active->id; ?>
    	<?php $link = new JUri(JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId, false)); ?>
    	<?php $link->setVar('return', base64_encode(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid, $this->item->language))); ?>
    	<p class="readmore">
    		<a href="<?php echo $link; ?>" class="register">
    		<?php $attribs = json_decode($this->item->attribs); ?>
    		<?php
    		if ($attribs->alternative_readmore == null) :
    			echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE');
    		elseif ($readmore = $attribs->alternative_readmore) :
    			echo $readmore;
    			if ($params->get('show_readmore_title', 0) != 0) :
    				echo JHtml::_('string.truncate', $this->item->title, $params->get('readmore_limit'));
    			endif;
    		elseif ($params->get('show_readmore_title', 0) == 0) :
    			echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE');
    		else :
    			echo JText::_('COM_CONTENT_READ_MORE');
    			echo JHtml::_('string.truncate', $this->item->title, $params->get('readmore_limit'));
    		endif; ?>
    		</a>
    	</p>
    	<?php endif; ?>
    	<?php endif; ?>
    	<?php
    	if (!empty($this->item->pagination) && $this->item->pagination && $this->item->paginationposition && $this->item->paginationrelative) :
    		echo $this->item->pagination;
    	?>
    	<?php endif; ?>
    	<?php // Content is generated by content plugin event "onContentAfterDisplay" ?>
    	<?php echo $this->item->event->afterDisplayContent; ?>
    </div>





Fehler melden

Bitte beachte unsere Datenschutzerklärung

Alle mit (*) markierten Felder werden benötigt um eine E-Mail zu senden.

E-Mail für Kontakt
Nachricht hier eingeben.
Dieses Feld wird benötigt.