প্লাগইন কীভাবে গঠন করবেন


40

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

কিছু অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ বা লাইব্রেরিতে ডিরেক্টরি এবং ফাইলগুলি সংগঠিত করার খুব নিয়ন্ত্রিত উপায় রয়েছে। কখনও কখনও এটি বিরক্তিকর হয় এবং পিএইচপি যে স্বাধীনতা দেয় তা হাইলাইট করে তবে ফ্লিপ-সাইডে ওয়ার্ডপ্রেস প্লাগইনগুলি তাদের লেখক দ্বারা নির্ধারিত কোনও ফ্যাশনে একসাথে রাখা হয়।

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

চূড়ান্ত প্রশ্ন: কি আপনি মনে করেন একটি প্লাগইন সংগঠিত করার সবচেয়ে ভালো উপায় কি?

নীচে কয়েকটি নমুনা কাঠামো দেওয়া হয়েছে তবে কোনও উপায়ে সম্পূর্ণ তালিকা নেই। আপনার নিজের সুপারিশ যুক্ত করতে নির্দ্বিধায়।

অনুমিত ডিফল্ট কাঠামো

  • /wp-content
    • /plugins
      • /my-plugin
        • my-plugin.php

মডেল ভিউ কন্ট্রোলার (এমভিসি) পদ্ধতি

  • /wp-content
    • /plugins
      • /my-plugin
        • /controller
          • Controller.php
        • /model
          • Model.php
        • /view
          • view.php
        • my-plugin.php

এমভিসির তিনটি অংশ:

  • মডেল ডাটাবেসের সাথে মিথস্ক্রিয়া, অনুসন্ধান এবং তথ্য সংরক্ষণ, এবং যুক্তি রয়েছে।
  • নিয়ামক টেমপ্লেট ট্যাগ এবং ফাংশন যে দৃশ্য কাজে লাগাতে বলে মনে করতে পারেন হবে।
  • দৃশ্য মডেল দ্বারা উপলব্ধ তথ্য প্রদর্শন দায়ী যেমন নিয়ামক দ্বারা সংস্থাপিত হয়।

টাইপ পদ্ধতি দ্বারা সংগঠিত

  • /wp-content
    • /plugins
      • /my-plugin
        • /admin
          • admin.php
        • /assets
          • css/
          • images/
        • /classes
          • my-class.php
        • /lang
          • my-es_ES.mo
        • /templates
          • my-template.php
        • /widgets
          • my-widget.php
        • my-plugin.php

ওয়ার্ডপ্রেস প্লাগইন বয়লারপ্লেট

গিথুবে পাওয়া যায়

প্লাগিন এপিআই , কোডিং স্ট্যান্ডার্ড এবং ডকুমেন্টেশন স্ট্যান্ডার্ডের ভিত্তিতে ।

  • /wp-content
    • /plugins
      • /my-plugin
        • /admin
          • /css
          • /js
          • /partials
          • my-plugin-admin.php
        • /includes
          • my_plugin_activator.php
          • my_plugin_deactivator.php
          • my_plugin_i18n.php
          • my_plugin_loader.php
          • my_plugin.php
        • /languages
          • my_plugin.pot
        • /public
          • /css
          • /js
          • /partials
          • my-plugin-public.php
        • LICENSE.txt
        • README.txt
        • index.php
        • my-plugin.php
        • uninstall.php

আলগাভাবে সংগঠিত পদ্ধতি

  • /wp-content
    • /plugins
      • /my-plugin
        • css/
        • images/
        • js/
        • my-admin.php
        • my-class.php
        • my-template.php
        • my-widget.php
        • my-plugin.php

এটি আসল প্রশ্ন নয়, তবে আমি ভোট বন্ধ করতে যাচ্ছি না, তবে এটি একটি সম্প্রদায় উইকি হিসাবে চিহ্নিত করার জন্য চিহ্নিত করেছি। বিটিডব্লিউ: আমি মনে করি এটি ফাইলের নামগুলি ছদ্মবেশ ধারণ করার কোনও মানে করে না।
কায়সার

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

