2

私は 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 サイトの管理セクション内で次のように使用できるようにすることです。

$this_obj = new my_class($conn);

このことから生じる問題は次のとおりです:
1) $conn は、EE の外部にいる場合は MySql への接続になるため、これを EE データベース呼び出しを使用できる場所に配置することをお勧めします。

2) EE が何度もインスタンス化できるように、どこにクラスを配置しますか?

このオブジェクトを有効にするには、何十回もインスタンス化する必要があります。1 つのインスタンスではなく、これらのオブジェクトの配列を使用したいと考えています。

洞察を事前にありがとう!

4

2 に答える 2

3

CodeIgniter のドキュメントを参照してください。ExpressionEngine は CI に基づいているため、ベスト プラクティスを探している場合は CI ドキュメントを参照してください。

クラスファイルは好きな場所に保存できますが、ほとんどの人は開発中のアドオンフォルダー内の libraries/ または lib/ に保存します。そうすれば、 $this->EE->load->library('whatever'); を呼び出すことができます。

データベース呼び出しを行うためのモデルを見てください。CI DB / ActiveRecordクラスとDB forgeクラスも見てください。

それが役立つことを願っています!

于 2012-06-28T15:37:26.227 に答える
1

EE モジュールのコントロール パネル内で独自の 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 がそれを行います。

于 2012-06-29T20:12:42.497 に答える