برنامه نویسی

اتصال کتابخانه های PHP شخص ثالث در جوملا

کتابخانه‌های PHP راحت هستند زیرا می‌توان از هر نقطه در برنامه به آنها دسترسی داشت: از پلاگین، مدل مؤلفه، ماژول و غیره. اگر کسی قبلاً مشکل مشابهی را حل کرده و آن را به عنوان یک کتابخانه طراحی کرده باشد (و حتی آن را به‌روزرسانی کرده است)، منطقی است. برای اتصال این کتابخانه به جوملا. به عنوان مثال، برای ایجاد یک روش پرداخت برای یک فروشگاه آنلاین، به کتابخانه رسمی یک تجمیع کننده پرداخت نیاز دارید. یا از PHP SDK رسمی برخی از CRM راضی هستید.

آهنگساز

جوملا از کار مستقیم با Composer پشتیبانی نمی کند. به منظور استفاده از کتابخانه در کار خود، باید آن را در یک نوع پسوند جوملا “پیچ” کنید library و آن را نصب کنید. در پروژه های جدی، رویکرد تعمیر نسخه های تمام اجزای پروژه اتخاذ می شود: کد بیش از یک بار بررسی شده، آزمایش شده و اجازه داده شده است که در تولید کار کند.

شما یک بسته با کتابخانه خود ایجاد می کنید، آن را در هر کجا که نیاز دارید نصب کنید. همانطور که نسخه‌های جدید کتابخانه منتشر می‌شوند، بسته‌بندی خود را به‌روزرسانی می‌کنید و از تمام مزایای کار با افزونه‌های جوملا برخوردار می‌شوید: به‌روزرسانی افزونه‌ها به روش استاندارد، از جمله از طریق CLI. قبل از به‌روزرسانی و غیره، تغییرات برنامه افزودنی را در قسمت مدیریت مشاهده کنید.

قبل از به‌روزرسانی به جوملا 5، افزونه Changelog را در قسمت مدیریت مشاهده کنید.
قبل از به‌روزرسانی به جوملا 5، افزونه Changelog را در قسمت مدیریت مشاهده کنید.

جوملا، PSR، سیمفونی

جوملا با استانداردهای PSR مطابقت دارد، بنابراین کار با آن در این زمینه راحت است. برخی از بسته های Symfony در هسته جوملا گنجانده شده است (console، string، vardumper، yaml، error-handler و دیگران)، بنابراین اگر ناگهان بخواهید موارد بیشتری اضافه کنید، جا می گیرند و به خوبی کار می کنند. شما می توانید ببینید که در جوملا به جز اجزای Symfony چه چیز دیگری ارزش دارد libraries/vendor.

چگونه یک کتابخانه PHP شخص ثالث را در افزونه جوملا بپیچیم؟

هیچ چیز پیچیده ای نیست. فایل های کتابخانه معمولا در src پوشه در کنار این پوشه، باید یک مانیفست XML از پسوند جوملا مطابق با مستندات (manual.joomla.org) ایجاد کنید. سپس همه چیز را در یک آرشیو فشرده بسته بندی می کنیم و تمام! قابل نصب است.

اگر به جداول خود در پایگاه داده برای کارکرد کتابخانه نیاز دارید، باید فایل های لازم را با پرس و جوهای SQL در هنگام نصب یا به روز رسانی اضافه کنید. از آنجایی که جوملا 4+ با فضای نام کار می کند، مهم است که این فضای نام را در مانیفست XML برای پسوند مشخص کنید. در اینجا یک مثال کوتاه از مانیفست XML برای کتابخانه جوملا آورده شده است.


 type="library" method="upgrade">
     WebTolk AmoCRM library
     Webtolk/Amocrm
     1.2.1
     ...
      path="src">Webtolk\Amocrm
     
          src
          amocrm.xml
     

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این برچسب به این معنی است که src پوشه از آرشیو ما کپی خواهد شد JPATH_SITE/libraries/Webtolk/Amocrm. در بخش، آنچه را که باید از بایگانی پر شود نشان می دهیم. و Webtolk\Amocrm می گوید که فضای نام Webtolk\Amocrm باید برای ثبت نام شود src پوشه در JPATH_SITE/libraries/Webtolk/Amocrm.

