我被要求做一个项目,客户端可以创建PHP插件并将它们添加到网站......与WordPress插件相同的概念。
制作支持该软件的软件的最佳方法是什么?我不是要求解决方案,我要求的是概念或结构。
答案 0 :(得分:1)
首先,您必须确定如何集成插件。如果你想要像Wordpress插件这样的东西,这些插件在大多数时候都只是简单的功能,那么它非常容易。这就像在您的应用程序中添加新代码一样。
基本上,您的应用程序应该能够构建可用的插件列表,并确定哪些插件已启用。可以通过浏览文件,配置文件等来构建列表。例如,启用的插件可以存储在数据库中。
然后,您只需执行一个用户可以启用每个可用插件的界面。启用它时,Web应用程序将在插件数据库中写入有关它的信息,并指定它已启用。然后,应用程序调用插件类的特定方法(实际上,OOP在正确的插件开发中是必需的),如Install()。为了避免插件没有这种方法时的异常,所有插件类都应该继承在主Web应用程序中编写的基类,该基类确实包含该方法的定义。该方法的唯一目的是执行插件的初始化(将表创建到数据库,填充统计信息等)。
此外,在每次请求时,您的Web应用程序都应包含指定为已启用的插件的所有文件。然后根据需要使用它们。例如,从模板调用他们的方法。如果你想编写对模板开发人员透明的插件,那么你可以像在wordpress中一样。在那里,初始化插件(例如,当它包含文件时)将特定数据写入操作数组。它可以编写应调用的函数,使用什么参数以及何时调用。
您甚至可以在主Web应用程序中创建类似事件触发器的内容,以启用自定义。在绘制内容之前,调用一个名为do_action("before_output_of_something")
的函数,在输出结束后,调用函数do_action("after_output_of_something")
。字符串参数将是触发器数组中的键,指向一组操作(事件处理程序)。要添加事件处理程序,请调用此函数add_action("before_output_of_something", $object, "method_name", array("parameters"))
。 do_action方法传递操作数组,并使用call_user_func()
PHP函数调用事件处理程序。
这个话题还有很多。一切都取决于你想要做什么。 我在这里写的只是表达一些可能性的糟糕尝试。你应该做的是找一本好书,也许只是关于这个话题。
答案 1 :(得分:1)
我会通过使用事件调度程序模式来解决这个问题。您可以在主应用程序中定义某些点(事件)。插件可以注册此事件,并在触发相关事件时执行。
答案 2 :(得分:0)
有多种选择。最常见的是具有简单插件函数的钩子概念,您只需要在中央配置脚本中包含()插件。每个插件都必须自己注册,所以通常有一个插件注册方法。但它也可能看起来像这样:
$app_plugin["add_title"][] = "do_whatever";
function do_whatever($request, &$page) {...}
在您的主应用程序中,您只需定义几个插件调用,无论您何时需要它。您将使用包装函数来调用所有插件,但基本上您会查找挂钩名称并调用所有已注册的插件:
foreach ($app_plugin["add_title"] as $func) {
$output .= $func($_REQUEST, $page);
每个命名的钩子都可以有一组不同的参数。通常,您希望获得其他内容,但有时插件只是修改现有变量,或影响应用程序流。
您拥有的钩子越多,扩展的可能性就越多样化。并且没有必要仅使用功能。当然这个方案也适用于对象(它们只需要首先实例化。)