magento首页调用最新产品
在前面我们知道,magento的首页是执行的cms page页面,我们可以去后台 cms page管理首页内容,调用最新产品这个模块magento已经封装好了模块模型,我们只需要调用即可,在Design中的Layout Update XML(该内容区跟前面所有的xml模块一样)中写入:
<reference name="content"> <block type="catalog/product_new" name="home.catalog.product.new" alias="product_new" template="catalog/product/new.phtml" after="cms_page"> <action method="addPriceBlockType"> <type>bundle</type> <block>bundle/catalog_product_price</block> <template>bundle/catalog/product/price.phtml</template> </action> <action method="setColumnCount"> <count>4</count> </action> <action method="setProductsCount"> <count>4</count> </action> </block> </reference>
要想显示最新产品记得在后台产品管理中General中Set Product as New from Date设置下。
在调用新产品的这个block中有三个action 通过method的值可以看出他的意思,第二和第三个Acion分别是设置产品显示的列数和产品的显示个数
进入最新产品调用的模板文件catalog/product/new.phtml 现在的结构当然要根据目标站来调整下才行,那么还需要我们一个个对应么?当然不用,记得在讲magento首页内容调用那一节,我们把这个模块给跳过了。因为首页的产品调用布局和列表页是一样的,复制html即可。
magento首页调用特价产品(Special Products)
这个需要我们自己添加一个block块供我们调用,可参考new products的block类,建立文件app/code/core/Mage/Catalog/Block/Product/Special.php
<?php class Mage_Catalog_Block_Product_Special extends Mage_Catalog_Block_Product_Abstract { protected $_productsCount= null; const DEFAULT_PRODUCTS_COUNT = 5; protected function _beforeToHtml() { $todayDate = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT); $collection = Mage::getResourceModel('catalog/product_collection'); Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection); Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection); $collection = $this->_addProductAttributesAndPrices($collection) ->addStoreFilter() ->addAttributeToFilter('special_from_date',array('date'=> true,'to'=>$todayDate)) ->addAttributeToFilter('special_to_date',array('or'=>array(0=>array('date'=> true,'from'=>$todayDate),1=>array('is'=>new Zend_Db_Expr('null')))),'left') ->addAttributeToSort('special_from_date','desc') ->setPageSize($this->getProductsCount()) ->setCurPage(1); $this->setProductCollection($collection); return parent::_beforeToHtml(); } public function setProductsCount($count) { $this->_productsCount = $count; return $this; } public function getProductsCount() { if(null === $this->_productsCount) { $this->_productsCount = self::DEFAULT_PRODUCTS_COUNT; } return $this->_productsCount; } }
复制app/design/frontend/base/default/template/catalog/product/new.phtml到app/design/frontend/theme/default/template/catalog/product/special.phtml,修改为相应标题和产品显示数量
在后台首页的CMS Page模块添加调用代码:
<block type="catalog/product_special" name="home.catalog.product.special" alias="product_special" template="catalog/product/special.phtml" after="cms_page"> <action method="addPriceBlockType"> <type>bundle</type> <block>bundle/catalog_product_price</block> <template>bundle/catalog/product/price.phtml</template> </action> <action method="setColumnCount"> <count>4</count> </action> <action method="setProductsCount"> <count>4</count> </action> </block>
当然要想显示特价产品,在产品管理处还是要设置的,进入产品管理的Prices栏,Special Price和Special Price From Date都要设置,那么前台就会显示特价产品。