Memang, semakin sedikit PHP di Anda .phtml
semakin baik, karena:
- campuran dari PHP dan HTML jauh lebih sulit untuk diuraikan daripada masing-masing secara individual, terutama bagi mereka yang nyaman dengan hanya satu dari mereka (misalnya desainer front-end)
- masuk akal untuk menempatkan interaksi dengan kode server di Blok, jauh dari apa yang akan disajikan di browser - ini adalah mantra "pemisahan keprihatinan" lama.
File inti Magento /app/design/frontend/base/default/template/catalog/product/price.phtml
adalah contoh kasus yang menyakitkan. Kode "presentasi" HTML ini menampilkan harga. Panjangnya 471 baris! Sebagian besar karena logika PHP.
Untuk membuat Anda .phtml
lebih ramping dan bersih:
hindari urutan yang tidak perlu <?php … ?>
, bundel bersama menjadi satu dengan satu<?php … ?>
dorong PHP sebanyak mungkin ke dalam Blok, daripada .phtml
untuk membantu dengan hal di atas, di Blok gunakan assign(‘myvar’,
[expression])
untuk membuat $ variabel yang dapat disebut tanpa
$this->...
di .phtml, sehingga Anda dapat benar-benar ringkas<?php echo $myvar; ?>
berharap Magento untuk mengadopsi Twig di masa depan untuk tampilan yang lebih bersih
Mari kita terapkan di atas pada cuplikan dari kode asli contoh yang diberikan di atas: /app/design/frontend/base/default/template/catalog/product/price.phtml
<?php if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()): ?>
<?php $_minimalPriceDisplayValue = $_minimalPrice; ?>
<?php if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, array(0, 1, 4))): ?>
<?php $_minimalPriceDisplayValue = $_minimalPrice+$_weeeTaxAmount; ?>
<?php endif; ?>
….
<?php echo $_coreHelper->currencyByStore($_minimalPriceDisplayValue, $_storeId, true, false) ?>
Langkah pertama: hapus pengulangan <?php … ?>
untuk sampai pada sesuatu seperti ini:
if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()) {
$_minimalPriceDisplayValue = $_minimalPrice;
if ($_weeeTaxAmount && $_weeeHelper->typeOfDisplay($_product, array(0, 1, 4))) {
$_minimalPriceDisplayValue = $_minimalPrice+$_weeeTaxAmount;
}
…
echo $_coreHelper->currencyByStore($_minimalPriceDisplayValue, $_storeId, true, false)
?>
Di atas menempatkan semua PHP dalam satu gumpalan kode.
2 + 3. Berevolusi menjadi sesuatu yang lebih baik lagi, pindahkan kode ini ke dalam bloknya:
protected function _prepareLayout() {
$this->assign(‘minPrice’, $this->calculateMinPrice(…));
}
protected function calculateMinPrice(…) {
if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()) {
// etc...
}
}
Perhatikan penggunaan _prepareLayout()
danassign()
fungsi untuk ini.
Sekarang bagian yang berbelit-belit dari .phtml dapat dikurangi menjadi hanya garis sederhana ini:
<?php echo $minPrice; ?>
Saya pikir kita semua bisa hidup dengan itu!