我在我的产品中添加了一个新属性(布尔型“是/否”字段)。它是一个变量,用于启用/禁用在产品详细信息页面和网格视图上显示的价格。
我设法让它在产品信息页面上运行。但是在产品网格页面上我似乎无法访问该变量。具体来说,我正在使用的模板是catalog / product / price.phtml。据我所知,价格由产品详细信息页面和网格页面上的同一组if语句显示。这让我感到困惑,因为我无法找到该模板上的任何代码来处理多个产品,只是一堆嵌套的if语句。
这是我试图使用$ _displayPrice访问这个新变量的方式。 在目录/ product / price.html的第36行
<?php $_product = $this->getProduct(); ?>
<?php $_id = $_product->getId() ?>
<?php $_displayPrice = $_product->getDisplayPrice() ? "Yes" : "No";
echo $_displayPrice;?>
让我进一步困惑的是,当显示$ _product-&gt; getData()时,我的新变量不在该数据中的任何位置。
提前致谢
答案 0 :(得分:3)
好的,首先是您的属性无法加载的原因。 Magento使用EAV模型来存储目录数据。这意味着(大多数情况下)getData数组中的每一段数据都来自表连接。这意味着Magento对如何从数据库请求数据感到吝啬。如果它不需要你的字段,它就不会费心包含它(并且会节省一些查询时间)。
因此,在加载目录类别页面时,Magento使用Mage_Catalog_CategoryController
和视图操作。通过Magento的魔力,随后调用Mage_Catalog_Model_Layer::getProductCollection
,它会加载所有必要的属性。你说,它如何选择包含哪些属性?当然,它来自Mage_Catalog_Model_Config::getProductCollectionAttributes
中的配置!因此,如果我们想要包含您的新属性,我们需要更改配置。
查看配置文件,处理哪些列的路径是frontend/product/collection/attributes
,因此您需要将以下内容添加到扩展的config.xml文件中:
<frontend>
<product>
<collection>
<attributes>
<display_price />
</attributes>
</collection>
</product>
</frontend>
默认情况下,这会将display_price
属性添加到要加载到产品集合中的属性列表中,您现在应该可以调用$_product->getDisplayPrice()
并获取您正在查找的数据。
确保在您希望看到任何更改之前清除缓存!
希望有所帮助。
谢谢, 乔