نکات مهم!

  • قبل از جوملا 4.2.7، در واقع تگ از مانیفست XML کار نکرد. بنابراین، لازم بود یک پلاگین سیستمی به بسته کتابخانه اضافه شود که فضای نام را در آن ثبت کند onAfterInitialize رویداد (Event Dispatcher) با استفاده از JLoader کلاس بر این اساس، لازم بود از کتابخانه و افزونه یک بسته ساخته شود. با شروع جوملا 4.2.7، این مشکل برطرف شده است و می توانید بدون افزونه انجام دهید.
  • تا کنون، به روز رسانی کتابخانه = نصب مجدد. یعنی پسوند حذف و نصب می شود. این تصمیم در جایی در عمق نسخه های جوملا 3.x گرفته شده است. چرا؟ – پنهان در زیر کوه های روابط عمومی. ما باید جستجو کنیم. چرا این مهم است؟ زیرا هنگام نصب هر برنامه افزودنی، یک ورودی در “رجیستری” افزونه ها ایجاد می شود – در پایگاه داده در #__extensions جدول این جدول دارای 2 ستون از نوع است TEXTparams و custom_data. و این، باید اعتراف کنید، حجم قابل توجهی از داده ها است. اگر برخی از پارامترهای کتابخانه را در یک پایگاه داده با استفاده از Joomla\CMS\Helper\LibraryHelper، سپس باید این رفتار نصب کننده را در نظر بگیرید و از قبل ذخیره کنید و سپس هنگام به روز رسانی کتابخانه، پارامترهای ذخیره شده را دوباره به اسکریپت نصب کننده برنامه افزودنی اضافه کنید.

use Joomla\CMS\Helper\LibraryHelper;
use Joomla\CMS\Cache\Cache;

/**
 * Function called before extension installation/update/removal procedure commences.
 *
 * @param   string            $type     The type of change (install or discover_install, update, uninstall)
 * @param   InstallerAdapter  $adapter  The adapter calling this method
 *
 * @return  boolean  True on success
 *
 * @since   1.0.0
 */
public function preflight(string $type, InstallerAdapter $adapter): bool
{
    if ($type == 'uninstall')
    {
        return true;
    }

    /**
     *
     *  Joomla when updating extensions of the library type, it actually deletes them (along with the data in the database),
     *  and then installs it again.
     *  In order to avoid losing library data from the database, we are writing this crutch.
     *
     * @see https://github.com/joomla/joomla-cms/issues/39360
     *
     */

    if ($type == 'update')
    {
        $lib_params = LibraryHelper::getParams('Webtolk/Amocrm');
        $jconfig    = $this->app->getConfig();
        $options    = array(
            'defaultgroup' => 'wt_amo_crm_temp',
            'caching'      => true,
            'cachebase'    => $jconfig->get('cache_path'),
            'storage'      => $jconfig->get('cache_handler'),
        );
        $cache      = Cache::getInstance('', $options);
        $cache->store($lib_params, 'wt_amo_crm_temp');

    }

    return true;

}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و در postflight() بر این اساس، پارامترهای ذخیره شده را با استفاده از آن برگردانیم LibraryHelper::saveParams('Webtolk/Amocrm', $lib_params);.

  • برای اینکه کتابخانه کار کند، باید در مدیر برنامه افزودنی فعال شود (منو – سیستم – مدیریت – برنامه های افزودنی).
  • اغلب، پارامترهای خاصی (کلیدهای API، توکن ها و غیره) برای کارکرد کتابخانه مورد نیاز است که باید توسط افراد در قسمت مدیریت جوملا مشخص شود. برای این اهداف، نوشتن یک افزونه (یک نوع پسوند) راحت است library رابط خاص خود را برای پیکربندی پارامترها ندارد). یا سیستم یک یا گروه سفارشی شما مهم نیست. در داخل کتابخانه خود، می توانید پارامترهای پلاگین را خیلی سریع مانند زیر دریافت کنید:

use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Registry\Registry;

if (PluginHelper::isEnabled('system', 'wt_amocrm'))
   {
      $plugin        = PluginHelper::getPlugin('system', 'wt_amocrm');
      $params        = \json_decode($plugin->params);
      $param = $params->param;
      // OR you can use Joomla\Registry\Registry
      $params = new Registry($plugin->params);
      $param = $params->get('param', 'defatul value if empty');
   }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

منابع انجمن جوملا

نوشته های مشابه

دیدگاهتان را بنویسید

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

دکمه بازگشت به بالا