magento - 通过如何在magento的模板中获取到产品或产品分类的instance呢谈magento的helper类机制

    技术2022-05-19  26

    出于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)