目录产品列表页面中的price.phtml呈现是如何发生的?


12

目录产品列表页面的模板文件为list.phtml。使用foreach循环在类别中呈现所有产品的地方。

我对的渲染感到困惑price.phtml。因为在句柄中没有障碍<catalog_category_default>

现在,<?php echo $this->getPriceHtml($_product, true) ?>返回产品的价格。

该方法如何链接到price.phtml


在base / default / your_theme的catalog.xml中搜索“ price.phtml”,它将是包含list.phtml的块的子块。
2013年

Answers:


12

产品价格显示

该方法getPriceHtml()在块类中定义Mage_Catalog_Block_Product_Abstract

该方法使用取决于产品类型的价格渲染器:

$type_id = $product->getTypeId(); // e.g. simple, configurable, bundle, grouped, ...
$this->_preparePriceRenderer($type_id)

价格渲染器是带有关联模板的块。两者都取决于产品类型。

如果没有为指定的产品类型定义块或模板,则默认为catalog/product_price块和catalog/product/price.phtml模板。

产品类型的价格呈现器和模板在哪里定义?

价格块和渲染器通常使用布局XML指定,因此添加新产品类型的模块也可以轻松添加自己的渲染器。例如。捆绑的产品将其价格渲染器添加到bundle.xml布局文件中,如下所示:

<default>
    <reference name="catalog_product_price_template">
        <action method="addPriceBlockType">
            <type>bundle</type>
            <block>bundle/catalog_product_price</block>
            <template>bundle/catalog/product/price.phtml</template>
        </action>
    </reference>
</default>

自定义价格模板或渲染器

使用相同的机制,还可以覆盖默认渲染器。如果您只想更改模板并保留默认的价格块类型,则只需addPriceBlockType使用默认块(请参见上文)和您的模板来调用布局文件。

渲染价格块

实际呈现价格块的代码如下所示:

$this->_preparePriceRenderer($type_id)
    ->setProduct($product)
    ->setDisplayMinimalPrice($displayMinimalPrice)
    ->setIdSuffix($idSuffix)
    ->toHtml();

$displayMinimalPrice$idSuffix变量的参数是可选的getPriceHtml方法。

public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '')

$idSuffix在价格模板用于完成的CSS ID <span>周边的实际价格,例如标签:

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">


如果我想获得超属性定价,我将只使用<?php echo $ this-> getPriceHtml($ _ product);。?>还是我需要指定哪种定价类型?分层?
埃尔瓦·桑多瓦尔

科伦特。该方法将确定产品类型并相应地提供价格。
维奈

嗨@Vinai我尝试这样做,但是价格保持不变。当选择其他价格的颜色时,它不会改变。最高价格确实发生了变化,但下方的价格没有变化,接近添加到购物车。看到这里jennyyootest.com/index.php/adelle.html
埃尔瓦·桑多瓦尔

您必须调整JavaScript才能同时更改两个价格。
维奈
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.