出于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();
$_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中起到沟通的作用.