0
votes

I am trying to access the metadata in an article I made. The article is being displayed under a menu item called News->website news which is a blog layout. go to the link of the article from the blog view (and other areas), I can't seem to access the metadata info.

I am using an override for the view.html for all categories in the com_content.

The reason why I was doing this is so that I can control each article, category and menus (I think I did menu) OG tags based on their description. The image part is because in the backend under metadata I added a field to select the image you want. My code reverts to what is set in $configuration file based on what you hard code put in there. Anyways, my code seems to only be showing me variables in OG for whats in the config file, except the title.

my code is like this for categories: //(lol) all the code is in the area that says og tags.

<?php

/** * @package Joomla.Site * @subpackage com_content * @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * HTML View class for the Content component * * @package Joomla.Site * @subpackage com_content * @since 1.5 */ class ContentViewCategory extends JViewLegacy

{
protected $state;
protected $items;
protected $category;
protected $children;
protected $pagination;
protected $lead_items = array();
protected $intro_items = array();
protected $link_items = array();
protected $columns = 1;
function display($tpl = null)
    {
    $app = JFactory::getApplication();
    $user = JFactory::getUser();

    // Get some data from the models

    $state = $this->get('State');
    $params = $state->params;
    $items = $this->get('Items');
    $category = $this->get('Category');
    $children = $this->get('Children');
    $parent = $this->get('Parent');
    $pagination = $this->get('Pagination');

    // Check for errors.

    if (count($errors = $this->get('Errors')))
        {
        JError::raiseError(500, implode("\n", $errors));
        return false;
        }

    if ($category == false)
        {
        return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND'));
        }

    if ($parent == false)
        {
        return JError::raiseError(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND'));
        }

    // Setup the category parameters.

    $cparams = $category->getParams();
    $category->params = clone ($params);
    $category->params->merge($cparams);

    // Check whether category access level allows access.

    $user = JFactory::getUser();
    $groups = $user->getAuthorisedViewLevels();
    if (!in_array($category->access, $groups))
        {
        return JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR'));
        }

    // PREPARE THE DATA
    // Get the metrics for the structural page layout.

    $numLeading = $params->def('num_leading_articles', 1);
    $numIntro = $params->def('num_intro_articles', 4);
    $numLinks = $params->def('num_links', 4);

    // Compute the article slugs and prepare introtext (runs content plugins).

    for ($i = 0, $n = count($items); $i < $n; $i++)
        {
        $item = & $items[$i];
        $item->slug = $item->alias ? ($item->id . ':' . $item->alias) : $item->id;

        // No link for ROOT category

        if ($item->parent_alias == 'root')
            {
            $item->parent_slug = null;
            }

        $item->catslug = $item->category_alias ? ($item->catid . ':' . $item->category_alias) : $item->catid;
        $item->event = new stdClass();
        $dispatcher = JDispatcher::getInstance();

        // Old plugins: Ensure that text property is available

        if (!isset($item->text))
            {
            $item->text = $item->introtext;
            }

        JPluginHelper::importPlugin('content');
        $results = $dispatcher->trigger('onContentPrepare', array(
            'com_content.category', &$item, &$this->params,
            0
        ));

        // Old plugins: Use processed text as introtext

        $item->introtext = $item->text;
        $results = $dispatcher->trigger('onContentAfterTitle', array(
            'com_content.category', &$item, &$item->params,
            0
        ));
        $item->event->afterDisplayTitle = trim(implode("\n", $results));
        $results = $dispatcher->trigger('onContentBeforeDisplay', array(
            'com_content.category', &$item, &$item->params,
            0
        ));
        $item->event->beforeDisplayContent = trim(implode("\n", $results));
        $results = $dispatcher->trigger('onContentAfterDisplay', array(
            'com_content.category', &$item, &$item->params,
            0
        ));
        $item->event->afterDisplayContent = trim(implode("\n", $results));
        }

    // Check for layout override only if this is not the active menu item
    // If it is the active menu item, then the view and category id will match

    $active = $app->getMenu()->getActive();
    if ((!$active) || ((strpos($active->link, 'view=category') === false) || (strpos($active->link, '&id=' . (string)$category->id) === false)))
        {

        // Get the layout from the merged category params

        if ($layout = $category->params->get('category_layout'))
            {
            $this->setLayout($layout);
            }
        }

    // At this point, we are in a menu item, so we don't override the layout

    elseif (isset($active->query['layout']))
        {

        // We need to set the layout from the query in case this is an alternative menu item (with an alternative layout)

        $this->setLayout($active->query['layout']);
        }

    // For blog layouts, preprocess the breakdown of leading, intro and linked articles.
    // This makes it much easier for the designer to just interrogate the arrays.

    if (($params->get('layout_type') == 'blog') || ($this->getLayout() == 'blog'))
        {
        $max = count($items);

        // The first group is the leading articles.

        $limit = $numLeading;
        for ($i = 0; $i < $limit && $i < $max; $i++)
            {
            $this->lead_items[$i] = & $items[$i];
            }

        // The second group is the intro articles

         . $limit = $numLeading + $numIntro;

        // Order articles across, then down (or single column mode)

        for ($i = $numLeading; $i < $limit && $i < $max; $i++)
            {
            $this->intro_items[$i] = & $items[$i];
            }

        $this->columns = max(1, $params->def('num_columns', 1));
        $order = $params->def('multi_column_order', 1);
        if ($order == 0 && $this->columns > 1)
            {

            // call order down helper

            $this->intro_items = ContentHelperQuery::orderDownColumns($this->intro_items, $this->columns);
            }

        $limit = $numLeading + $numIntro + $numLinks;

        // The remainder are the links.

        for ($i = $numLeading + $numIntro; $i < $limit && $i < $max; $i++)
            {
            $this->link_items[$i] = & $items[$i];
            }
        }

    $children = array(
        $category->id => $children
    );

    // Escape strings for HTML output

    $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx'));
    $this->maxLevel = $params->get('maxLevel', -1);
    $this->assignRef('state', $state);
    $this->assignRef('items', $items);
    $this->assignRef('category', $category);
    $this->assignRef('children', $children);
    $this->assignRef('params', $params);
    $this->assignRef('parent', $parent);
    $this->assignRef('pagination', $pagination);
    $this->assignRef('user', $user);
    $this->_prepareDocument();
    parent::display($tpl);
    }

/**      * Prepares the document     */
protected
function _prepareDocument()
    {
    $app = JFactory::getApplication();
    $menus = $app->getMenu();
    $pathway = $app->getPathway();
    $title = null;

    // Because the application sets a default page title,
    // we need to get it from the menu item itself

    $menu = $menus->getActive();
    if ($menu)
        {
        $this->params->def('page_heading', $this->params->get('page_title', $menu->title));
        }
      else
        {
        $this->params->def('page_heading', JText::_('JGLOBAL_ARTICLES'));
        }

    $id = (int)@$menu->query['id'];
    if ($menu && ($menu->query['option'] != 'com_content' || $menu->query['view'] == 'article' || $id != $this->category->id))
        {
        $path = array(
            array(
                'title' => $this->category->title,
                'link' => ''
            )
        );
        $category = $this->category->getParent();
        while (($menu->query['option'] != 'com_content' || $menu->query['view'] == 'article' || $id != $category->id) && $category->id > 1)
            {
            $path[] = array(
                'title' => $category->title,
                'link' => ContentHelperRoute::getCategoryRoute($category->id)
            );
            $category = $category->getParent();
            }

        $path = array_reverse($path);
        foreach($path as $item)
            {
            $pathway->addItem($item['title'], $item['link']);
            }
        }

    $title = $this->params->get('page_title', '');
    if (empty($title))
        {
        $title = $app->getCfg('sitename');
        }
    elseif ($app->getCfg('sitename_pagetitles', 0) == 1)
        {
        $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename') , $title);
        }
    elseif ($app->getCfg('sitename_pagetitles', 0) == 2)
        {
        $title = JText::sprintf('JPAGETITLE', $title, $app->getCfg('sitename'));
        }

    $this->document->setTitle($title);
    $this->document->setTitle($title);

    // #####################ADDS OG TAGS##############################

    $this->document->addCustomTag('<meta property="og:site_name" content="ClearLove" />');
    $this->document->addCustomTag('<meta property="og:title" content="' . $title . '" />');
    $this->document->addCustomTag('<meta property="og:url" content="' . JURI::current() . '" />');
    if ($this->category->ogimages)
        {
        $ogimages = $this->category->ogimages;
        }
    elseif (!$this->category->ogimages && $this->params->get('menu-meta_ogimages'))
        {
        $ogimages = $this->params->get("menu-meta_ogimages");
        }
    elseif ($app->getCfg("ogimages"))
        {
        $ogimages = $app->getCfg("ogimages");
        }

    // #####################ADDS OG TAGS FOR DESC##############################

    if ($this->category->metadesc)
        {
        $this->document->setDescription($this->category->metadesc);
        $this->document->addCustomTag('<meta property="og:description" content="' . $this->category->metadesc . '" />');
        }
    elseif (!$this->category->metadesc && $this->params->get('menu-meta_description'))
        {
        $this->document->setDescription($this->params->get('menu-meta_description'));
        $this->document->addCustomTag('<meta property="og:description" content="' . $this->params->get("menu-meta_description") . '" />');
        }
    elseif ($app->getCfg("MetaDesc"))
        {
        $this->document->addCustomTag('<meta property="og:description" content="' . $app->getCfg("MetaDesc") . '" />');
        }

    // #####################ADDS OG TAGS FOR IMAGE##############################

    if (!preg_match("/http:\/\//", $ogimages) && !("www." == substr($ogimages, 0, 4)) && $ogimages)
        {
        $ogimages = 'http://www.clearlove.ca/' . $ogimages;
        }

    if ($ogimages)
        {
        $ogimage_atribs = getimagesize($ogimages);
        $this->document->addCustomTag('<meta property="og:image" content="' . $ogimages . '" />');
        $this->document->addCustomTag('<meta property="og:image:type" content="' . image_type_to_mime_type($ogimage_atribs[2]) . '" />');
        $this->document->addCustomTag('<meta property="og:image:width" content="' . $ogimage_atribs[0] . '" />');
        $this->document->addCustomTag('<meta property="og:image:height" content="' . $ogimage_atribs[1] . '" />');
        }

    // #####################DONE ADDING TAGS##############################

    if ($this->category->metakey)
        {
        $this->document->setMetadata('keywords', $this->category->metakey);
        }
    elseif (!$this->category->metakey && $this->params->get('menu-meta_keywords'))
        {
        $this->document->setMetadata('keywords', $this->params->get('menu-meta_keywords'));
        }

    if ($this->params->get('robots'))
        {
        $this->document->setMetadata('robots', $this->params->get('robots'));
        }

    if ($app->getCfg('MetaAuthor') == '1')
        {
        $this->document->setMetaData('author', $this->category->getMetadata()->get('author'));
        }

    $mdata = $this->category->getMetadata()->toArray();
    foreach($mdata as $k => $v)
        {
        if ($v)
            {
            $this->document->setMetadata($k, $v);
            }
        }

    // Add feed links

    if ($this->params->get('show_feed_link', 1))
        {
        $link = '&format=feed&limitstart=';
        $attribs = array(
            'type' => 'application/rss+xml',
            'title' => 'RSS 2.0'
        );
        $this->document->addHeadLink(JRoute::_($link . '&type=rss') , 'alternate', 'rel', $attribs);
        $attribs = array(
            'type' => 'application/atom+xml',
            'title' => 'Atom 1.0'
        );
        $this->document->addHeadLink(JRoute::_($link . '&type=atom') , 'alternate', 'rel', $attribs);
        }
    }
}
1

1 Answers

0
votes

Not sure if this is what you want to hear, but: If you want to add opengraph-data to your views, you are probably better off doing it in a plugin. There exists plugins doing just this (like Easy open graph), perhaps study how they are solving this to get ideas how to do it.