প্লাগইনের মধ্যে এক স্তর থেকে প্লাগইন_ডির_আরল () পান


13

কাঠামোটি ব্যবহার করে আমি বেশ কয়েকটি প্লাগইন লিখেছি:

/plugins/myplugin/myplugin.php /plugins/myplugin/class/class-myclass.php

যাতে ওও সুবিধা গ্রহণ করতে পারে এবং সামগ্রিকভাবে আমার কোডটিকে কাঠামোগত করে তুলুন

ক্লাস ফাইলের মধ্যে থেকে বেস প্লাগইনটির ইউআরএল পেতে আমার বার বার প্রয়োজন হয় ... আমি নিম্নলিখিতটি ব্যবহার করে যাচ্ছি তবে আমি নিশ্চিত যে এর থেকে আরও ভাল উপায় আছে:

$this->plugin_location = substr(plugin_dir_url(__FILE__),0, strrpos(plugin_dir_url(__FILE__), "/",-2)) . "/";

আমি যে ধারণাটি দিয়েছিলাম তার মধ্যে একটি অতিরিক্ত সিঙ্গলটন ক্লাস ছিল যা প্লাগইনের জন্য সমস্ত সেটিংস সঞ্চয় করে এবং ক্লাস ফাইলগুলির মাধ্যমে একটি বিমূর্ত স্তর যুক্ত করে।

কোন সাহায্য ব্যাপকভাবে প্রশংসা করা হয়।

উত্তর:


16

আপনার প্লাগইন ডিরেক্টরিতে একটি উপ-ডিরেক্টরিতে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

$this->plugin_location = plugin_dir_url(dirname(__FILE__));

7

আপনার সমস্ত শ্রেণীর তাদের প্রকৃত অবস্থানের চেয়ে আলাদা করা উচিত, যাতে আপনি এগুলিকে সহজেই ঘুরতে পারেন এবং অন্য প্রকল্পগুলিতে এগুলি পুনরায় ব্যবহার করতে পারেন।

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

ইন্টারফেসের উদাহরণ:

interface DirectoryAddress
{
    /**
     * @return string Dir URL with trailing slash
     */
    public function url();

    /**
     * @return string Dir path with trailing slash
     */
    public function path();
}

আপনার প্লাগইনে কংক্রিটের প্রয়োগটি দেখতে দেখতে এটি দেখতে পারে:

class PluginDirectoryAddress implements DirectoryAddress
{
    private $path;

    private $url;

    public function __construct( $dirpath )
    {
        $this->url  = plugins_url( '/', $dirpath );
        $this->path = plugin_dir_path( $dirpath );
    }

    /**
     * @return string Dir URL with trailing slash
     */
    public function url() {
        return $this->url;
    }

    /**
     * @return string Dir path without trailing slash
     */
    public function path() {
        return $this->path;
    }
}

এখন আপনি আপনার মূল প্লাগইন ফাইলে সেই শ্রেণীর উদাহরণ তৈরি করুন:

$address = new PluginDirectoryAddress( __DIR__ );

এবং অন্যান্য সমস্ত শ্রেণীর তাদের কনস্ট্রাক্টরের ইন্টারফেসের উপর কেবলমাত্র নির্ভরতা রয়েছে:

public function __construct( DirectoryAddress $directory ) {}

তারা এখন কেবল পাস করা দৃষ্টান্ত থেকে ইউআরএল এবং পথে অ্যাক্সেস করছে।


তারপরে class.Plugin_Controller.phpফাইলটি উচ্চ ডিরেক্টরিতে প্রয়োজনীয় হওয়া দরকার, তাই না?
মাইকেইলএল

@ মাইকিএলএল আমি সবেমাত্র কোডটি রিফ্যাক্টর করেছি। ক্লাসটি অন্তর্ভুক্ত করতে একটি অটোলোডার ব্যবহার করুন। :)
ফুসিয়া

ধন্যবাদ. নিজেকে শিক্ষিত করা দরকার: php-autoloader.malkusch.de/en । এই প্লাগইনটি শীঘ্রই একটি রিফ্যাক্টরিংয়ের জন্য due এবং কিছু ইউনিট পরীক্ষা।
মাইকেইলএল

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