প্লাগইন কোডের মাধ্যমে বড় এইচটিএমএল আউটপুট নিয়ে কাজ করে


9

আমি সম্প্রতি আমার প্রথম ডাব্লুপি প্লাগইনটি লিখেছি যা পোস্টে একটি কাস্টম জ্যাকোয়ারি চিত্র গ্যালারী এম্বেড করার জন্য একটি শর্টকোড যুক্ত করেছে। প্রাথমিকভাবে এটি প্রাথমিকভাবে পোস্টের মধ্যে এইচটিএমএলের একটি ভাল অংশ ডাম্প করে, প্রাথমিককরণের জন্য জাভাস্ক্রিপ্টের পাশাপাশি।

তবে, পিএইচপি-তে স্ট্রিং হিসাবে আমাকে প্রক্রিয়াগতভাবে এইচটিএমএল আউটপুট তৈরি করতে হয়েছিল। এই জাতীয় ট্যাগ স্যুপ সর্বদা আমাকে বাদাম চালায় এবং আমি এমভিসি ফ্রেমওয়ার্কগুলির সাথে কাজ করতে অভ্যস্ত যা এইচটিএমএল তৈরির জন্য সহায়ক ফাংশন এবং আংশিক টেম্পলেট জাতীয় জিনিস সরবরাহ করে।

যে প্লাগইন লেখকদের বিপুল পরিমাণে গতিশীলভাবে নির্মিত এইচটিএমএল বা জেএস পরিচালনা করতে হবে তাদের সাধারণ পন্থাটি কী?

উত্তর:


12

@ বায়রান এম। আমি দুটি কনস্ট্রাক্ট ব্যবহার করার প্রবণতা দেখি আমি প্রায়শই অন্যান্য ওয়ার্ডপ্রেস বিকাশকারীদের প্রায়শই ব্যবহার করতে দেখি না, যা আমাকে অবাক করে, তবে আমি তাদের অনেক পছন্দ করি।

1.) বংশগতি

আপনি হেরডোকস স্ট্রিং হিসাবে পাঠ্যের বড় ব্লক সংরক্ষণ করতে পারেন যা দেখতে দেখতে এটি একা এবং ডাবল উদ্ধৃতিগুলি মিশ্রণের বিষয়ে উদ্বেগজনক সঞ্চয় করতে পারি:

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

নোট করুন যে ভেরিয়েবলগুলি কোনও অ্যারে হিসাবে কোনও ফাংশনে পাস হতে পারে এবং তারপরে extract()এড বা আপনি অন্য উপায়ে সেগুলি নির্ধারণ করতে পারেন। এছাড়াও নোট করুন যে আমি ব্রেসগুলি ব্যবহার করি না কারণ সেগুলি সর্বদা প্রয়োজন হয় তবে তারা কোডটি পড়া সহজ করে তোলে। (অবশ্যই ওয়ার্ডপ্রেস the_content()থেকে বস্তুগতভাবে পৃথক হওয়ার মতো ক্রিয়াকলাপগুলি get_the_content()এই ধরণের কোডিংকে সর্বদা সহজ করে না))

আরও কী, যদিও এটি আপনার পক্ষে প্রাসঙ্গিক নাও হতে পারে আমি যদি এইচটিএমএল, এসকিউএল ইত্যাদির মতো হেরডোক নাম ব্যবহার করি তবে আমার আইডিই পিএইচপিস্টোরাম সিনট্যাক্স ইনজেকশন দেয় এবং আমাকে হেরডোকের মধ্যে স্বয়ংক্রিয়ভাবে সম্পূর্ণ এবং সিনট্যাক্স রঙ দেয়।

২) একটি অ্যারে ব্যবহার করে স্ট্রিং কনটেনটেশন

আমি যে অন্যান্য আইডিয়ামটি ব্যবহার করতে চাই তা হ'ল সামগ্রীটিকে একটি অ্যারে এবং তারপরে অ্যারেতে সংগ্রহ করা implode()। যদিও আমি এটিকে কখনও বেঞ্চমার্ক করি নি তাই এটি অনুধাবন করার চেয়ে কম সহায়ক হতে পারে আমি জানি যে স্ট্রিংগুলি বড় হওয়ার সাথে সাথে পুনরাবৃত্ত স্ট্রিং কনটেনটেশন একটি হত্যাকারী (যদি কেউ জানেন যে কেন এই পদ্ধতির কোনও উন্নতি হয় না বা আপনি যদি আরও ভাল পদ্ধতির বিষয়টি জানেন তবে I 'প্রতিক্রিয়া শুনতে ভালোবাসি):

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
হেরাদোকসের জন্য +1, তারা দুর্দান্ত, বিশেষত এই পরিস্থিতিতে।
কেউ

