برتری CMB2 نسبت به ACF

 

پرداختن به فیلدهای سفارشی و فیلدهای متا در وردپرس بخشی از کار روزانه هر توسعه دهنده وردپرس است. اگرچه اکثر برنامه‌نویس‌ها ، هنوز برای مدیریت فیلدهای سفارشی به  ACF متکی هستند، شاید بهتر باشد به جای آن از CMB2 استفاده کنیم.

 

منظور بنده را اشتباه نگیرید: ACF یک فریمورک قدرتمند با یک API جامع است که به هر کسی امکان می دهد یک وب سایت وردپرسی را به یک برنامه کاملاً متفاوت تبدیل کند. پس چرا باید زحمت تغییر آن را به خود بدهیم؟

 

اولین چیزی که باید در مورد ACF بدانیم به ویژگی های آن ربطی ندارد، بلکه به مدل کسب و کار پیرامون آن سیستم مربوط می شود.

ACF به تنهایی در نسخه رایگان خود صدها ابزار مفید را ارائه می دهد. با این حال، بیشتر ویژگی‌های سازگار با برنامه‌نویسی هنوز به نسخه Pro برای استفاده گسترده نیاز دارند.

 

رایگان بودن

 

اول از همه، CMB2 واقعا رایگان است – همه ویژگی های آن. ACF را می توان برای انجام یک سری از قابلیت ها به صورت رایگان استفاده کرد، اما برخی از ویژگی های پرکاربرد برای کسانی که برای نسخه Pro هزینه می کنند منحصر به فرد باقی می مانند: مانند صفحه تنظیمات.

علاوه بر رایگان بودن، CMB2 به خوبی مستند شده است و به عنوان یک کتابخانه به جای یک افزونه مطرح می باشد. با ACF، برعکس است.

یکی از مزایای بزرگ ACF رابط گرافیکی است که هنگام استفاده به عنوان افزونه ارائه می دهد ، در حالی که امکانات گسترده ای را برای طراحان وب و کاربران به آن می دهد، اما کار توسعه را برای  برخی از توسعه دهندگان سخت تر می کند.

 

اگر هنوز با CMB2 آشنا نیستید، نگاهی به مخزن آن بیندازید و نه تنها WIKI آن، بلکه تعداد زیادی افزونه‌هایی که انجمن قبلاً ایجاد کرده است را نیز بررسی کنید.

در مجموع، این فریمورک حتی بیشتر از ابزارهای ارائه شده توسط ACF Pro در اختیار ما قرار می دهد.

 

امکانات شی گرایی

 

توسعه دهندگان در جامعه وردپرس  با سرعت بیشتری جذب ویژگی های شر گرایی می شوند. برخی از آنها هنوز از تغییر سریع هسته وردپرس از نظر ویژگی های JS، به ویژه در مورد ویرایشگر بلوک، پشیمان هستند، در حالی که اساساً از نظر کدنویسی PHP یکسان باقی مانده است.

 

با این وجود، امروزه هر برنامه نویس PHP می خواهد برنامه ها به خوبی طراحی شوند، معمولاً به روش شی گرایی. تفکرشی کرایی( OOP) به کاربران وردپرس اجازه می دهد تا از هر نوع وابستگی و فریمورکی استفاده کنند، در حالی که صرفاً دنبال کردن API WordPress می تواند پروژه ها و برنامه ها را به صورت غیر ضروری محدود کند.

 

به طور پیش فرض CMB2 و ACF به روش OOP توسعه نیافته اند. با این حال، سادگی CMB2 افق امیدوارکننده ‌تری را برای کسانی که می‌خواهند interface، abstract و patterns  روی کدهای آن ایجاد کنند، فراهم می‌کند.

 

 

یک مثال ساده

 

بیایید در نظر بگیریم که افزونه ACF را در یک قالب وردپرس نصب کرده ایم، و می خواهیم یک صفحه تنظیمات برای یک افزونه یا قالب جدید ایجاد کنیم.

ACF می تواند صفحه تنظیمات با گزینه های زیبایی ایجاد کند، اما برای چنین مواردی باید نسخه Pro آن را خریداریک کنیم.

برای ما که داخل ایران هستیم نسخه نال شده پرو در دسترس است ولی این نسخه ها قابل اطمینان نیست پس چرا سری که درد نمیکنه دستمال ببندیم.

 

برای ما که توسعه دهنده هستیم سخته که بابت امکانی که می تونیم به راحتی با  کتابخانه CMB2 بدست بیاریم پول خرج کنیم.

 

فقط کافی است مثال های CMB2’s wiki را جستجو کنید تا بهترین مورد را پیدا کنید. با استفاده از آنها می توانید:

 

گزینه های جدید یا صفحه تنظیمات ایجاد کنید

فیلدها را به صفحات تنظیمات موجود اضافه کنید