1
আরেকটি পাশ-পয়েন্ট: সম্ভবত ফোল্ডারগুলির জন্য আরো শব্দার্থগতভাবে সঠিক নাম css/, images/এবং js/হবে styles/, images/এবং scripts/
অ্যান্ড্রু ওড্রি

উত্তর:


16

নোট করুন যে প্লাগইনগুলি ডাব্লুপি স্ট্যান্ডার্ড দ্বারা সমস্ত "নিয়ামক"।

এটি প্লাগইনটি কী করণীয় তা নির্ভর করে, তবে সমস্ত ক্ষেত্রেই আমি যতটা সম্ভব পিএইচপি কোড থেকে পর্দা আউটপুট আলাদা করার চেষ্টা করব।

সহজেই এটি করার একটি উপায় এখানে - প্রথমে কোনও ফাংশনটি সংজ্ঞায়িত করুন যা টেমপ্লেট লোড করে:

function my_plugin_load_template(array $_vars){

  // you cannot let locate_template to load your template
  // because WP devs made sure you can't pass
  // variables to your template :(
  $_template = locate_template('my_plugin', false, false);

  // use the default one if the theme doesn't have it
  if(!_$template)
    $_template = 'views/template.php';

  // load it
  extract($_vars);        
  require $template;
}

এখন, যদি প্লাগইন ডেটা প্রদর্শন করতে একটি উইজেট ব্যবহার করে:

class Your_Widget extends WP_Widget{

  ...      
  public function widget($args, $instance){

    $title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base);

    // this widget shows the last 5 "movies"
    $posts = new WP_Query(array('posts_per_page' => 5, 'post_type' => 'movie')); 

    if($title)
      print $before_title . $title . $after_title;

    // here we rely on the template to display the data on the screen
    my_plugin_load_template(array(

      // variables you wish to expose in the template
     'posts'    => $posts,          
    ));

    print $before_widget;
  }
  ...

}

টেমপ্লেট:

<?php while($posts->have_posts()): $posts->the_post(); ?>

<p><?php the_title(); ?></p> 

<?php endwhile; ?>

নথি পত্র:

/plugins/my_plugin/plugin.php           <-- just hooks 
/plugins/my_plugin/widget.php           <-- widget class, if you have a widget
/themes/twentyten/my_plugin.php         <-- template
/plugins/my_plugin/views/template.php   <-- fallback template

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


6

এটি প্লাগিনের উপর নির্ভর করে। প্রায় প্রতিটি প্লাগইনের জন্য এটি আমার প্রাথমিক কাঠামো:

my-plugin/
    inc/
        Any additional plugin-specific PHP files go here
    lib/
        Library classes, css, js, and other files that I use with many
        plugins go here
    css/
    js/
    images/
    lang/
        Translation files
    my-plugin.php
    readme.txt

এটি এমন কিছু হবে যা libফোল্ডারে যাবে।

যদি এটি বেশিরভাগ অ্যাডমিন এরিয়া কার্যকারিতা সহ বিশেষত প্লাগইন হয় তবে আমি এই adminসমস্ত পিএইচপি ফাইলগুলিকে ধারণ করতে একটি ফোল্ডার যুক্ত করব । যদি প্লাগইন অন্তর্ভুক্ত থিম ফাইলগুলি প্রতিস্থাপনের মতো কিছু করে তবে সেখানে একটি templateবা themeফোল্ডারও থাকতে পারে।

সুতরাং, একটি ডিরেক্টরি কাঠামো এর মতো দেখতে পারে:

my-plugin/
    inc/
    lib/
    admin/
    templates/
    css/
    js/
    images/
    lang/
    my-plugin.php
    readme.txt

