在网格显示中无法获得新的产品属性

时间:2010-04-07 23:03:36

标签: php zend-framework magento

我在我的产品中添加了一个新属性(布尔型“是/否”字段)。它是一个变量,用于启用/禁用在产品详细信息页面和网格视图上显示的价格。

我设法让它在产品信息页面上运行。但是在产品网格页面上我似乎无法访问该变量。具体来说,我正在使用的模板是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()时,我的新变量不在该数据中的任何位置。

提前致谢

1 个答案:

答案 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()并获取您正在查找的数据。

确保在您希望看到任何更改之前清除缓存!

希望有所帮助。

谢谢, 乔