Php 使我的代码易于编写插件
我一直在写一些代码来创建一个通用的博客 它的功能很简单,可以创建帖子、编辑和删除帖子以及允许评论 我正在尝试编写它,以便为它编写插件非常容易,但是我不确定最佳方法。Php 使我的代码易于编写插件,php,model-view-controller,plugins,Php,Model View Controller,Plugins,我一直在写一些代码来创建一个通用的博客 它的功能很简单,可以创建帖子、编辑和删除帖子以及允许评论 我正在尝试编写它,以便为它编写插件非常容易,但是我不确定最佳方法。 我的一些想法: 让插件作者编写一个名为“config”的短脚本,其中他们有一个数组,其中包含应用程序(如前端、管理员等)、模块(如博客、个人资料等)和插件影响的操作(如创建、编辑等),然后在运行正确操作时包含插件文件 //example array in config.php: array( 'application' =>
我的一些想法:
//example array in config.php:
array(
'application' => 'admin',
'module' => 'blog',
'action' => array('create','edit')
);
#example code in blog_form.php
<input type="text" name="blog_title" />
<input type="text" name="blog_text" />
{form-extras}
#example code in plugins config.php
array(
'replace' => array('form-extras')
);
问题
有没有人知道关于使代码易于编写插件的教程/文章,或者有没有人知道我可以应用哪些经过测试的方法
问候
Luke您要查找的是一个插件架构的示例和/或信息。使用这个术语和谷歌将揭示许多资源 检查如何在现有已建立的应用程序(如WordPress、Drupal或Joomla)中实现这一点
还要考虑这个现有的问题:您正在寻找的是一个关于插件架构的示例和/或信息。使用这个术语和谷歌将揭示许多资源 检查如何在现有已建立的应用程序(如WordPress、Drupal或Joomla)中实现这一点
还可以考虑这个现有的问题:在您开始考虑如何制作插件系统之前,您必须定义插件对于您的应用程序来说到底是什么,插件可以做什么,以及插件能够访问什么数据(例如,posts表而不是users表) 然后,看看Drupal,我想它的基于钩子的模块系统对于开发人员来说是非常强大和“简单”的 基本上,这个想法是当一个模块或插件被安装时,你在你的“核心”代码上所做的一切,搜索是否有一些模块/插件连接到这个动作 例如:
//your code
$modules_enabled = array('foo', 'bar');
//example action, lets say insert a new blog post. Obviously, nothings prevent you
//to do that in OOP style (i'd never really understood why drupal is almost all procedural).
function create_new_post($modules_enabled, $other_args){
//looks if some modules need to be called before create the blog post
foreach($modules_enables AS $module){
if(function_exists("after_create_new_post_$module")){
$func = "before_create_new_post_$module";
$func($params);
}
}
//do your stuff here
//looks if some modules need to be called after the post is been created
foreach($modules_enables AS $module){
if(function_exists("after_create_new_post_$module")){
$func = "after_create_new_post_$module";
$func($params);
}
}
}
//the module file should look like $hooks_name . $module_name:
function after_create_new_post_foo($args){
//do your job
}
这是一个非常非常简单的例子(而且不起作用!),但应该给你一个想法
这里唯一的问题是传递给每个hook_函数的参数,必须很好地记录这些参数,但是无论您选择什么路径,文档都很重要
一些参考资料:,在您开始考虑如何使插件系统成为一个系统之前,您必须定义插件对于您的应用程序来说到底是什么,插件可以做什么,以及插件能够访问什么数据(例如,posts表而不是users表) 然后,看看Drupal,我想它的基于钩子的模块系统对于开发人员来说是非常强大和“简单”的 基本上,这个想法是当一个模块或插件被安装时,你在你的“核心”代码上所做的一切,搜索是否有一些模块/插件连接到这个动作 例如:
//your code
$modules_enabled = array('foo', 'bar');
//example action, lets say insert a new blog post. Obviously, nothings prevent you
//to do that in OOP style (i'd never really understood why drupal is almost all procedural).
function create_new_post($modules_enabled, $other_args){
//looks if some modules need to be called before create the blog post
foreach($modules_enables AS $module){
if(function_exists("after_create_new_post_$module")){
$func = "before_create_new_post_$module";
$func($params);
}
}
//do your stuff here
//looks if some modules need to be called after the post is been created
foreach($modules_enables AS $module){
if(function_exists("after_create_new_post_$module")){
$func = "after_create_new_post_$module";
$func($params);
}
}
}
//the module file should look like $hooks_name . $module_name:
function after_create_new_post_foo($args){
//do your job
}
这是一个非常非常简单的例子(而且不起作用!),但应该给你一个想法
这里唯一的问题是传递给每个hook_函数的参数,必须很好地记录这些参数,但是无论您选择什么路径,文档都很重要
一些参考资料:,Hi Jon,我看了另一个主题,也在google上,我发现了一些论坛帖子(感谢“插件架构”的正确名称),但是没有关于php的好文章,我打算在某个时候深入drupal看看他们是如何做的,但是你可能不知道一篇专门针对php的好文章,是吗?谢谢LukeIn事实上,我刚在Google上搜索了“PHP插件架构”,在第一次搜索结果中就发现了这个问题,我觉得如果有人告诉我在Google上搜索这个问题会很糟糕。嗨,Jon,我看了另一个主题,在Google上,我找到了一些论坛帖子(感谢正确的名称“插件架构”)但是没有关于php的好文章,我打算在某个时候深入研究drupal,看看他们是如何做到的,但是你可能不知道一篇关于php的好文章,是吗?谢谢LukeIn事实上,我刚在Google上搜索了“PHP插件架构”,在第一次搜索结果中发现了这个问题,我认为如果有人告诉我要在Google上搜索这个问题,那就太糟糕了。谢谢你的示例代码Daniel,在基本actions类构造和析构函数中的foreach循环中使用类似的调用是否可行?这样,它们总是在类中任何代码的开始和结束时被调用?感谢您花时间编写上面的示例,其中包含了大量文档,非常清楚。我的代码只是一个示例,并不是drupla钩子的实际工作方式(您确实需要在drupal文档中查看它们)。一些钩子只是“覆盖”基函数,其他钩子则作为“检查”工作,如果钩子函数返回true,则执行基函数,否则不执行。这只是一个指南,取决于您的具体需求。谢谢Daniel,有帮助的参考资料和评论,我一直在挖掘Drupal代码,它非常有用。干杯谢谢示例代码Daniel,在基本actions类构造和析构函数中的foreach循环中使用类似的调用是否可行?这样,它们总是在类中任何代码的开始和结束时被调用?感谢您花时间编写上面的示例,其中包含了大量文档,非常清楚。我的代码只是一个示例,并不是drupla钩子的实际工作方式(您确实需要在drupal文档中查看它们)。一些钩子只是“覆盖”基函数,而另一些钩子则作为“检查”,如果钩子函数返回基函数为true