เนื่องจากนามสกุลไฟล์แนะนำว่า.phtml
ไฟล์อนุญาตให้ใช้โค้ด PHP ผสมกับ HTML ได้ แต่ความจริงที่ว่าคุณสามารถไม่ควรถูกมองว่าเป็นใบอนุญาตในการไปป่า
ทำไมเรายังคงเห็นไฟล์. php มากมายเต็มไปด้วย PHP จำนวนมาก? และอะไรคือวิธีที่ดีในการลดปริมาณ PHP ใน.phtml
ไฟล์
เนื่องจากนามสกุลไฟล์แนะนำว่า.phtml
ไฟล์อนุญาตให้ใช้โค้ด PHP ผสมกับ HTML ได้ แต่ความจริงที่ว่าคุณสามารถไม่ควรถูกมองว่าเป็นใบอนุญาตในการไปป่า
ทำไมเรายังคงเห็นไฟล์. php มากมายเต็มไปด้วย PHP จำนวนมาก? และอะไรคือวิธีที่ดีในการลดปริมาณ PHP ใน.phtml
ไฟล์
คำตอบ:
อันที่จริงแล้ว PHP ที่น้อยลงในของคุณ.phtml
ดีกว่าเพราะ:
ไฟล์วีโอไอพีคอร์ /app/design/frontend/base/default/template/catalog/product/price.phtml
เป็นกรณีที่เจ็บปวดในจุด รหัส“ การนำเสนอ” HTML นี้แสดงราคา ยาว 471 บรรทัด! ส่วนใหญ่เป็นเพราะเหตุผล PHP
วิธีทำให้.phtml
ผอมลงและสะอาดขึ้น:
หลีกเลี่ยงลำดับที่ไม่จำเป็น<?php … ?>
รวมกลุ่มเข้าด้วยกันเป็นชิ้นเดียว<?php … ?>
ดัน PHP ให้มากที่สุดเท่าที่จะทำได้ลงในบล็อคแทนที่จะเป็น. phtml
เพื่อช่วยในการข้างต้นใน Block ใช้ประโยชน์จากassign(‘myvar’,
[expression])
การสร้าง $ ตัวแปรที่สามารถอ้างถึงโดยไม่ต้อง
$this->...
อยู่ใน. phtml ดังนั้นคุณสามารถกระชับ<?php echo $myvar; ?>
ต้องการให้วีโอไอพีนำTwigไปใช้ในอนาคตเพื่อให้ดูสะอาดตายิ่งขึ้น
ลองใช้ข้างบนบนตัวอย่างจากโค้ดต้นฉบับของตัวอย่างที่ระบุด้านบน: /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) ?>
ขั้นแรก: ลบการซ้ำซ้อนของ <?php … ?>
จะมาถึงสิ่งนี้:
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)
?>ข้างต้นทำให้ PHP ทั้งหมดในหยดเดียวของรหัส
2 + 3. การพัฒนาไปสู่สิ่งที่ดีกว่ายังคงย้ายรหัสนี้เป็นบล็อกของมัน:
protected function _prepareLayout() {
$this->assign(‘minPrice’, $this->calculateMinPrice(…));
}
protected function calculateMinPrice(…) {
if ($this->getDisplayMinimalPrice() && $_minimalPriceValue && $_minimalPriceValue < $_product->getFinalPrice()) {
// etc...
}
}
สังเกตการใช้งาน_prepareLayout()
และassign()
ฟังก์ชั่นสำหรับสิ่งนี้
ตอนนี้ส่วนที่ซับซ้อนของ. phtml สามารถลดลงเหลือแค่บรรทัดง่ายๆนี้:
<?php echo $minPrice; ?>
ฉันคิดว่าเราทุกคนสามารถอยู่กับมันได้!
เขียนดี @fris ฉันเห็นด้วยในเกือบทุกจุด
ประเด็นหลักคือการย้ายตรรกะทั้งหมดในชั้นเรียนบล็อกและทำให้แม่แบบที่ "โง่" ที่สุด
ฉันชอบการเรียกใช้เมธอดในเทมเพลตมากกว่าตัวแปรที่ได้รับการ "กำหนด" เพราะฉันไม่ต้องการที่จะสูญเสียคุณสมบัติของรหัส IDE ที่สมบูรณ์และการนำทาง "มอบหมาย" ดูรัดกุมมากขึ้นในเทมเพลต แต่เป็นเวทย์มนตร์ที่มากเกินไปสำหรับรสนิยมของฉันทำให้มันยิ่งแย่ไปกว่าเวทย์มนตร์และเซทเทอร์