วิธีการทำให้ไฟล์. html เอียงและทำความสะอาด


14

เนื่องจากนามสกุลไฟล์แนะนำว่า.phtmlไฟล์อนุญาตให้ใช้โค้ด PHP ผสมกับ HTML ได้ แต่ความจริงที่ว่าคุณสามารถไม่ควรถูกมองว่าเป็นใบอนุญาตในการไปป่า

ทำไมเรายังคงเห็นไฟล์. php มากมายเต็มไปด้วย PHP จำนวนมาก? และอะไรคือวิธีที่ดีในการลดปริมาณ PHP ใน.phtmlไฟล์

คำตอบ:


10

อันที่จริงแล้ว PHP ที่น้อยลงในของคุณ.phtmlดีกว่าเพราะ:

  1. การผสมผสานของ PHP และ HTML นั้นยากที่จะถอดรหัสได้มากกว่าแต่ละตัวโดยเฉพาะอย่างยิ่งสำหรับผู้ที่มีความสะดวกสบายด้วยเพียงคนเดียว (เช่นผู้ออกแบบ Front-end)
  2. มันสมเหตุสมผลที่จะวางปฏิสัมพันธ์กับรหัสเซิร์ฟเวอร์ในบล็อกห่างจากสิ่งที่จะนำเสนอในเบราว์เซอร์ - นี่คือการแยก "เก่าของข้อกังวล" มนต์

ไฟล์วีโอไอพีคอร์ /app/design/frontend/base/default/template/catalog/product/price.phtml เป็นกรณีที่เจ็บปวดในจุด รหัส“ การนำเสนอ” HTML นี้แสดงราคา ยาว 471 บรรทัด! ส่วนใหญ่เป็นเพราะเหตุผล PHP

วิธีทำให้.phtmlผอมลงและสะอาดขึ้น:

  1. หลีกเลี่ยงลำดับที่ไม่จำเป็น<?php … ?>รวมกลุ่มเข้าด้วยกันเป็นชิ้นเดียว<?php … ?>

  2. ดัน PHP ให้มากที่สุดเท่าที่จะทำได้ลงในบล็อคแทนที่จะเป็น. phtml

  3. เพื่อช่วยในการข้างต้นใน Block ใช้ประโยชน์จากassign(‘myvar’, [expression])การสร้าง $ ตัวแปรที่สามารถอ้างถึงโดยไม่ต้อง $this->...อยู่ใน. phtml ดังนั้นคุณสามารถกระชับ<?php echo $myvar; ?>

  4. ต้องการให้วีโอไอพีนำ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) ?>
  1. ขั้นแรก: ลบการซ้ำซ้อนของ <?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; ?>

ฉันคิดว่าเราทุกคนสามารถอยู่กับมันได้!


5

เขียนดี @fris ฉันเห็นด้วยในเกือบทุกจุด

ประเด็นหลักคือการย้ายตรรกะทั้งหมดในชั้นเรียนบล็อกและทำให้แม่แบบที่ "โง่" ที่สุด

ฉันชอบการเรียกใช้เมธอดในเทมเพลตมากกว่าตัวแปรที่ได้รับการ "กำหนด" เพราะฉันไม่ต้องการที่จะสูญเสียคุณสมบัติของรหัส IDE ที่สมบูรณ์และการนำทาง "มอบหมาย" ดูรัดกุมมากขึ้นในเทมเพลต แต่เป็นเวทย์มนตร์ที่มากเกินไปสำหรับรสนิยมของฉันทำให้มันยิ่งแย่ไปกว่าเวทย์มนตร์และเซทเทอร์


ขอบคุณสำหรับความคิดเห็นของคุณ @fschmengler ใช่มันเป็นเวทย์มนตร์เล็ก ๆ น้อย ๆ แต่นั่นเป็นกรณีของอนุสัญญาทั้งหมดในตอนแรก การใช้ $ this ในไฟล์. phtml ดูเหมือนว่าจะเป็นเรื่องมหัศจรรย์สำหรับฉันในครั้งแรกที่ฉันเห็น ตอนนี้ฉันเข้าใจแล้วและก็ไม่เป็นไร มันเป็นเรื่องของการเรียนรู้รูปแบบและการประชุม การกรอกรหัสเป็นสิ่งสำคัญ อย่างไรก็ตามมันเป็นการเรียกร้องอย่างเป็นธรรมที่จะวางลัทธินิยมซึ่งเกิดจากเครื่องมือที่ไม่ซับซ้อนพอสำหรับการตัดสินใจเขียนโปรแกรมสถาปัตยกรรมหรือไม่?
58

การใช้เวทมนตร์น้อยที่สุดเท่าที่จะทำได้เป็นการตัดสินใจทางสถาปัตยกรรม หากคุณต้องการเครื่องมือเพิ่มเติมในการทำงานกับรหัสฐานซึ่งเป็นสัญญาณที่ไม่ดี ... เพื่อความเป็นธรรมวีโอไอพีไม่ได้ทำการตัดสินใจนี้ แต่เราสามารถพยายามทำให้ดีที่สุด
เฟเบียน Schmengler

fris writeup เย็น ฉันเห็นด้วยกับทุกจุดยกเว้นกำหนดส่วน เหตุผลก็เพราะมันยากเกินไปที่จะค้นหาตัวแปรเวทย์มนตร์เหล่านั้นสำหรับนักพัฒนารายอื่นที่กำลังประสบอยู่ ฉันคิดว่าเราควรหลีกเลี่ยงสิ่งนั้น
Rajeev K Tomy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.