当我们在为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>
至此再加上一些自己实际处理情况的代码就可以了。