当我们在为magento 开发手机模版的时候常常需要 将详细的图文消息放到另一页面,其中一个目的是 提高加载速度。 例如我们在productController.php 中创建一个新的Action叫做descAction 注:这里不会去提醒你 要重写模块而不是修改core 文件。 http://blog.csdn.net/m0sh1/article/details/40299847 先直接看代码:
public function descAction(){ $productId = (int) $this->getRequest()->getParam('id'); $_product = $_product=Mage::getModel('catalog/product')->load($productId); $_productUrl = $_product->getProductUrl(); $curPackage = Mage::getSingleton('core/design_package')->getPackageName(); $curTheme = Mage::getSingleton('core/design_package')->getTheme('frontend'); if($curPackage === "mobile" && $curTheme === "mobile"){ $this->loadLayout(); $this->renderLayout(); }else{ $this->_redirectUrl($_productUrl); } } 这里之所以做一个if判断 是因为不希望在电脑版的模板中额外分割出来一个产品描述页面。 但是不排除用户从手机访问了描述页面然后复制链接用电脑打开。
通过函数
Mage::getSingleton('core/design_package')->getPackageName(); 和 Mage::getSingleton('core/design_package')->getTheme('frontend'); 判断当前的package和theme 判断条件中的mobile要根据实际情况自己修改。 创建Block
<?php class Mobile_Block_Catalog_Product_Desc extends Mage_Catalog_Block_Product_Abstract{ } 之后我们在对应模板下的layout中找到catalog.xml 加入代码:
<catalog_product_desc> <reference name="root"> <action method="setTemplate"><template>page/1column.phtml</template></action> </reference> <reference name="head"> <action method="addJs"><script>varien/product.js</script></action> <action method="addCss"><script>css/media.css</script></action> </reference> <reference name="content"> <block type="mobile/catalog_product_desc" name="product.desc" template="catalog/product/desc.phtml"> <block type="catalog/product_view_description" name="product.description" as="description" template="catalog/product/view/description.phtml"> </block> </block> </reference> </catalog_product_desc>
同时创建 desc.phtml 用来前端显示:
<?php $id = (int) $this->getRequest()->getParam('id'); $_product=Mage::getModel('catalog/product')->load($id); ?> <?php echo "Product Info"?> <div class="product-specs"> <?php $_description = $_product->getDescription(); ?> // 不考虑带有mobile description <?php echo $this->helper('catalog/output')->productAttribute($_product, $_description, 'description') ?> </div> 至此再加上一些自己实际处理情况的代码就可以了。 (责任编辑:好模板) |