magento - 通過如何在magento的模板中獲取到產品或產品分類的instance呢談magento的helper類機制

出於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中起到溝通的作用.



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章