• 首页
    • English
    • 中文
  • 关于我们
  • 服务项目
    • 谷歌SEO服务
    • WordPress建站服务
    • 谷歌ADS/SEM代运营
  • 项目案例
    • 医疗
    • 建材
    • 机械加工
    • 照明
    • 电商
    • 电脑硬件
  • 博客
    • 服务器运维
      • aliyun
      • 服务器安装
      • 宝塔面板
      • 虚拟化
      • 阿里云
      • Centos
      • linux
      • nginx
    • 电子商务
    • 免费资源
    • PHP
      • Magento
      • WordPress
    • 大数据采集
    • Python
    • Javascript
    • SEO
    • 未分类
  • 联系我们
What's Hot

机械模具加工公司网站设计案例

24 10 月, 2023

快速原型公司案例

24 10 月, 2023

陶瓷加工网站案例

24 10 月, 2023
Facebook Twitter Instagram
  • 中文
  • English
Facebook Twitter Instagram
VPSEO VPSEO
  • 首页
    • English
    • 中文
  • 关于我们
  • 服务项目
    • 谷歌SEO服务
    • WordPress建站服务
    • 谷歌ADS/SEM代运营
  • 项目案例
    • 医疗
    • 建材
    • 机械加工
    • 照明
    • 电商
    • 电脑硬件
  • 博客
    • 服务器运维
      • aliyun
      • 服务器安装
      • 宝塔面板
      • 虚拟化
      • 阿里云
      • Centos
      • linux
      • nginx
    • 电子商务
    • 免费资源
    • PHP
      • Magento
      • WordPress
    • 大数据采集
    • Python
    • Javascript
    • SEO
    • 未分类
  • 联系我们
VPSEO VPSEO
Home»Uncategorized»magento — 列表页显示产品属性值的三种调用方式
Uncategorized

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

chrispengcnBy chrispengcn7 8 月, 2021没有评论1 Min Read
Facebook Twitter Pinterest LinkedIn Tumblr Email
Share
Facebook Twitter LinkedIn Pinterest Email

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

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

[php]

  1. $product = Mage::getModel(‘catalog/product’)->load($this->getProductId());

 

 

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

  1. Mage::getSingleton(‘catalog/layer’)->getProductCollection();

 

 

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

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

[php]

  1. ………………………………………………………………………………
  2. <?php $_columnCount = $this->getColumnCount(); ?>
  3.     <?php $i=0; foreach ($_productCollection as $_product): ?>
  4.     <!–水水 –>
  5.     <?php $_product = Mage::getModel(‘catalog/product’)->load($_product->getId());?>
  6.     <!–水水 –>
  7.         <?php if ($i++%$_columnCount==0): ?>
  8.         <ul class=“products-grid”>
  9. ……………………………………………………………………………………

 

 

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

[php]

  1. echo $_product->getAttributeText(‘color’);

 

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

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

[xhtml]

  1. <block type=“catalog/product_list” name=“product_list” template=“catalog/product/list.phtml”>
  2.         <block type=“catalog/product_list_toolbar” name=“product_list_toolbar” template=“catalog/product/list/toolbar.phtml”>

 

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

[xhtml]

  1. <block type=“catalog/product_list” name=“product_list” template=“catalog/product/list.phtml”>
  2.                        <!–水水 –>
  3.                        <action method=“addAttribute”><attribute>color</attribute></action>
  4.                        <!–水水 –>
  5.                    <block type=“catalog/product_list_toolbar” name=“product_list_toolbar” template=“catalog/product/list/toolbar.phtml”>

 

 

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

[php]

  1. public function addAttribute($code)
  2.     {
  3.         $this->_getProductCollection()->addAttributeToSelect($code);
  4.         return $this;
  5.     }

 

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

 

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

 

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

 

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

 

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

Example: 添加产品卖点

   <div class=”details-area”>
<h2 class=”product-name”><a href=”<?php%20echo%20$_product->getProductUrl()%20?>” title=”<?php echo $this->stripTags($_product->getName(), null, true) ?>”><?php echo $_helper->productAttribute($_product, $_product->getName(), ‘name’) ?></a></h2>
<p class=”product-sku”><?php echo $this->__(‘Sku:’); ?><?php echo $_product->getSku(); ?></p>

<?php if($_product->getKvm_salepoint() ): ?>
<p class=”product-kvm-salepoint”>
<?php echo $this->htmlEscape($_product->getKvm_salepoint()) ?>
</p>
<?php endif; ?>

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
chrispengcn
  • Website

Related Posts

Nginx做负载均衡,有没有办法碰到404就跳过?

2 7 月, 2022

如何快速把多个excel表合并成一个excel表

7 8 月, 2021

nginx配置泛域名转发到子目录nginx泛域名转发到泛域名

7 8 月, 2021

wordpress如何防止发布文章时候自动清除

、
换行标签

7 8 月, 2021
Add A Comment

Leave A Reply Cancel Reply

*

code

导航
  • 首页
  • 关于我们
  • 服务项目
  • 项目案例
  • 博客文章
  • 联系我们
博客
  • 服务器运维
  • 服务器安装
  • nginx
  • PHP
  • WordPress
  • Python
  • Javascript
  • SEO
  • 电子商务
  • 大数据采集
  • 宝塔面板
  • 数据库
  • 电子商务
  • 虚拟化
  • 阿里云
导航
  • 首页
  • 关于我们
  • 谷歌SEO服务
  • 谷歌ADS/SEM代运营
  • WordPress建站服务
  • 项目案例
  • 博客
  • 联系我们
最新文章
  • 机械模具加工公司网站设计案例
  • 快速原型公司案例
  • 陶瓷加工网站案例
  • CNC数控加工日文网站案例
  • 触摸一体机数字标牌厂家网站案例
关于我们
关于我们

广州纬来科技有限公司
联系地址:广东省广州市番禺区富华中路富源二街18号合和大厦809

QQ : 13602156
Email : 13926026058@139.com
Contact: +86 13926026058

Facebook Twitter YouTube LinkedIn
© 2025 广州纬来科技有限公司 粤ICP备2023105857号-2
  • 首页
  • 关于我们
  • 谷歌SEO服务
  • 谷歌ADS/SEM代运营
  • WordPress建站服务
  • 项目案例
  • 博客
  • 联系我们

Type above and press Enter to search. Press Esc to cancel.