प्लगइन कोड के माध्यम से बड़े HTML आउटपुट के साथ काम करना


9

मैंने हाल ही में अपना पहला WP प्लगइन लिखा है जो कस्टम jquery छवि गैलरी को पोस्ट में एम्बेड करने के लिए एक शोर्ट जोड़ता है। यह प्राथमिक रूप से पोस्ट में HTML का एक अच्छा हिस्सा है, साथ ही साथ इनिशियलाइज़ेशन के लिए आवश्यक जावास्क्रिप्ट भी।

हालाँकि, मुझे PHP में स्ट्रिंग के रूप में, HTML आउटपुट को प्रक्रियात्मक रूप से बनाना था। इस तरह का टैग सूप हमेशा मुझे पागल करता है, और मुझे एमवीसी फ्रेमवर्क के साथ काम करने की आदत है जो एचटीएमएल उत्पन्न करने के लिए सहायक कार्य और आंशिक टेम्पलेट जैसी चीजें प्रदान करते हैं।

प्लगइन लेखकों के लिए सामान्य दृष्टिकोण क्या है जिन्हें बड़ी मात्रा में गतिशील रूप से निर्मित HTML या JS को प्रबंधित करने की आवश्यकता है?

जवाबों:


12

@ बायरन एम। मैं दो निर्माणों का उपयोग करता हूं, मैं अक्सर अन्य वर्डप्रेस डेवलपर्स का उपयोग अक्सर नहीं देखता हूं, जो मुझे आश्चर्यचकित करते हैं, लेकिन मैं उन्हें बहुत पसंद करता हूं।

1.) हेरेडोस्क

आप टेक्स्ट के बड़े ब्लॉक को हेरेडोस्क स्ट्रिंग के रूप में स्टोर कर सकते हैं जो इस तरह दिख सकता है ताकि मैं सिंगल और डबल कोट्स के मिश्रण के बारे में चिंता कर सके।

   $html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;

ध्यान दें कि चर एक फ़ंक्शन के लिए एक सरणी के रूप में पारित किया जा सकता है और फिर extract()एड या आप उन्हें अन्य तरीकों से असाइन कर सकते हैं। यह भी ध्यान दें कि मैं ब्रेसिज़ का उपयोग करता हूं क्योंकि वे हमेशा आवश्यक होते हैं लेकिन वे कोड को पढ़ने में आसान बनाते हैं। (बेशक वर्डप्रेस the_content()से भौतिक रूप से अलग होने जैसे कार्यों में get_the_content()हमेशा कोडिंग की यह शैली आसान नहीं होती है।)

क्या अधिक है, हालांकि यह आपके लिए प्रासंगिक नहीं हो सकता है यदि मैं एचटीएमएल, एसक्यूएल, इत्यादि जैसे हेरेडोक नामों का उपयोग करता हूं तो मेरा आईडीई PhStStorm सिंटैक्स इंजेक्शन करता है और मुझे हेरेडोक के भीतर स्वत: पूर्ण और सिंटैक्स रंग देगा।

2.) स्ट्रिंग कॉनराटेशन एक एरे का उपयोग करके

अन्य मुहावरे का उपयोग मैं सामग्री को एक सरणी में और फिर सरणी में इकट्ठा करना चाहता हूं implode()। हालांकि मैंने इसे कभी भी बेंचमार्क नहीं किया है, इसलिए यह कम मददगार हो सकता है क्योंकि मुझे लगता है कि मुझे पता है कि बार-बार होने वाला स्ट्रिंग कॉन्फिनेशन एक हत्यारा है क्योंकि स्ट्रिंग्स बड़ा हो जाता है (अगर किसी को पता है कि यह दृष्टिकोण क्यों बेहतर नहीं है या यदि आप एक बेहतर दृष्टिकोण जानते हैं तो मैं प्रतिक्रिया सुनने के लिए प्यार करता हूँ):

