在 Joomla 中连接第三方 PHP 库

PHP 库很方便,因为它们可以从应用程序中的任何位置访问:从插件、组件模型、模块等。如果有人已经解决了类似的问题并将其设计为库(甚至更新了它),那么将此库连接到您的 Joomla 是有意义的。例如,要为在线商店开发付款方式,您需要付款聚合器的官方库。或者您对某些 CRM 的官方 PHP SDK 感到满意。

作曲家

Joomla 不支持直接使用 Composer。为了在工作中使用该库,您需要将其“包装”在 Joomla 扩展类型“库”中并安装它。在严肃的项目中,采用修复项目所有组件版本的方法:代码经过多次检查、测试并允许在生产中使用。

您使用库创建一个包,然后将其安装在您需要的任何位置。随着库的新版本的发布,您可以更新包装器并获得使用 Joomla 扩展的所有优势:以标准方式更新扩展,包括通过 CLI。在更新之前,在管理区域中查看扩展的更改日志等。

View the Changelog extension in the admin area BEFORE updating to Joomla 5.

Joomla,PSR,Symfony

Joomla 符合 PSR 标准,因此在这方面使用它很方便。Joomla 核心中包含一些 Symfony 包(`console`、`string`、`vardumper`、`yaml`、`error-handler` 等),因此如果您突然想添加更多包,它们会很合适并且运行良好。您可以在 `libraries/vendor` 中查看 Joomla 中除了 Symfony 组件之外还有什么其他有价值的东西。

如何在 Joomla 扩展中包装第三方 PHP 库?

没什么复杂的。库文件通常位于“src”文件夹中。在此文件夹旁边,您需要根据文档 (manual.joomla.org) 创建 Joomla 扩展的 XML 清单。然后我们将所有内容打包成一个 zip 存档,就这样!就可以安装了。

如果您需要在数据库中使用自己的表以使库正常工作,则需要在安装或更新期间使用 SQL 查询添加必要的文件。由于 Joomla 4+ 使用命名空间,因此在扩展的 XML 清单中指定此命名空间非常重要。以下是 Joomla 库的 XML 清单的简化示例。



     WebTolk AmoCRM library
     Webtolk/Amocrm
     1.2.1
     ...
     Webtolk\Amocrm
     
          src
          amocrm.xml
     

`` 标签意味着我们档案中的 `src` 文件夹将被复制到 `JPATH_SITE/libraries/Webtolk/Amocrm`。在`”部分,我们指出需要从档案中填写的内容。并且“\ \` 表示必须为 `JPATH_SITE/libraries/Webtolk/Amocrm` 中的 `src` 文件夹注册命名空间 `Webtolk\Amocrm`。

重要提示!

  • 事实上,在 Joomla 4.2.7 之前,标签XML 清单中的命名空间不起作用。因此,需要向库包添加一个系统插件,该插件将使用 JLoader 类在 onAfterInitialize 事件(事件调度程序)上注册命名空间。因此,需要从库和插件构建一个包。从 Joomla 4.2.7 开始,这个问题已经得到修复,您可以不用插件。
  • 到目前为止,更新库 = 重新安装。也就是说,扩展被删除并安装。这个决定是在 Joomla 3.x 版本的某个深处做出的。为什么? - 隐藏在 PR 的山下。我们需要搜索。为什么这很重要?因为在安装任何扩展时,都会在扩展的“注册表”中创建一个条目 - 在数据库中的 #__extensions 表中。该表有 2 列 TEXT 类型 - params 和 custom_data。而且,你必须承认,这是相当多的数据。如果您使用 Joomla\CMS\Helper\LibraryHelper 将一些库参数存储在数据库中,那么您需要考虑安装程序的这种行为并预先保存,然后在更新库时将保存的参数添加回扩展的安装程序脚本。
  • 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 密钥、令牌等)才能工作,这些参数必须由 Joomla 管理区域中的人员指定。出于这些目的,编写插件很方便(扩展类型库没有自己的用于配置参数的界面)。无论是系统插件还是您自己的自定义组都无​​关紧要。在您的库中,您可以像这样快速获取插件参数:
  • params);
          $param = $params->param;
          // OR you can use Joomla\Registry\Registry
          $params = new Registry($plugin->params);
          $param = $params->get('param', 'defatul value if empty');
       }

    Joomla 社区资源

  • https://joomla.org/
  • Mattermost 中的 Joomla 社区聊天
  • WebTolk Joomla 扩展
  • 本文为俄文