আপনি কি অ্যাডমিনের সিএসএস এবং জেএস ফাইলগুলিকে / অ্যাডমিন ফোল্ডারের মধ্যে অন্তর্ভুক্ত করবেন? সুতরাং / প্রশাসকের মধ্যে অন্য / সিএসএস এবং / জেএস রয়েছে?
urok93

6

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

পৃথক নিয়ন্ত্রক এবং মতামতগুলি জনসাধারণ এবং প্রশাসনিক বিভাগগুলির জন্য তৈরি করা যেতে পারে এবং পুরো ফ্রেমওয়ার্কটি ওয়ার্ডপ্রেসের অনেকগুলি নেটিভ বৈশিষ্ট্যগুলির সুবিধা গ্রহণ করে। ফাইলের কাঠামো এবং কার্যকারিতা অনেকটা হ'ল একই সাথে এটি সর্বাধিক জনপ্রিয় এমভিসি ফ্রেমওয়ার্কগুলিতে (রেলস, কেকপিএইচপি ইত্যাদি)।

আরও তথ্য এবং একটি টিউটোরিয়াল এখানে পাওয়া যাবে:


5

আমরা সমস্ত পদ্ধতির মিশ্রণ ব্যবহার করছি। প্রথমত, আমরা আমাদের প্লাগিনগুলিতে জেন্ড ফ্রেমওয়ার্ক 1.11 ব্যবহার করছি এবং অতএব অটোল্যাড মেকানিকের কারণে আমাদের ক্লাস ফাইলগুলির জন্য একই ধরণের কাঠামোটি ব্যবহার করতে হয়েছিল।

আমাদের মূল প্লাগইনটির কাঠামো (যা আমাদের সমস্ত প্লাগইন একটি বেস হিসাবে ব্যবহৃত হয়) এর সাথে একই রকম দেখাচ্ছে:

webeo-core/
    css/
    images/
    js/
    languages/
    lib/
        Webeo/
            Core.php
        Zend/
            /** ZF files **/
        Loader.php
    views/
    readme.txt
    uninstall.php
    webeo-core.php
  1. ওয়ার্ডপ্রেস webeo-core.phpফাইলটিকে প্লাগইন রুট ফোল্ডারে কল করে ।
  2. এই ফাইলে আমরা পিএইচপি সেট করতে যাচ্ছি পথ অন্তর্ভুক্ত এবং প্লাগইনটির জন্য অ্যাক্টিভেশন এবং নিষ্ক্রিয় হুক নিবন্ধন করুন।
  3. Webeo_CoreLoaderএই ফাইলটির অভ্যন্তরে আমাদের একটি ক্লাসও রয়েছে যা কিছু প্লাগইন ধ্রুবককে সেট করে, ক্লাস অটোলয়েডার আরম্ভ Core.phpকরে lib/Webeoফোল্ডারের অভ্যন্তরে শ্রেণীর সেটআপ পদ্ধতিতে কল দেয় । এটি plugins_loadedঅগ্রাধিকার সহ অ্যাকশন হুকের উপরে চলে 9
  4. Core.phpবর্গ আমাদের প্লাগইন বুটস্ট্র্যাপ ফাইল। নামটি প্লাগিনগুলির নামের উপর ভিত্তি করে।

আপনি দেখতে পাচ্ছেন, libআমাদের সমস্ত বিক্রেতা প্যাকেজ ( Webeo, Zend) এর ফোল্ডারের ভিতরে একটি উপ-ডিরেক্টরি রয়েছে । একজন বিক্রেতার ভিতরে থাকা সমস্ত উপ প্যাকেজগুলি মডিউল থেকেই কাঠামোযুক্ত। নতুন Mail Settingsঅ্যাডমিন ফর্মের জন্য আমাদের নিম্নলিখিত কাঠামো থাকবে:

webeo-core/
    ...
    lib/
        Webeo/
            Form/
                Admin/
                    MailSettings.php
                Admin.php
            Core.php
            Form.php