function my_get_form_and_fields($input_items) {
    $html = array();
    $html[] = '<form name="my_form" method="get">';
    foreach($input_items as $input_item) {
        extract($input_item);
        $html=<<<HTML
<input type="{$type}" size="{$size}" id="{$id}" class="{$class}" value="{$value}" />
HTML;
    $html[] = '</form>';
    return implode("\n",$html);         
}   

1
Heredocs के लिए +1, वे भयानक हैं, विशेष रूप से इस स्थिति में।
कोई भी

वास्तव में इसके मूल्यांकन के लिए समय नहीं था, लेकिन मुझे जो भी चाहिए वह सबसे सीधा तरीका है।
ब्रायन एम।

सरणी / स्ट्रिंग संघनन के लिए +1। हम यह बहुत करते हैं। यह बिना किसी नई स्टोरीलाइन और स्पेस के स्ट्रिंग्स का निर्माण करना आसान बनाता है।
s_ha_dum

5

PHP के लिए इस फ़ंक्शन को चेकआउट करें:

http://php.net/manual/en/function.ob-start.php

आप एक सम्मिलित फ़ाइल को बफर कर सकते हैं जिसमें बस HTML कोड होगा, एक php वैरिएबल में। यह इसे बनाए रखने के लिए क्लीनर बना देगा।

तो आप कुछ इस तरह से समाप्त करते हैं:

ob_start();
   include('path/to/my/html/file.php');
   $includedhtml = ob_get_contents();
ob_end_clean();

तो आप बस $ शामिल कर सकते हैं html जहाँ आपको इसकी आवश्यकता है और यह आपके html सामग्री को php स्ट्रिंग्स के अंदर इसे बाहर गूंजने से रोकता है।


4

मैंने वास्तव में इस ढांचे का उपयोग नहीं किया है, लेकिन यह जिस टेम्पलेट मॉडल की पेशकश करेगा वह शायद अपील करेगा। आप यह देखना चाहते हैं कि लेखक ने कैसे सेट किया।

https://github.com/Emerson/Sanity-Wordpress-Plugin-Framework

टेम्प्लेट ========= जब भी संभव हो, हमें HTML से PHP को अलग करना चाहिए। Wordpress के भीतर, आप दोनों को बिना किसी आशंका के एक साथ देखेंगे। जबकि यह अक्सर चीजों को करने का एक "आसान तरीका" है, यह लगभग "सही तरीका" नहीं है। इसके बजाय, हमें दोनों को अलग करना चाहिए, इस प्रकार अपने तर्क को शुद्ध रखना चाहिए और हमारे विचारों को गूंगा बनाना चाहिए। इस उद्देश्य के लिए हमारे पास $ यह है-> रेंडर ('मेरा-टेम्पलेट') विधि। कुछ उदाहरण:

    // From within a method in our controller
    $this->data['message'] = 'Pass this on to the template please';
    $this->render('my-template');

    // Meanwhile, in the /plugin/views/my-template.php file
    <h2>The Separation of Logic and Views</h2>
    <p><?php echo $this->data['message'];?></p>

यह सिर्फ आउटपुट बफ़रिंग का उपयोग कर रहा है, जैसे टॉड पर्किन्स अपने उत्तर में बताते हैं।
इयान दून

2

यह HTML और JS के प्रकार पर निर्भर करता है।

जावास्क्रिप्ट

सबसे पहले, गतिशील भागों को यथासंभव स्थिर भागों से अलग करें। फिर रनटाइम पर आपको जो भी डायनामिक वैरिएबल लोड करना हो और हेडर (या फूटर, जो भी हो) में अपनी स्टेटिक स्क्रिप्ट्स को कतारबद्ध करें। लेकिन इस तरह, आपके JS का अधिकांश हिस्सा आपके PHP से अलग है।

एचटीएमएल

यह PHP में आपके कोड को सफाई से बनाने का मामला है। यदि आपके पास HTML का विशाल हिस्सा है जिसे आप फिर से उपयोग करने जा रहे हैं, तो मैं उन्हें अलग-अलग चर के रूप में संग्रहीत करूंगा। फिर शॉर्टकोड कहा जाता है के साथ चीजों को एक साथ piecing के रूप में सरल है:

echo $firstblock;
echo $shortcodecontent;
echo $lastblock;

प्रक्रियात्मक रूप से इसे बनाने की कोशिश करने के बजाय, एक ऑब्जेक्ट बनाएं (हां, PHP ऑब्जेक्ट्स का समर्थन करता है) जिसमें आपके सभी अलग-अलग एचटीएमएल ब्लॉक शामिल हैं, फिर इसे निर्देश दें कि कौन सा उपयोग करना है और कौन से डेटा वापस पास करना है। यह आपको भारी मात्रा में समय बचाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.