插件菜单配置

为了进一步简化插件菜单配置流程,针对插件的菜单生成功能进行了优化。插件能够通过配置自动生成菜单数据,从而极大地减轻了系统上线后开发者的手动配置工作。 我们设计了一个标准的菜单定义方式,开发者在应用插件的 Service 类中实现 menu 方法,并在其中定义插件的菜单配置。这个方法将返回一个包含菜单项信息的数组或对象,用于描述插件的菜单结构、权限要求以及其他相关属性。

当插件被安装时系统会自动调用 Service 类的 menu 方法,并根据返回的菜单配置生成相应的菜单数据。这些菜单数据将自动集成到系统的菜单体系中,使得插件的菜单项能够无缝地融入到整个应用界面中。

通过这种方式,开发者无需手动编写繁琐的菜单生成代码,只需在 menu 方法中定义好菜单配置即可。这不仅提高了开发效率,还降低了出错的可能性,使得插件的菜单生成更加可靠和一致。 此外,系统还提供了灵活的菜单配置选项,允许开发者根据实际需求自定义菜单项的显示方式、权限控制等。这使得插件的菜单能够更好地适应不同的应用场景和业务需求。

菜单分为两种类型

为了提高插件的集成性和易用性,系统优化了全局菜单的写入方式,并改进了插件专属空间的菜单管理。

首先,系统实现了全局菜单的数据库写入功能。通过将菜单数据写入 system_menu 数据表,我们可以更加灵活地管理整个应用的菜单结构。为了实现这一功能,我们借助了强大的数据库迁移工具 Phinx。通过 Phinx 我们可以方便地创建、修改或删除数据表结构,确保菜单数据的正确存储和访问。 其次,系统改进了插件专属空间的菜单管理。当通过插件中心进入插件专属空间时,左侧将展示当前插件的专属菜单。这些菜单项将清晰地反映出插件的功能模块,并提供返回插件中心的入口。为了实现这一功能,我们要求开发者在插件服务注册类中定义菜单。通过这种方式,插件能够动态地生成和管理自己的菜单项,无需手动修改配置文件或数据表。

插件中心统一入口

在安装 插件中心 后,系统进一步提升了插件管理的便捷性和统一性。用户可以通过插件中心的统一入口,直接访问各个应用插件的独立管理菜单。 具体来说,每个应用插件的 Service 类中定义的 menu 方法,负责生成该插件的专属管理菜单。当插件中心被安装并启用后,它会自动扫描并集成所有已安装插件的管理菜单。这样,用户只需通过插件中心的统一入口,即可一站式地管理和操作所有插件。

这一优化不仅简化了插件管理的流程,还提高了管理的效率。用户无需在不同的地方查找和访问各个插件的管理界面,只需在插件中心即可完成所有操作。同时,由于菜单是由插件自身定义的,因此可以确保菜单的准确性和完整性,避免了因手动配置而可能产生的错误。

写入全局菜单数据

在数据库脚本的执行过程中,系统引入了自动写入菜单数据的机制。具体而言,通过调用应用插件 Service 中的 menu 方法,我们可以获取到插件的菜单配置信息。利用 think\admin\extend\PhinxExtend::write2menu() 方法,我们将这些配置信息自动写入到 system_menu 数据表中,从而实现了菜单的自动生成。

温馨提示: 当卸载应用插件时,并不会自动删除与之相关的菜单项。这可能导致在卸载插件后,系统中仍然残留有无效或不再需要的菜单项,需要管理员手动去系统菜单管理界面进行删除操作。

应用插件菜单案例

应用插件 Servicemenu 定义菜单,参考:

https://gitee.com/zoujingli/think-plugs-wechat/blob/master/src/Service.php

数据库脚本读取菜单并写入到全局菜单,参考:

https://gitee.com/zoujingli/think-plugs-wechat/blob/master/stc/database/20221013045830_install_wechat_data.php#L41

Last Updated:
Contributors: 邹景立