之前有人提到要在列表显示一些特定的属性,除了自带的名字,价格等。因为列表页和产品页都有一个同名的产品对象:$_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上有所帮助
分享到:
相关推荐
Magento-中文开发教程, 欢迎大家指出错误。 深入理解Magento-第一章 – Magento强大的配置系统 深入理解Magento-第二章 – Magento请求分发与控制器 深入理解Magento-第三章 – 布局,块和模板 深入理解...
magento-ce-2.4.0_sample_data-2020-07-26-02-51-57.tar.gz Include sample data
magento-ce-2.4.0-2020-07-24-11-15-38.tar.gz 不带sample data
这个“magento-java-master.zip_magento”压缩包可能是为了提供一个Java连接Magento源码的示例或者库,帮助开发者实现Java与Magento系统的交互。 在Java中与Magento进行交互通常涉及到以下几个关键知识点: 1. **...
你可以通过缓存管理、图片优化、数据库索引优化、部署静态文件等方式提升Magento的加载速度和响应时间。 七、Magento的安全与维护 保持Magento系统的安全和更新是每个管理员的责任。定期备份数据库、安装安全补丁、...
magento-stock-movements, Magento扩展,节省产品库存 节省你的Magento产品的库存 特性将库存移动保存在产品修改页面的新标签中安装 Magento 1.5. x, 1.6. x, 1.7. x, 1.8. x, 1.9.x使用 modgit 安装:$ cd/pat
Magento-Redismanager, 在 Magento,用于Redis的超级用户控制 Redis 管理Redis服务的实用程序特性系统> 配置>的自动或者手动配置高级> Redis管理在负载均衡环境中缓存服务不同的理想情况直接从magento面板管理员管理...
"Magento-SMTP-Pro-Email-Extension"是一个专业的SMTP扩展,提供了一系列高级功能。以下是该插件的一些核心特性: 1. **多SMTP配置**:商家可以根据不同的业务需求配置多个SMTP服务器,比如用于测试和正式环境。 2...
"magento-演示数据1.6.1.0"是一个专门为Magento 1.6.1.0版本准备的示例数据包,它包含了用于演示和测试 Magento 商店功能的各种数据,如产品、类别、顾客、订单等。 该压缩包文件“magento-sample-data-1.6.1.0”...
如何给产品描述里的关键字、字词批量添加链接?我想大家一直在的这样的插件。说实话,我也找了很久,也没有找到。可是由于需要,不得不自己开发一个这样的插件。并支持到Magento1.6.2 说明请查看:...
3. **强大的商品管理**:提供了详细的商品分类、属性和选项设置,支持多种促销规则,如优惠券、折扣、组合销售等。 4. **SEO优化**:内置了搜索引擎优化工具,如自定义URL、元标签、重写规则等,帮助提高网站在搜索...
因为国外网速太慢了,所以下载后分享给需要的人。magento-ce-2.4.2-p1-2021-04-22-10-49-09
Magento是一款强大的开源电子商务平台,而Redis则是一种高性能的键值数据存储系统,常用于缓存、session管理等场景。在Magento中集成Redis插件可以显著提升网站性能,降低数据库负载,尤其是在处理高并发请求时。...
这个标题"magento-1.9.1.1-2015-04-30-12-49-08"指的是Magento的一个特定版本,即1.9.1.1,发布于2015年4月30日,具体时间是12:49:08。这个版本包含了该阶段Magento系统的所有更新、修复和增强功能。 Magento 1.9....
这个7z压缩包“magento-1.7.0.7z”包含了用于安装Magento 1.7.0的所有必要文件,而“magento-1.7.0.2.tar”可能是该版本的一个特定更新或备份文件。 在深入探讨Magento 1.7.0的知识点之前,我们首先要了解它为何...
Magento-CE-2.3.4_sample_data-2020-01-22-11-11-58.tar.gz源自官网
- **产品显示方式**:可以选择产品列表的显示方式,如网格视图或列表视图。 - **每页显示数量**:设置每页显示的产品数量。 ##### 7.3 偏好设置 - **语言设置**:选择网站的语言。 - **货币设置**:设置默认货币。 ...
在Magento 2站点内安装要在您的Magento 2项目中使用,可以使用: composer require --dev magento/magento-coding-standard 出于安全考虑,以这种方式安装时,无法自动添加phpcs的Magento标准。 您可以通过将以下...
Ajax-Magento-ajax-add-to-cart.zip,[模块magento 1]magento ajax添加到购物车-ajoter vos produits au panier en ajax/感谢ajax将您的产品添加到购物车,ajax代表异步javascript和xml。它是多种web技术的集合,包括...
标题中的"PyPI 官网下载 | magento-0.6dev.tar.gz"指的是Python Package Index(PyPI)上的一个项目,它是一个名为"Magento"的软件包的特定版本,即0.6dev。PyPI是Python开发者发布和分享他们自己创建的Python库或...