2016-02-18 47 views
0

我正在尝试访问我制作的文章中的元数据。该文章正在被称为News->网站新闻的菜单项下显示,该新闻是博客版面。去博客视图(和其他领域)文章的链接,我似乎无法访问元数据信息。PHP joomla在com_content中获取元数据

我对com_content中的所有类别使用view.html的覆盖。

我这样做的原因是,我可以根据他们的描述来控制每篇文章,类别和菜单(我认为我做了菜单)OG标记。图像部分是因为在元数据的后端,我添加了一个字段来选择你想要的图像。我的代码根据你在那里设置的硬编码恢复到$配置文件中设置的内容。无论如何,我的代码似乎只是在OG中显示配置文件中的变量,除了标题。

我的代码是这样的类别: //(大声笑)所有的代码是在og标签的区域。

<?php 

/** * @package Joomla.Site * @subpackage com_content * @copyright版权所有(C)2005年至2014年开源事项,公司保留所有权利。 *许可GNU通用公共许可证版本2或更高版本;请参阅LICENSE.txt */ defined('_ JEXEC')或die; /** * HTML查看的内容组件类* @package Joomla.Site * @subpackage com_content * @since 1.5 */ 类ContentViewCategory扩展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); 
     } 
    } 
} 

回答

0

不知道这是否是你想要什么听到,但:如果你想添加opengraph数据到你的意见,你可能会更好的做一个插件。有这样做的插件(如Easy open graph),也许研究他们如何解决这个问题,以获得想法如何做到这一点。