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都要设置,那么前台就会显示特价产品。