Bagaimana rendering price.phtml di halaman daftar produk katalog terjadi?

12

Katalog File templat halaman daftar produk adalah list.phtml. Di mana rendering semua produk dalam kategori terjadi menggunakan foreachloop.

Saya bingung tentang rendering dari price.phtml. Karena tidak ada blok untuk itu dalam penanganan<catalog_category_default>

Sekarang, <?php echo $this->getPriceHtml($_product, true) ?>kembalikan harga produk.

Bagaimana metode ini ditautkan price.phtml?

Ricky Sharma
sumber
cari "price.phtml" di catalog.xml di base / default / your_theme, itu akan menjadi blok turunan ke blok yang berisi list.phtml.
Shathish

Jawaban:

12

Tampilan harga produk

Metode getPriceHtml()ini didefinisikan dalam kelas blok Mage_Catalog_Block_Product_Abstract.

Metode ini menggunakan penyaji harga yang tergantung pada jenis produk:

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

Penyaji harga adalah blok dengan templat terkait. Keduanya tergantung pada jenis produk.

Jika tidak ada blok atau template yang ditentukan untuk jenis produk yang ditentukan, itu default ke catalog/product_priceblok dan catalog/product/price.phtmltemplate.

Di mana penentu harga dan templat untuk jenis produk ditentukan?

Blok harga dan penyaji biasanya ditentukan menggunakan tata letak XML, sehingga modul yang menambahkan jenis produk baru dapat dengan mudah menambahkan penyaji mereka sendiri juga. Sebagai contoh. produk yang dibundel menambahkan renderer harganya sebagai berikut dalam bundle.xmlfile tata letak:

<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>

Templat harga khusus atau penyaji

Menggunakan mekanisme yang sama juga memungkinkan untuk mengganti penyaji default. Jika Anda hanya ingin mengubah template, dan tetap menggunakan tipe blok harga default, cukup panggil addPriceBlockTypefile layout dengan blok default (lihat di atas) dan template Anda.

Merender blok harga

Kode untuk benar-benar membuat blok harga terlihat seperti ini:

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

The $displayMinimalPricedan $idSuffixvariabel argumen opsional dengan getPriceHtmlmetode.

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

The $idSuffixdigunakan dalam template harga untuk menyelesaikan id CSS dari <span>tag seputar harga sebenarnya, misalnya:

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">
Vinai
sumber
@Vinai dapatkah Anda menyarankan sesuatu di stackoverflow.com/questions/20949796/…
Mukesh
Jika saya ingin mendapatkan harga atribut super, saya hanya akan menggunakan <? Php echo $ this-> getPriceHtml ($ _ product); ?> atau apakah saya perlu menentukan jenis harga apa? Berjenjang?
Elva Sandoval
Corrent. Metode ini akan menentukan jenis produk dan memberikan harga yang sesuai.
Vinai
hai @Vinai saya mencoba melakukan itu, tetapi harganya tetap. Itu tidak berubah ketika saya memilih warna yang harganya berbeda. Harga teratas memang berubah, tetapi tidak satu pun di bawah dekat ini menambah keranjang. Lihat di sini jennyyootest.com/index.php/adelle.html
Elva Sandoval
Anda harus menyesuaikan JavaScript untuk mengubah kedua harga.
Vinai