【问题标题】:Installing extensions in homemade CMS在自制 CMS 中安装扩展
【发布时间】:2016-09-02 07:21:30
【问题描述】:

我构建了自己的 CMS 用于学习目的(也只是为了好玩),但现在我想扩展它,以便它支持一些基本形式的扩展(插件)。我想使用某种观察者模式,其中扩展通过ExtensionManager 注册自己以进行某些更新(例如onRenderTitle())。每个扩展都包含一个强制类ExtensionData,它将为系统中的每个扩展执行。扩展可以通过使用回调在此类中注册自己(ExtensionManager 将传递给每个 ExtensionData 类)。

但是现在每个扩展都必须在每次页面加载时注册自己(因为 PHP 在每次页面加载之间都会丢失状态),从而导致潜在的性能问题。

我这样做完全错了吗?或者这是要走的路?我没有编写支持扩展的 CMS 的经验(这就是我想要学习的内容)。我查看了 Wordpress 如何与扩展一起工作,但我还没有发现它是如何加载它们的。

【问题讨论】:

    标签: php plugins content-management-system


    【解决方案1】:

    Wordpress 中的插件只需放在wp-content/plugins 文件夹中即可注册,并且它们必须在其主文件中包含必要的文档块。在 WP 中,您的插件的主文件与您的插件具有相同的名称加上 .php 扩展名也是一个约定,例如plugins/myplugin/myplugin.php.

    就与 CMS 核心的交互而言,您可以让系统触发事件,然后插件会监听它们。 WP 为它使用动作和过滤器。您的简单事件侦听器代码如下所示:

    action('action_name', function() {
        // some code to be executed after event is fired
    });
    

    您的action() 函数可以只更新一个全局动作数组。当您想触发事件时,您只需过滤分配的操作数组。

    foreach ($actions['action_name'] as $func) {
        call_user_func($func);
    }
    

    【讨论】:

    • 谢谢! wp 如何加载这些扩展?每次加载页面时都会这样做吗?
    • 我认为 WP 使用了某种注册插件的缓存。很难,我认为您的基本 CMS 只需通过插件目录并在引导程序上注册它们就可以了。
    • 好的!非常感谢你! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2020-08-27
    • 2017-03-26
    • 2019-07-06
    • 2013-06-10
    • 2021-06-23
    相关资源
    最近更新 更多