在自制CMS中安装扩展

时间:2016-09-02 07:21:31

标签: php plugins content-management-system

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

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

我这样做完全错了吗?或者这是要走的路?我没有编写支持扩展程序的CMS的经验(这是我尝试学习的内容)。我看了一下Wordpress如何使用扩展程序,但我还没有找到它如何加载它们。

1 个答案:

答案 0 :(得分:0)

Wordpress中的插件只是放在wp-content/plugins文件夹中注册,并且必须在其主文件中包含必要的docblock。 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);
}