2013-02-08 59 views
2

我使用的是Joomla 2.5,我想更改标题中的规范链接。 我这样做是在分类视图(分量/ com_content /分类/ 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个规范链接标题。

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

回答

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};以确认此阵列中变量的位置。
+0

谢谢,我想这是一些joomla functia更新/删除特定的标题链接。我会用你的代码ti'll我找到一个更好的解决方案,如果是一个:)谢谢! – Claudiu 2013-02-08 16:29:31

+0

你好,我没有$ doc_data中的规范。我从$ doc_data打印每个数组,包括$ doc_data ['custom']这是空的 – Claudiu 2013-02-11 09:58:07

+1

这里可能发生的情况是,在这之后第二个规范链接被添加。可能的操作正在发生,作为您的模板的一部分。如果可以更改此网站而不仅仅是类别页面,则可能需要将所有这些代码转换为模板的index.php文件。 至少,你会想在这个文件中抓住'$ doc_data'一次,看看那里有什么。 – 2013-02-11 17:38:52

3

我发现以下为Joomla工作! 3.2.1。您可以直接修改JHtmlDocument对象中的变量

$_links 

变量。

我在组件的特定视图中执行以下操作的子集,因为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;      
       } 
      } 
     } 
    }