कैसे रखने के लिए .phtml फ़ाइलों को दुबला और साफ?


14

जैसा कि इसका फ़ाइल एक्सटेंशन बताता है कि एक .phtmlफ़ाइल HTML के साथ PHP कोड को मिलाने की अनुमति देती है। हालांकि, इस तथ्य है कि आप कर सकते हैं के लिए एक लाइसेंस के रूप में नहीं देखा जाना चाहिए जंगली जाने के लिए।

हम अभी भी बहुत सारी .phtml फ़ाइलों को बहुत सारे PHP के साथ क्यों देखते हैं? और एक .phtmlफ़ाइल में PHP की मात्रा को कम करने के लिए एक अच्छा तरीका क्या है ?

जवाबों:


10

वास्तव में, कम PHP .phtmlबेहतर है, क्योंकि:

  1. PHP और HTML का मिश्रण व्यक्तिगत रूप से उनमें से प्रत्येक की तुलना में बहुत कठिन है, खासकर उन लोगों के लिए जो उनमें से केवल एक के साथ सहज हैं (जैसे फ्रंट-एंड डिजाइनर)
  2. यह ब्लॉक में सर्वर कोड के साथ इंटरैक्शन को रखने के लिए तार्किक समझ में आता है, जो ब्राउज़र में प्रस्तुत किया जाना है, उससे दूर है - यह मंत्र "चिंताओं का पृथक्करण" है।

Magento कोर फ़ाइल /app/design/frontend/base/default/template/catalog/product/price.phtml बिंदु में एक दर्दनाक मामला है। यह HTML "प्रस्तुति" कोड एक मूल्य प्रदर्शित करता है। यह ४1१ रेखीय है! ज्यादातर PHP तर्क के कारण।

अपने .phtmlझुकाव और क्लीनर बनाने के लिए :

  1. के अनावश्यक दृश्यों से बचें <?php … ?>, उन्हें एक साथ एक साथ विखंडू में बंडल करें<?php … ?>

  2. .phtml के बजाय ब्लॉक में जितना हो सके उतना PHP पुश करें

  3. उपरोक्त के साथ मदद करने के लिए, ब्लॉक में .phtml के assign(‘myvar’, [expression])बिना संदर्भित किए जा सकने वाले $ चर बनाने के लिए उपयोग करें $this->..., ताकि आप वास्तव में संक्षिप्त हो सकें।<?php echo $myvar; ?>

  4. Magento के लिए भविष्य में भी एक स्वच्छ क्लीनर के लिए टहनी अपनाने की इच्छा है

आइए ऊपर दिए गए उदाहरण के मूल कोड से एक स्निपेट पर लागू करें: /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, मैं लगभग सभी बिंदुओं में सहमत हूं।

मुख्य टेकअवे सभी तर्क को ब्लॉक क्लास में ले जाने और टेम्पलेट को "बेवकूफ" के रूप में संभव बनाने के लिए है।

मैं वास्तव में "असाइन" किए गए चर पर टेम्पलेट में विधि कॉल को प्राथमिकता देता हूं क्योंकि मैं आईडीई कोड को पूरा करने और नेविगेशन सुविधाओं को ढीला नहीं करना चाहता। टेम्पलेट में "असाइन" अधिक संक्षिप्त लगता है, लेकिन मेरे स्वाद के लिए बहुत अधिक जादू है, जिससे यह जादू पाने वालों और बसने वालों से भी बदतर हो जाता है।


अपनी टिप्पणी @fschmengler की सराहना करें। हां यह थोड़ा जादू है, लेकिन यह पहली बार में सभी सम्मेलनों के मामले में है। एक .phtml फ़ाइल के अंदर $ का उपयोग करना निश्चित रूप से जादू की तरह लग रहा था जब मैंने पहली बार इसे देखा था। अब मैं इसे समझता हूं और यह ठीक है। यह पैटर्न और परंपराओं को सीखने की बात है। कोड पूरा करना महत्वपूर्ण है। हालाँकि यह व्यावहारिकता को उन उपकरणों से उपजाया जाना उचित है जो एक वास्तुशिल्प प्रोग्रामिंग निर्णय पर पर्याप्त परिष्कृत नहीं हैं?
फ्रिस

संभव के रूप में छोटे जादू के रूप में उपयोग करना है एक वास्तुशिल्प निर्णय। यदि आपको एक कोड आधार के साथ काम करने के लिए अतिरिक्त टूल की आवश्यकता है जो एक बुरा संकेत है ... निष्पक्ष होने के लिए, Magento ने यह निर्णय नहीं लिया, लेकिन हम इसे सर्वश्रेष्ठ बनाने का प्रयास कर सकते हैं।
फैबियन शेंगलर

कूल राइटअप फ्रिस। मैं असाइन किए गए भाग को छोड़कर हर बिंदु से सहमत हूं। इसका कारण यह है कि किसी अन्य डेवलपर के लिए उन मैजिक वैरिएबल्स को ढूंढना बहुत मुश्किल हो जाता है जो इससे गुजर रहे हैं। मुझे लगता है कि हमें इससे बचना चाहिए।
राजीव के टॉमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.