আমাদের সাব-প্লাগইনগুলির একটি ব্যতিক্রম সহ একই কাঠামো রয়েছে। অটোলোড ইভেন্টের নামকরণের বিরোধগুলি সমাধান করার কারণে আমরা বিক্রেতা ফোল্ডারের অভ্যন্তরে আরও গভীরতর এক জায়গায় যাই। আমরা হুকের অভ্যন্তরে E.g. Faq.phpঅগ্রাধিকারের ভিত্তিতে প্লাগিনগুলি বুস্ট্র্যাপ ক্লাসকেও কল করি ।10plugins_loaded

webeo-faq/ (uses/extends webeo-core)
    css/
    images/
    js/
    languages/
    lib/
        Webeo/
            Faq/
                Faq.php
                /** all plugin relevant class files **/
    views/
    readme.txt
    uninstall.php
    webeo-faq.php

আমি সম্ভবত libফোল্ডারটির পুনরায় নামকরণ করব vendorsএবং সমস্ত প্রকাশ্য ফোল্ডার (সিএসএস, চিত্র, জে, ভাষা) publicপরবর্তী রিলিজের নামের ফোল্ডারে সরিয়ে দেব ।


5

ইতিমধ্যে উত্তর দেওয়া অনেকের মতো এটি প্লাগইনটি কী করণীয় তা নির্ভর করে তবে এখানে আমার বেস কাঠামোটি রয়েছে:

my-plugin/
    admin/
        holds all back-end administrative files
        js/
            holds all back-end JavaScript files
        css/                    
            holds all back-end CSS files
        images/
            holds all back-end images
        admin_file_1.php        back-end functionality file
        admin_file_2.php        another back-end functionality file 
    js/
        holds all front end JavaScript files
    css/
        holds all fronted CSS files
    inc/
        holds all helper classes
    lang/                   
        holds all translation files
    images/
        holds all fronted images
    my-plugin.php               main plugin file with plugin meta, mostly includes,action and filter hooks
    readme.txt                  
    changelog.txt
    license.txt

4

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

wp-content/
    plugins/
        my-plugin/
            inc/
                Specific files for only this plugin
                admin/ 
                    Files for dealing with administrative tasks
            lib/
                Library/helper classes go here
            css/
                CSS files for the plugin
            js/
                JS files
            images/
                Images for my plugin
            lang/
                Translation files
        plugin.php 
            This is the main file that calls/includes other files 
        README 
            I normally put the license details in here in addition to helpful information 

আমার এখনও এমভিসি স্টাইলের আর্কিটেকচারের প্রয়োজনে একটি ওয়ার্ডপ্রেস প্লাগইন তৈরি করতে হয়নি তবে আমি যদি এটি করতে চাই তবে আমি এটি একটি পৃথক এমভিসি ডিরেক্টরি দিয়ে রেখে দেব, যার মধ্যে নিজেই ভিউ / নিয়ন্ত্রণকারী / মডেল রয়েছে।


4

আমার যুক্তি, আমি যত বেশি কাঠামো ব্যবহার করি তত বড় প্লাগইন।
বড় প্লাগইনগুলির জন্য আমি এমভিসি ব্যবহার করি tend
আমি এটি একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করি এবং যা প্রয়োজন হয় তা এড়িয়ে চলে।

controller/
    frontend.php
    wp-admin.php
    widget1.php
    widget2.php
model/
    standard-wp-tables.php // if needed split it up
    custom-tabel1.php
    custom-tabel2.php
view/
    helper.php
    frontend/
        files...php
    wp-admin/
        files...php
    widget1/
        file...php
    widget2/
        file...php
css/
js/
image/
library/  //php only, mostly for Zend Framework, again if needed
constants.php //tend to use it often
plugin.php //init file
install-unistall.php  //only on big plugins

3

আমার সমস্ত প্লাগইন এই কাঠামোটি অনুসরণ করে, যা বেশিরভাগ অন্যান্য দেবগণ যা করছেন তার সাথে খুব মিল বলে মনে হচ্ছে:

