Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使我的代码易于编写插件_Php_Model View Controller_Plugins - Fatal编程技术网

Php 使我的代码易于编写插件

Php 使我的代码易于编写插件,php,model-view-controller,plugins,Php,Model View Controller,Plugins,我一直在写一些代码来创建一个通用的博客 它的功能很简单,可以创建帖子、编辑和删除帖子以及允许评论 我正在尝试编写它,以便为它编写插件非常容易,但是我不确定最佳方法。 我的一些想法: 让插件作者编写一个名为“config”的短脚本,其中他们有一个数组,其中包含应用程序(如前端、管理员等)、模块(如博客、个人资料等)和插件影响的操作(如创建、编辑等),然后在运行正确操作时包含插件文件 //example array in config.php: array( 'application' =>

我一直在写一些代码来创建一个通用的博客

它的功能很简单,可以创建帖子、编辑和删除帖子以及允许评论

我正在尝试编写它,以便为它编写插件非常容易,但是我不确定最佳方法。
我的一些想法:

  • 让插件作者编写一个名为“config”的短脚本,其中他们有一个数组,其中包含应用程序(如前端、管理员等)、模块(如博客、个人资料等)和插件影响的操作(如创建、编辑等),然后在运行正确操作时包含插件文件

    //example array in config.php:
    array(
      'application' => 'admin',
      'module'      => 'blog',
      'action'      => array('create','edit')
    );
    
  • 在视图代码中添加字符串,如“{formextras}”,并让插件作者说出代码将替换的字符串。然后使用str_replace将{xxx}替换为插件代码

    #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