![]() |
|
|||||||
|
|
Thread Tools | Display Modes |
|
#1
IP: 199.115.98.60
|
|||
|
|||
|
之前有人提到要在列表显示一些特定的属性,除了自带的名字,价格等。因为列表页和产品页都有一个同名的产品对象:$_product,而在产品页,$_product是直接可以用$_product->getAttributeName()来获取属性值的,因此很多人认为同样的方式可以在列表页使用,而测试的结果是同样的调用方式在列表页是获取不到值的,这是为什么呢?
查看列表页和产品页对应的block的php文件,可以看出,虽然产品对象都命名为$_product,但来源不同,产品页的对象来自如下代码: Code:
$product = Mage::getModel('catalog/product')->load($this->getProductId());
Code:
Mage::getSingleton('catalog/layer')->getProductCollection();
现在可以引出第一种解决方案了,既然列表页的产品对象里不包含属性值,而通过ID获得的单个产品是包含属性值的,那就在列表页重新获取一次产品对象: Code:
<?php $_columnCount = $this->getColumnCount(); ?>
<?php $i=0; foreach ($_productCollection as $_product): ?>
<?php $_product = Mage::getModel('catalog/product')->load($_product->getId());?>
<?php if ($i++%$_columnCount==0): ?>
<ul class="products-grid">
Code:
echo $_product->getAttributeText('color');
接下来讲第二种方案,Magento的页面是由一个个block组合而成,block在调用的时候都是可以传参数的(如果有接收参数的代码的话),对于列表页产品产品所用的block来说,它可以接受属性名作为参数,从而在获取数据集合时将该参数对应的属性值添加进产品对象里,打开模板目录下\layout\catalog.xml,找到代码: Code:
<block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
<block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
Code:
<block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
<action method="addAttribute"><attribute>color</attribute></action>
<block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
Code:
public function addAttribute($code)
{
$this->_getProductCollection()->addAttributeToSelect($code);
return $this;
}
这里的addAttribute对应的就是action标签里的addAttribute,$code参数接收的是action标签里传递的值(这里是color),看上面的php代码可以从字面上就理解出,这个函数接收传递的参数名,然后把这个参数对应的属性值添加进产品集合里面,最终结果就是你可以在列表页调出你想要的产品属性值。 现在来讲最后一种方案也是今天推荐的方案,打开Magento后台,Catalog->Attributes->Manage Attributes,找到颜色属性(color)并点击进入,在配置项里找到Used in Product Listing选项,选择是并保存。 现在你就可以在列表页用之前同样的方式调用颜色属性的值了,不需要前两种方式那样修改额外的代码,也就是说Magento本身已经考虑到了可能会用到在列表页调用常用属性以外的属性,并提供了在后台就可以方便添加的方式,是不是很简单呢。 第三种方案毫无疑问是最合适的,之所以会讲一下前两种方案,是因为了解前两种方案有助于了解Magento本身的结构和block的使用方式,比如说第一种方案就是一种适用性很广泛的方式,很多地方都会有只包含部分信息的产品对象,在你需要特定信息时,都可以通过产品ID来重新获取完整产品对象,从而得到你要的信息,这些地方并不是每一个都有第二,第三种方案可供选择。 Last edited by Saint Onge : 2016-10-02 at 07:15 PM |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Magento performace optimization, Catalog URL Rewrite Management | Ratcliff | Magento | 0 | 2015-04-24 04:43 AM |
| Migrate magento to new server / domain / database / host | Raquette Lake | Magento | 0 | 2015-04-24 04:41 AM |
| Magento filter products by status | Rapid City | Magento | 0 | 2015-04-24 04:41 AM |
| Magento Special price products page | Rankin | Magento | 0 | 2015-04-24 04:39 AM |
| magento产品类别优化 | topvip | 代码交流 | 0 | 2010-10-26 01:25 PM |