在ExpressionEngine模块开发中,哪里有一个添加PHP类进行实例化的好地方?

时间:2012-06-28 15:19:36

标签: php class module expressionengine

我有一个用PHP编写的有用对象,我可以将其命名为my_class.php

<?php
class my_class{
  var property;
  function __construct($conn){
     $query = "SELECT * FROM bla bla bla";
     $rs2 = mysql_query($query , $conn);
     //... do stuff with results etc.
  }
  function do_something(){
     //more code here
  }
}
?>

我想用这个类做的是能够在EE站点的admin部分内使用它,方法如下:

$this_obj = new my_class($conn);

由此产生的担忧如下:
1)当你在EE之外时,$ conn将是与MySql的连接,并且最好将它放在可以使用EE数据库调用的地方。

2)你会把课程放在哪里,以便EE可以多次入职?

为了使这个对象有用,它需要实例化几十次,我想要使用这些对象的数组,而不只是一个实例。

提前感谢任何见解!

2 个答案:

答案 0 :(得分:3)

您可能需要查看CodeIgniter docs。 ExpressionEngine基于CI,因此如果您正在寻找最佳实践,请查看CI文档。

您可以将类文件存储在任何地方 - 但大多数人将库/ / lib /存储在他们正在开发的addon文件夹中。这样你就可以调用$ this-&gt; EE-&gt; load-&gt; library('whatever');

查看用于进行数据库调用的模型 - 还可以查看CI DB / ActiveRecord类和DB forge类。

希望有所帮助!

答案 1 :(得分:1)

以下是如何在EE Module的控制面板中实例化一个可以处理自己的MySQL的对象。

控制面板位于模块的.mcp文件中,正如Philip所说,使用它作为库是可行的方法。

位于expressionengine / third_party / your_module / libraries / my_class.php中的类文件

<?php
class my_class{
  var property;
  function __construct(){
     $this->EE = & get_instance();
  }
  function init($some_id){
     $query = "SELECT * FROM table WHERE whatever='$some_id' ";
     $results = $this->EE->db->query($query);
     if ($results->num_rows() > 0) {
         foreach ($results->result_array() as $row) {
           //do your thing here
         }
     }
  }
  function do_something(){
     //more code here
     return $results;
  }
}

现在这个代码位于正确的位置,即库文件夹,您可以从mcp文件中访问它,从提供视图的任何方法中都可以访问它。

//somewhere in the method you're using in your module
$this->EE->load->library('my_class.php', '', 'reference_name');
//passing something here to the constructor will throw warnings.
$obj = new $this->EE->reference_name();
$obj->init($some_id);
$tmp = $obj->do_something();
上面的$ obj是my_class类的一个实例,而$ tmp将是do_something方法产生的任何内容。没有必要将对象传递给MySQL连接,如果您在上面的构造函数中有第一行,ExpressionEngine会为您执行此操作。