2010-09-05 83 views
2

我正在为关键字研究构建一个网络应用程序。主要是它需要一个关键字,它使用它来创建curl请求,并解析数字,然后存储在mysql表中。 curl请求将用于检索yahoo的结果数量,该关键字的diggs数量等。是否有任何PHP框架来建立一个具有插件功能的Web应用程序?

所以我想以某种方式对它进行编码以使用插件(一个用于雅虎,另一个用于digg等) )。

有没有任何PHP框架可以帮助我做到这一点?

回答

2

框架不处理这样的事情。你需要以插件的方式进行编码。

以下情形将允许你在插件的方式代码:

比方说我们在网站的根目录,并在数据库中的表称为插件具有以下结构的目录称为插件(ID,姓名,启用路径)

现在,您需要为您的插件的接口。这样所有插件将具有相同的基本结构。

/** 
* FILE: /plugins/PluginInterface.php 
* 
* Sample Interface 
*/ 
interface iPlugin{ 

    /** 
    * Tests if plug-in can be executed 
    */ 
    function test(); 

    /** 
    * Prepared plug-in for execution 
    */ 
    function prepare(); 

    /** 
    * Executes plug-in logic and returns count of somethings 
    */ 
    function execute(); 
} 


/** 
* FILE: /plugins/PluginExample.php 
* 
* Sample Plug-in 
*/ 
class PluginExample implements iPlugin{ 

    public function execute() { 

    } 

    public function prepare() { 

    } 

    public function test() { 

    } 
} 

现在您需要为PluginExample插入数据库记录。

INSERT INTO plugins (id, name, enabled, path) VALUES (1, 'Example', 1, 'PluginExample.php') 

最后一点,你需要控制的somekind的加载所有启用插件从数据库中(得到的路径)和创建对象并执行。像这样

function loadAndExecutePlugins() { 
    $query = "select * from plugins where enabled = 1"; 
    $plugins = 'array of objects from query 1'; 

    if ($plugins) { 
     foreach ($plugins as $plugin) { 
      // 
      $class = $plug->path; 
      include_once "/plugins/$class"; 

      // Class is using interface, so you know what methods to call 
      $plug = new $class(); 
      if ($plug->test()) { 
       $plug->execute(); 
      } 
     } 
    } 
} 
+0

谢谢,我发现这个答案太有用http://stackoverflow.com/questions/42/best-way-to-allow-plugins-for-a-php-application,但你的代码更容易理解我。 – jarkam 2010-09-05 05:42:05

0

PHP Fat-Free Framework已经有一个你可以使用的雅虎插件。尽管Digg插件不存在,但应该很容易在雅虎插件之后对其进行构图。看看代码。

相关问题