【问题标题】:Modify the existing canonical link in header修改标头中现有的规范链接
【发布时间】:2013-02-08 13:18:18
【问题描述】:

我正在使用 Joomla 2.5,我想更改标题中的规范链接。 我在类别视图中执行此操作(components/com_content/category/tmpl/default.php)

$url        = JURI::root();
$sch        = parse_url($url, PHP_URL_SCHEME);
$server     = parse_url($url, PHP_URL_HOST);
$canonical  = $this->escape($_SERVER['REQUEST_URI']);    
$document->addCustomTag('<link rel="canonical" href="'.$sch.'://'.$server.$canonical.'"/>');

它打印正确的规范,但它也将旧的规范链接留在那里,因此我在标题中有 2 个规范链接。

如何更改或删除旧的规范链接?

【问题讨论】:

    标签: joomla joomla2.5 canonical-link


    【解决方案1】:

    我发现以下内容适用于 Joomla! 3.2.1。可以直接修改

    $_links 
    

    JHtmlDocument 对象中的变量。

    我正在组件的特定视图中执行以下子集,因为 Joomla!提出来是不正确的。

    希望这会有所帮助。

        $document = JFactory::getDocument();
        foreach($document->_links as $key=> $value)
        {
            if(is_array($value))
            {
                if(array_key_exists('relation', $value))
                {
                    if($value['relation'] == 'canonical')
                    {                       
                        // we found the document link that contains the canonical url
                        // change it!
                        $canonicalUrl = 'http://www.something.com/index.php/component/my-component-name-here/?view=viewNameHere&amp;parameterNameHere=parameterValueUsedInTheViewRightNow
    
                        $document->_links[$canonicalUrl] = $value;
                        unset($document->_links[$key]);
                        break;                      
                    }
                }
            }
        }   
    

    【讨论】:

      【解决方案2】:

      您可能想要做的是如下所示:

      $doc_data = $document->getHeadData();
      $url        = JURI::root();
      $sch        = parse_url($url, PHP_URL_SCHEME);
      $server     = parse_url($url, PHP_URL_HOST);
      $canonical  = $this->escape($_SERVER['REQUEST_URI']); 
      $newtag     = '<link rel="canonical" href="'.$sch.'://'.$server.$canonical.'"/>'
      
      $replaced = false;
      foreach ($doc_data['custom'] as $key=>$c) {
          if (strpos($c, 'rel="canonical"')!==FALSE) {
              $doc_data['custom'][$key] = $newtag;
              $replaced = true;
          }
      }
      if (!$replaced) {
          $doc_data['custom'][] = $newtag;
      }
      
      $document->setHeadData($doc_data);
      

      这将从文档中获取所有当前的头部数据,包括您要替换的规范链接。它将搜索自定义集(我猜这将是),如果找到它,请将其替换为您的。如果它没有找到它,那么它会在最后加上它。以防万一。

      我可以立即看到的潜在问题:

      1. 如果标签包含带有单引号的 rel='canonical',则不会被找到,因此您可能需要对其进行调整。
      2. 标签可能被放置在我称之为$doc_data 的不同部分中。您可能需要发送var_dump($doc_data}; 来确认此数组中变量的位置。

      【讨论】:

      • 谢谢,我在想它是一些更新/删除特定标题链接的 joomla 功能。我将使用您的代码,如果有的话,我会找到更好的解决方案:) 谢谢!
      • 你好,我在 $doc_data 中没有规范。我从 $doc_data 打印了每个数组,包括 $doc_data['custom'] 这是空的
      • 这里可能发生的事情是在此之后添加第二个规范链接。可能的操作作为模板的一部分发生。如果可以更改此站点范​​围而不是仅更改类别页面,您可能希望将所有这些代码转移到模板的 index.php 文件中。至少,您可能希望在此文件中获取一次$doc_data,然后查看其中的所有内容。
      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多