2013-02-08 64 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;      
       } 
      } 
     } 
    }