在 Joomla 中连接第三方 PHP 库
PHP 库很方便,因为可以从应用程序中的任何位置访问它们:从插件、组件模型、模块等。如果有人已经解决了类似的问题并将其设计为库(甚至更新了它),将这个库连接到您的 Joomla 是有意义的。例如,要为在线商店开发支付方式,您需要支付聚合器的官方库。或者您对某些CRM官方的PHP SDK是否满意。
作曲家
Joomla 不支持直接使用 Composer。为了在工作中使用该库,您需要将其“包装”在 Joomla 扩展类型库中并安装它。在严肃的项目中,采用修复项目所有组件版本的方法:代码经过多次检查、测试并允许在生产中工作。
您使用您的库创建一个包,将其安装在您需要的任何地方。随着库的新版本发布,您可以更新包装器并获得使用 Joomla 扩展的所有优势:以标准方式更新扩展,包括通过 CLI。在更新等之前,请在管理区域中查看扩展程序的变更日志
更新到 Joomla 5 之前,请在管理区域中查看变更日志扩展。
Joomla、PSR、Symfony
Joomla 符合 PSR 标准,因此在这方面使用它很方便。 Joomla 核心中包含一些 Symfony 软件包(控制台、字符串、vardumper、yaml、错误处理程序等),因此如果您突然想要添加更多软件包,它们将适合并运行良好。除了库/供应商中的 Symfony 组件之外,您还可以看到 Joomla 中还有哪些有价值的内容。
如何将第 3 方 PHP 库包装在 Joomla 扩展中?
没什么复杂的。库文件通常位于 src 文件夹中。在此文件夹旁边,您需要根据文档 (manual.joomla.org) 创建 Joomla 扩展的 XML 清单。然后我们将所有内容打包到 zip 存档中,就是这样!可以安装了。
如果您需要在数据库中拥有自己的表才能使库正常工作,则需要在安装或更新过程中使用 SQL 查询添加必要的文件。由于 Joomla 4 使用名称空间,因此在扩展的 XML 清单中指定此名称空间非常重要。以下是 Joomla 库的 XML 清单的缩写示例。
<?xml version="1.0" encoding="UTF-8" ?> <extension type="library" method="upgrade"> <name>WebTolk AmoCRM library</name> <libraryname>Webtolk/Amocrm</libraryname> <version>1.2.1</version> ... <namespace path="src">Webtolk\Amocrm</namespace> <files> <folder>src</folder> <filename>amocrm.xml</filename> </files> </extension>
;标签意味着我们存档中的 src 文件夹将被复制到 JPATH_SITE/libraries/Webtolk/Amocrm。在中部分,我们指出需要从档案中填写的内容。和
重要注意事项!
-
在 Joomla 4.2.7 之前,事实上,标签
是来自 XML 清单的方法不起作用。 因此,有必要向库包中添加一个系统插件,该插件将使用 JLoader 类在 onAfterInitialize 事件(事件调度程序)上注册命名空间。因此,有必要从库和插件构建一个包。 从 Joomla 4.2.7 开始,它已被修复,您可以不使用该插件。 - 到目前为止,更新库=重新安装。即删除并安装扩展。这个决定是在 Joomla 3.x 版本的深处做出的。为什么? - 隐藏在公关山脉之下。我们需要寻找。为什么这很重要?因为安装任何扩展时,都会在扩展的“注册表”中创建一个条目 - 在 #__extensions 表的数据库中。该表有 2 列 TEXT 类型 - params 和 custom_data。你必须承认,这是一个相当大的数据量。如果您使用 JoomlaCMSHelperLibraryHelper 将一些库参数存储在数据库中,那么您需要考虑安装程序的这种行为并预先保存,然后在更新库时将保存的参数添加回扩展的安装程序脚本中。
<?php 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 密钥、令牌等)才能工作,这些参数必须由 Joomla 管理区域的人员指定。出于这些目的,编写一个插件很方便(扩展类型库没有自己的参数配置接口)。系统组或您自己的自定义组并不重要。在你的库中,你可以像这样快速获取插件参数:
<?php 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'); }
Joomla 社区资源
- https://joomla.org/
- Mattermost 中的 Joomla 社区聊天
- WebTolk Joomla 扩展
- 这篇俄语文章
以上是在 Joomla 中连接第三方 PHP 库的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。