এটি মূল্যায়নের জন্য আসলেই সময় ছিল না, তবে আমার যা প্রয়োজন তা দেওয়া সর্বাধিক সরল পদ্ধতির মতো বলে মনে হচ্ছে।
ব্রায়ান এম।

অ্যারে / স্ট্রিং কনকেন্টেশনটির জন্য +1। আমি ওটা প্রচুর করি। এক্সট্রানেস নিউলাইন এবং স্পেস ছাড়াই স্ট্রিং তৈরি করা সহজ করে তোলে।
s_ha_dum

5

পিএইচপি জন্য এই ফাংশন চেকআউট:

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

আপনি একটি অন্তর্ভুক্ত ফাইল বাফার করতে পারেন যা এতে কেবল এইচটিএমএল কোড থাকবে, পিএইচপি ভেরিয়েবলের মধ্যে। এটি বজায় রাখা আরও পরিষ্কার করে তুলবে।

সুতরাং আপনি এই জাতীয় কিছু দিয়ে শেষ:

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

তারপরে আপনি কেবল যেখানে এটি প্রয়োজন সেখানে অন্তর্ভুক্ত HTML ফিরিয়ে দিতে পারবেন এবং এটি আপনার এইচটিএমএল বিষয়বস্তুকে পৃথক করে পিএইচপি স্ট্রিংয়ের অভ্যন্তরে প্রতিধ্বনিত করে রাখে।


4

আমি আসলে এই কাঠামোটি ব্যবহার করি নি, তবে এটি সরবরাহ করে এমন টেম্পলেট মডেলটি সম্ভবত আবেদন করবে। আপনি কীভাবে লেখক সেট আপ করেছেন তা একবার দেখে নিতে পারেন।

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

টেমপ্লেটগুলি ========== যখনই সম্ভব হবে, আমাদের পিএইচপি এইচটিএমএল থেকে পৃথক করা উচিত। ওয়ার্ডপ্রেসের মধ্যে, আপনি দু'জনকে একত্রে মিশ্রিত দেখতে পাবেন। যদিও এটি প্রায়শই জিনিসগুলি করার একটি "সহজ উপায়", এটি প্রায় কখনও "সঠিক পথ" হয় না। পরিবর্তে, আমাদের এই দুটি যুক্ত করে আলাদা করা উচিত, এভাবে আমাদের যুক্তি খাঁটি এবং আমাদের দৃষ্টিভঙ্গি বোনা রাখি। এই উদ্দেশ্যে আমাদের কাছে $ এটি-> রেন্ডার ('আমার-টেম্পলেট') পদ্ধতি রয়েছে। কয়েকটি উদাহরণ:

    // 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 এবং জেএসের ধরণের উপর নির্ভর করে।

জাভাস্ক্রিপ্ট

প্রথমত, গতিশীল অংশগুলি যথাসম্ভব স্থির অংশগুলি থেকে আলাদা করুন। তারপরে রানটাইমের সময় আপনার প্রয়োজনীয় গতিশীল ভেরিয়েবলগুলি লোড করুন এবং আপনার স্থির স্ক্রিপ্টগুলিকে শিরোনামে (বা পাদলেখ যা কিছুই হোক না কেন) সারি করুন। তবে এইভাবে আপনার বেশিরভাগ জেএস আপনার পিএইচপি থেকে পৃথক is

এইচটিএমএল

এটি পিএইচপি-তে আপনার কোডটি পরিষ্কারভাবে তৈরি করার বিষয়। আপনি যদি পুনরায় ব্যবহার করতে চলেছেন এমন বিশাল পরিমাণের এইচটিএমএল থাকে তবে আমি সেগুলিকে পৃথক ভেরিয়েবল হিসাবে সংরক্ষণ করব। তারপরে শর্টকোড যখন বলা হয় তখন একসাথে জিনিসগুলি পাইক করা যেমন সহজ:

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

এটি প্রক্রিয়াগতভাবে গড়ে তোলার চেষ্টা করার পরিবর্তে, এমন একটি বস্তু তৈরি করুন (হ্যাঁ, পিএইচপি বস্তুগুলিকে সমর্থন করে) এতে আপনার বিভিন্ন এইচটিএমএল ব্লক রয়েছে, তারপরে কোনটি ব্যবহার করবেন এবং কোন ডেটা পিছিয়ে যেতে হবে তা নির্দেশ দিন। এটি আপনার বিপুল পরিমাণ সময় সাশ্রয় করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.