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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值