Ini adalah pertanyaan mengenai praktik pemrograman yang baik di Magento.
Saya perlu menunjukkan (dalam daftar produk kategori) produk dengan produk terkait dalam thumbnail. Jadi saya edit mypackage/mytheme/template/catalog/product/list.phtml
dengan sesuatu seperti ini
<?php
$related=$_product->getRelatedProductIds();
if(count($related)>0){
echo '<div class="a'.$ap.'"></div>';
echo '<div class="li_p"><ul>';
foreach($related as $rela){
$rela_nom=Mage::getModel('catalog/product')->load($rela);
echo '<li><a href="'.$rela_nom->getProductUrl().'"> <img src="'.$this->helper('catalog/image')->init($rela_nom, 'small_image')->resize(20).'" width="20" height="20"> </a><li>';
}
echo '</ul></div>';
}
?>
Dan itu bekerja dengan sangat baik.
Tetapi pertanyaan saya adalah: Apakah ini benar untuk membuat instance model kelas pada file phtml?
Jika tidak, apa cara terbaik untuk mencapai fungsi ini? Maksud saya, file apa yang lebih baik untuk diedit atau kelas apa yang lebih baik untuk ditambahkan, di mana? Pembantu?
Bisakah Anda memberikan sedikit contoh atau memberi saya sekilas file apa yang lebih baik untuk diedit.
sumber
Tidak ada yang salah dengan memuat model dalam
phtml
file. Tetapi itu tergantung pada mengapa Anda melakukannya.Jika Anda membutuhkan seluruh model dan semua data yang terkait dengannya, maka Anda dapat memuat seluruh model.
Tetapi jika Anda hanya perlu URL Produk (dari contoh Anda), maka Anda bisa memuat koleksi yang benar
Kemudian beralih melalui yang diperlukan
sumber
Ingin menaruh 5 sen saya di sini. Kita harus menghormati prinsip arsitektur yang digunakan di Magento. Pola arsitektur utama yang digunakan di Magento adalah MVC. Dalam kasus bagian Magento "View" berisi beberapa hal (blok, templat, tata letak). Blok diciptakan untuk memindahkan logika persiapan data dari templat ke beberapa kelas lain untuk membuat templat lebih bersih dan mudah dibaca oleh pengembang frontend. Di sini saya ingin setuju dengan Fabian.
Adapun keprihatinan Sonassi tentang terlalu banyak kelas yang tidak dibutuhkan saya sarankan untuk berharap untuk mendorong MVC berbasis. Dalam hal ini kita melihat pengontrol sebagai komandan yang menentukan blok mana dan data apa yang seharusnya. Aksi di controller dapat berisi kode yang diperlukan untuk memuat data dan memasukkannya ke dalam blok (melalui setter ajaib) sebelum rendering.
sumber
Saya setuju dengan Fabian Blechschmidt bahwa ini adalah praktik yang buruk dan Anda harus menghormati Pemisahan Kekhawatiran.
Untuk menambahkan saran yang membangun:
Ini adalah sesuatu, kelas Block dimaksudkan untuk. Dalam kasus Anda, Anda harus menulis ulang
Mage_Catalog_Block_Product_List
untuk menambahkan fungsionalitas yang diinginkan:Harus jelas bagaimana menggunakan metode ini dalam templat.
Catatan: Menulis ulang tidak berarti mengedit file inti. Ikuti tutorial penyesuaian jika Anda tidak tahu cara menulis ulang blokir.
sumber