مدیریت و ایجاد برگه ها

موارد منو و زیر منو را به WP admin اضافه کنید

تمام فیلدهای تولید شده با استفاده از ACF را می توان با CMB2 بازتولید کرد، از جمله فیلدهای تکرارپذیر و مبتنی بر ajax. فریمورک  پایه ممکن است برخی از آنها را نداشته باشد، اما می توان آنها را به راحتی گنجاند که برای این منظور به برنامه های افزودنی پیشنهاد شده در مخزن cmb2 نیاز دارید.

 

اما بیایید آن را جالب تر کنیم. من کلاسی را پیشنهاد می کنم که می تواند برای ایجاد صفحات تنظیمات جدید گسترش یابد یا فیلدهایی را به موارد موجود اضافه کند. بنابراین، بیایید یک کلاس پایه برای انجام آن ایجاد کنیم:

 

 

class Settings {

    protected $metabox;	
    protected $fields = array();
    
    public function __construct( array $metabox,  array $fields ) {
        
        $this->metabox = $metabox;
        $this->fields = (array) $fields;		
        add_action('cmb2_init', array($this, 'create'));		
    }
    
    public function create() {
        
        $box = new_cmb2_box($this->metabox);		
        foreach($this->fields as $field) {
            $box->add_field($field);
        }
        return $this;
    }
}

 

کلاس construct_ دو آرگومان را می پذیرد: آرایه ای از تنظیمات برای metabox،  صفحه تنظیمات، و آرایه دیگری از فیلدها. تابع ()create آن آرگومان ها را دریافت می کند و با استفاده از متدهای اختصاصی CMB2، متاباکس و فیلدها یا صفحه تنظیمات مورد نظر ما را تولید می کند.

 

اکنون فقط باید کلاس بالا  را برای ایجاد یک صفحه مدیریت جدید گسترش دهیم که در آن گزینه ها مدیریت می شوند.

 

class ControlPage extends Settings {

  public function __construct() {
    parent::__construct(
      array(
        'id' => '',
        'title' => '',
        'description' => '',
        'object_types' => array( 'options-page' ), // Indicate CMB2 this is an options page
        'display_cb' => array($this, 'admin_page'), // The callback that renders the page template or form
       ),
      array(
      [/* field_1 settings */], 
      [/* field_2 settings */]
      // and so on...
      )
    );
  }

  public function admin_page($hookup) {
      include __DIR__ . '/templates/settings.php // Page render or an include to a template file
  }
}

 

تمام: شما کلاس کمکی را گسترش می دهید و والد ()construct_ را فراخوانی می کنید و دو آرایه را به عنوان آرگومان ارسال می کنید اول داده های متاباکس CMB2 و سپس آرایه ای از تمام فیلدهای موجود. پارامتر روی داده‌های متاباکس تابع callback قالب را تعیین می‌کند، در این مورد متد ()admin_page.display_cb

در آیتم display_cb پارامتر دوم (admin_page) ، تابع callback  قالب را تعیین می کند.

اما اکنون نشان می دهد که API CMB2 چقدر می تواند قدرتمند باشد. بیایید فایل الگو را بررسی کنیم، . CMB2 دارای کمک کننده های ویژه ای برای انتقال متاباکس و متغیرهای فیلد به فایل های قالب است. متغیر hookup$  درج شده در متد کلاس رندر استفاده خواهد شد. مانند settings.php :

 

<div class="wrap cmb2-options-page option-<?php echo $hookup->option_key; ?>">

    <form class="cmb-form" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>" method="POST" id="<?php echo $hookup->cmb->cmb_id; ?>" enctype="multipart/form-data" encoding="multipart/form-data">

        <input type="hidden" name="action" value="<?php echo esc_attr( $hookup->option_key ); ?>">

        <?php $hookup->options_page_metabox(); ?>

        <nav class="navbar fixed-bottom navbar-light bg-light">
            <ul class="navbar-nav ml-auto">
                <li class="nav-item">
                <?php submit_button( esc_attr( $hookup->cmb->prop( 'save_button' ) ), 'primary', 'submit-cmb' ); ?>
                 </li>
             </ul>
         </nav>
     </form>
</div>

 

امکانات بیشتر

 

درست مانند پلاگین ACF، CMB2 دارای امکانات بی پایان است. متاباکس‌ها را می‌توان در هر نوع پست یا اصطلاحی و همچنین برای ایجاد ویجت‌ها یا فرم‌های ajax تولید کرد. در حال حاضر، هنوز با بلوک های گوتنبرگ سازگار نیست، اما این تنها مزیت ACF خواهد بود.

 

برای توسعه دهندگان، API آن فریمورک انعطاف پذیرتر و مبتنی بر کد را ارائه می دهد که می تواند در هر پلاگین یا پروژه تم و شاید حتی در پروژه های PHP غیر وردپرس اعمال شود.

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *