出於seo的目的,想在產品查看頁面添加指向產品的鏈接,指向產品分類的鏈接,指向首頁的鏈接.順便料理一下alt,h1,title
等相關seo元素.社區版的magento在產品查看頁面做到這個還是比較容易的.magento官方的論壇上也有很多相關的
帖子.
http://www.magentocommerce.com/boards/viewthread/19476/
http://www.magentocommerce.com/boards/viewthread/18536/
http://www.magentocommerce.com/boards/viewthread/195254/
<?php echo $this -> getProduct ()-> getCategory ()-> getName () ?>
<?php
Mage :: getBlockSingleton ( 'catalog/navigation' )-> getCurrentCategory ()
?>
但是顯然,這些方法都不是非常讓人滿意的.存在這樣或那樣的問題.而且,如果在其它的產品詳細信息的模板中,這些有的根本就不能調用.
我的思路是先獲得產品,再由產品獲取分類.我說的只是思路,而且事實表明,要麼是我的思路不對,要麼是社區版的BUG,或許可能都不是BUG,不過我沒有花時間去跟蹤代碼.
magento中,第一個magento模塊都提供了helper類,而比較規範的寫法是在模板中通過這些helper類來進行一些操作.
獲取產品
$_helper = $this -> helper ('catalog')
$_product = $_helper -> getProduct();
獲取分類
$_category = $_product -> getCategory();
或
$_helper = $this -> helper ('catalog');
$_category = $_helper -> getCategory();
注,這個思路我自己驗證了,在某些模板中也是不行的.具體是BUG,還是其它的原因我還沒深入去看代碼.
//下面這個方法是通過產品來獲取分類的。其實我覺得應該把這個動作放在一個block中,然後再調用。
$_helper = $this->helper('catalog/output');
$_product = $this->getProduct();
$_pUrl = $_product -> getProductUrl();
$categories = $_product->getCategoryIds();
foreach($categories as $k => $_category_id) {
$_cat = Mage::getModel('catalog/category')->load($_category_id);
//$_cat->getName();
break;
}
//$_cat = $_product ->getCategory();
//$_cUrl = $_cat -> getUrl();
不過在magento的開發過程中,我們難免碰到這樣的問題,我們要的數據magento去沒有提供相應的API接口,這時我們可能需要修改相應的Block類,Model類來實現.爲了與magento的後續版本操持兼容性,最後不要直接編輯Magento的代碼文件,而應該在自己的代碼池(code pool)中,創建相應的名字空間(name space)來修改,最簡單的做法是利用magento默認的目錄優先級,把新代碼放到app/code/local/Mage的相應目錄下.
Model向數據庫要數據,BLock向Model要數據,helper則在模板和block,Model中起到溝通的作用.