magento -- 列表页显示产品属性值的几种调用方式

简介:

之前有人提到要在列表显示一些特定的属性,除了自带的名字,价格等。因为列表页和产品页都有一个同名的产品对象:$_product,而在产品页,$_product是直接可以用$_product->getAttributeName()来获取属性值的,因此很多人认为同样的方式可以在列表页使用,而测试的结果是同样的调用方式在列表页是获取不到值的,这是为什么呢?

查看列表页和产品页对应的block的php文件,可以看出,虽然产品对象都命名为$_product,但来源不同,产品页的对象来自如下代码:  

 

通过产品ID获取单个产品,这种方式获得的产品对象是包含该产品的所有信息的,自然包含全部属性值。再看列表的:

 

 

获得的是产品的集合,然后再模板文件里循环拿出集合里的产品,这个产品对象里只包含了图片,名字,URL地址等少数几个常用属性,满足一般列表页需要的信息,里面不包含其它非默认属性,所以用$_product->getAttributeName()在列表页取不到值。

现在可以引出第一种解决方案了,既然列表页的产品对象里不包含属性值,而通过ID获得的单个产品是包含属性值的,那就在列表页重新获取一次产品对象:

 

 

现在这个$_product就可以像产品页的一样取出各种你想要显示的属性,比如颜色:

 

这种方案虽然可以解决问题,但基于性能原因不推荐,列表页有大量产品,每次循环都要去重新读数据库获取一次包含所有信息的产品数据(而你用到的可能只是其中一个属性),会加大资源的消耗,在Magento本身速度就不占优势的情况下,这种额外消耗没有必要。

接下来讲第二种方案,Magento的页面是由一个个block组合而成,block在调用的时候都是可以传参数的(如果有接收参数的代码的话),对于列表页产品产品所用的block来说,它可以接受属性名作为参数,从而在获取数据集合时将该参数对应的属性值添加进产品对象里,打开模板目录下/layout/catalog.xml,找到代码:

 

在这里面新增一个action标签,这里还是以颜色为例:

 

 

这样你就可以在列表页调用产品的颜色了,需要调用的属性都可以通过这种方式添加到集合里去。简单讲下为什么在这里可以用<action method="addAttribute">,打开block所对应的List.php文件,可以找到这样一个函数:

 

这里的addAttribute对应的就是action标签里的addAttribute,$code参数接收的是action标签里传递的值(这里是color),看上面的php代码可以从字面上就理解出,这个函数接收传递的参数名,然后把这个参数对应的属性值添加进产品集合里面,最终结果就是你可以在列表页调出你想要的产品属性值。

 

现在来讲最后一种方案也是今天推荐的方案,打开Magento后台,Catalog->Attributes->Manage Attributes,找到颜色属性(color)并点击进入,在配置项里找到Used in Product Listing选项,选择是并保存。

 

现在你就可以在列表页用之前同样的方式调用颜色属性的值了,不需要前两种方式那样修改额外的代码,也就是说Magento本身已经考虑到了可能会用到在列表页调用常用属性以外的属性,并提供了在后台就可以方便添加的方式,是不是很简单呢。

 

第三种方案毫无疑问是最合适的,之所以会讲一下前两种方案,是因为了解前两种方案有助于了解Magento本身的结构和block的使用方式,比如说第一种方案就是一种适用性很广泛的方式,很多地方都会有只包含部分信息的产品对象,在你需要特定信息时,都可以通过产品ID来重新获取完整产品对象,从而得到你要的信息,这些地方并不是每一个都有第二,第三种方案可供选择。

 

PS:额外讲了这么多,希望对看得人在了解Magento上有所帮助

目录
相关文章
|
Java Spring
15dwr - DWR 与 Spring整合
15dwr - DWR 与 Spring整合
122 0
|
开发工具 git
git代码合并、git解决冲突的方法?
Git是一种分布式版本控制系统,它提供了多种方法来合并代码和解决冲突。下面是两个常见的场景以及对应的操作步骤:
201 0
|
消息中间件 JavaScript 小程序
告别丑陋判空,一个Optional类就能搞定!
告别丑陋判空,一个Optional类就能搞定!
|
存储 SQL 分布式计算
hadoop概述
1.1 为什么会有大数据处理 1.2 什么是hadoop?
224 0
hadoop概述
|
JavaScript
jQuery模板文件
jQuery模板文件
155 0
|
编解码 并行计算 数据可视化
YoloAll V2发布,集成所有主流Yolo模型于一身
YoloAll是一个将当前主流Yolo版本集成到同一个UI界面下的推理预测工具。可以迅速切换不同的yolo版本,并且可以针对图片,视频,摄像头码流进行实时推理,可以很方便,直观的对比不同版本的yolo的推理效果,耗时等。
YoloAll V2发布,集成所有主流Yolo模型于一身
|
大数据 开发者
R 基本图形----箱线图| 学习笔记
快速学习 R 基本图形----箱线图
190 0
R 基本图形----箱线图| 学习笔记
|
弹性计算
ECS使用体验
我是一名大三数学系的学生,最近开发了一款个人博客,想把它部署到服务器上去,那天正好赶上618的活动,就点进来看了下。通过朋友推荐,我选择了阿里云服务器,打开官网看到了“飞天加速计划”的学生活动,就先体验了1小时的ECS,觉得不错,就打算先试用一段时间。下面是我一周的使用体验。
138 0
|
算法 物联网
递归的实战演练(进阶) | 算法必看系列六
通过实际题目(初级题、中级题&高阶题)深入理解递归四步解题套路。
递归的实战演练(进阶) | 算法必看系列六