网上商城在产品详细页放上一件和下一件产品的链接在不少地方看到过,AW出品的收费插件卖89美元,不太值啊,自己写一个吧,总共就两个文件,一个php文件和一个phtml文件,刚好组成一个block。
php文件的代码:
<?php class Mage_Catalog_Block_Product_Pnnavigation extends Mage_Catalog_Block_Product_Abstract { public function getUponProduct($direction) { $visibility = array( Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH, Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG ); $_product = Mage::getResourceModel('reports/product_collection') ->addAttributeToSelect('*') ->addAttributeToFilter('visibility', $visibility) ->addCategoryFilter(Mage::registry('current_category')); if($direction=='previous'){ $_product->getSelect()->where('product_id<?',$this->getProduct()->getId()); }elseif($direction=='next'){ $_product->setOrder('product_id', 'asc'); $_product->getSelect()->where('product_id>?',$this->getProduct()->getId()); } $_product = $_product->getFirstItem(); return $_product; } public function getProduct() { if (!Mage::registry('product') && $this->getProductId()) { $product = Mage::getModel('catalog/product')->load($this->getProductId()); Mage::register('product', $product); } return Mage::registry('product'); } }
phtml的代码:
<div> <?php if($this->getUponProduct('previous')->getId()):?> <a href="<?php echo $this->getUponProduct('previous')->getProductUrl();?>">上一个</a> <?php endif;?> <?php if($this->getUponProduct('next')->getId()):?> <a href="<?php echo $this->getUponProduct('next')->getProductUrl();?>">下一个</a> <?php endif;?> </div>
php文件放在app/code/local/Mage/Catalog/Block/Product目录下,phtml文件放在app/design/frontend/default/default/template/catalog/product/view目录下,当然具体位置取决于你自己的模板。
然后在catalog.xml中添加这个block到产品详细页
<!-- Product view --> <catalog_product_view translate="label"> <label>Catalog Product View (Any)</label> ………………………………………………………………………… <reference name="content"> <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml"> <block type="catalog/product_pnnavigation" name="pnnavigation" template="catalog/product/view/previousnext.phtml"/> ………………………………………………………………………………………………
最后打开产品详细页的view.phtml,调用这个block,这里我把它放在产品名的下面
<div class="product-shop"> <div class="product-name"> <h1><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></h1> </div> <?php echo $this->getChildHtml('pnnavigation') ?> ……………………………………………………………………
OK,现在可以在前台看效果了,至于前台显示要怎么弄的好看就是个人自己的事了。
说明:我这里的上一个和下一个是指在当前分类下,相对于当前产品的上一个和下一个产品,以产品ID为顺序,当当前不存在上一个或下一个时(比如该分类的第一个或最后一个产品),即不显示对应的链接(比如第一个产品不显示“上一个”链接)。AW的插件貌似可以从最后一个再返回第一个,这个也不难,不过留给下个版本吧,嘿嘿。