在框架内创建模块系统

Rob*_*itt 5 php frameworks module

我正在寻找将模块系统实现到我的应用程序框架中的方法,模块将是以某种方式更改设计的类文件,以便自动与用户干预集成.

我的框架是一个自定义构建的框架,但与codeigniter非常相似,只是稍微轻一点.

我在模板文件中的想法是调用模块位置,并自动加载和解析模块

<html>
     <head>
         <title>Welcome to my site</title>
     </head>
     <body>

          <header> 
               ....
               <?php $this->call_modules('header') ?>;
          </header>

          <section>

               <aside>
                    <?php $this->call_modules('sidebar') ?>;
               </aside>

          </section>

     </body>
</html>
Run Code Online (Sandbox Code Playgroud)

以便调用以下模块并将内容放在那里:

/system/applications/admin/modules/header/a.php
/system/applications/admin/modules/header/b.php
/system/applications/admin/modules/sidebar/a.php
/system/applications/admin/modules/sidebar/b.php
Run Code Online (Sandbox Code Playgroud)

所以对我来说似乎它可以正常工作,但问题是我之前从未构建过模块系统,而且我觉得这些被归类为钩子.

在我的脑海中,我基本上想要一个由1个类文件和模板组成的简单系统,如果需要,calss文件可能如下所示:

class Module_HelloWorld extends Module
{
     public static function info()
     {
         return array(
             'name' => 'Hello Word',
             'version' => '1.0.0',
             'description' => 'Dispalys "hello World"',
             'author' => 'Robert Pitt',
         );
     }

     public function execute($context,$action)
     {
          //$context would be the current view at the point of execution for the view

          //$action would be header / sidebar
     }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题简而言之,为我的框架设计模块系统的最佳方法是什么,允许将3Rd方模块放在目录中然后从管理员安装,而无需太多用户干预?

Imr*_*qvi 3

祝你的 mvc 和 cms 好运。我前段时间也曾实现过同样的想法,我想到的第一个方法很简单。

  1. 将您的系统建立在页面和模块(小部件)的基础上。
  2. 页面信息保存在数据库表中,称为“页面”。
  3. 模块(小部件)是包含元数据(定义)和业务逻辑的类。
  4. 如果将模块添加到页面,其特定信息将保存在数据库中。
  5. 下次如果你想要它的实例,只需将相关参数传递给它的类即可。
  6. 这样您就可以在不同的地方和不同的实例中使用模块的单一定义。
  7. 您可以在数据库中添加任意数量的页面。
  8. 用户可以在单个页面中添加任意数量的小部件。