plugin-folder/
    admin/
        css/
            images/
        js/
    core/
    css/
        images/
    js/
    languages/
    library/
    templates/
    plugin-folder.php
    readme.txt
    changelog.txt
    license.txt

প্লাগইন-ফোল্ডার.এফপি সাধারণত একটি ক্লাস যা মূল / ফোল্ডার থেকে সমস্ত প্রয়োজনীয় ফাইল লোড করে। বেশিরভাগ সময়ে থ্রি বা প্লাগইনস-লোড হুকের উপরে।

আমি আমার সমস্ত ফাইলেরও প্রিফিক্স ব্যবহার করতাম, তবে @ কাইজার যেমন উপরে উল্লিখিত হয়েছে, এটি সত্যিই নিরর্থক এবং আমি সম্প্রতি ভবিষ্যতের যে কোনও প্লাগইন থেকে এটি সরিয়ে নেওয়ার সিদ্ধান্ত নিয়েছি।

লাইব্রেরি / ফোল্ডারে সমস্ত বাহ্যিক সহায়ক লাইব্রেরি রয়েছে যা প্লাগইন নির্ভর করতে পারে।

প্লাগিনের উপর নির্ভর করে প্লাগইন রুটে একটি আনইনস্টল.এফপি ফাইল থাকতে পারে। যদিও বেশিরভাগ সময় এটি রেজিস্টার_উইনস্টল_হুক () এর মাধ্যমে পরিচালিত হচ্ছে।

স্পষ্টতই, কিছু প্লাগইনগুলিতে কোনও অ্যাডমিন ফাইল বা টেম্পলেট ইত্যাদির প্রয়োজন নাও হতে পারে তবে উপরের কাঠামোটি আমার পক্ষে কাজ করে। শেষ পর্যন্ত আপনাকে কেবল এমন একটি কাঠামো খুঁজে বের করতে হবে যা আপনার পক্ষে কাজ করে এবং তারপরে এটি আটকে যান।

আমার উপরে একটি স্টার্টার প্লাগইন রয়েছে, উপরের কাঠামোর উপর ভিত্তি করে আমি আমার সমস্ত প্লাগইনগুলির জন্য সূচনা পয়েন্ট হিসাবে ব্যবহার করি। আমার তখন যা করতে হবে তা হ'ল ফাংশন / শ্রেণির উপসর্গগুলির জন্য অনুসন্ধান / প্রতিস্থাপন এবং আমি যাচ্ছি। যখন আমি এখনও আমার ফাইলে প্রিফিক্স করছিলাম যা আমার একটি অতিরিক্ত পদক্ষেপ ছিল (এবং এতে বেশ বিরক্তিকর) তবে এখন আমাকে প্লাগইন ফোল্ডার এবং মূল প্লাগইন ফাইলটির নতুন নামকরণ করতে হবে।



0

একটি প্লাগইন ফাইল এবং ডিরেক্টরি কাঠামোগত একটি কম সাধারণ পদ্ধতির ফাইল টাইপ পদ্ধতির হয়। সম্পূর্ণতার জন্য এটি এখানে উল্লেখযোগ্য:

plugin-name/
    js/
        sparkle.js
        shake.js
    css/
        style.css
    scss/
        header.scss
        footer.scss
    php/
        class.php
        functions.php
    plugin-name.php
    uninstall.php
    readme.txt

প্রতিটি ডিরেক্টরিতে কেবল এই ধরণের ফাইল থাকে। এটি লক্ষণীয় যে আপনার একাধিক ফাইল টাইপ রয়েছে .png .gif .jpgযা images/উদাহরণস্বরূপ একক ডিরেক্টরিতে আরও যুক্তিযুক্তভাবে দায়ের করা যেতে পারে যখন এই পদ্ধতির সংক্ষিপ্ত হয় ।

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