2012-06-28 1 views
2

У меня есть полезный предмет написанный на PHP позволяет называть его my_class.phpВ разработке модуля ExpressionEngine, где хорошее место для добавления класса 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) $ сопп будет подключение к MySql, когда вы вроде за пределами ЭЭ, и было бы лучше, чтобы поместить это где-нибудь, где можно использовать вызовы базы данных EE.

2) где бы вы поместили класс, чтобы EE мог его заставлять много раз?

Чтобы сделать этот объект полезным, его нужно будет создавать несколько десятков раз, и я хочу использовать массив этих объектов, а не только один экземпляр.

Заранее благодарим за понимание!

ответ

3

Возможно, вы захотите ознакомиться с CodeIgniter docs. ExpressionEngine основан на CI, поэтому, если вы ищете лучшие практики, посмотрите на документы CI.

Вы можете хранить файлы классов везде, где захотите, но большинство людей хранит библиотеки в библиотеке/lib/в папке аддона, которую они разрабатывают. Таким образом, вы можете вызвать $ this-> EE-> load-> library ('whatever');

Взгляните на модели для создания вызовов в базе данных - также ознакомьтесь с классом CI DB/ActiveRecord и классом DB forge.

Надеюсь, что это поможет!

+0

Спасибо! Это то место, где я возглавляю это, я смотрю, возможно, зацикливая библиотеку $ this-> load-> ('my_class', '', 'reference_name'); или если вы вызовете его однажды, я позволю мне построить много объектов из этого класса. –

+0

После того, как у вас есть библиотека, вы можете создать столько объектов - не нужно помещать ее в цикл. –

+1

Да. Теперь работает экземпляр. Как только у меня будет часть MySql, я выясню и буду работать, я опубликую убедительный пример. –

1

Вот как создать экземпляр объекта, который может обрабатывать свой собственный MySQL в панели управления модуля EE.

Панель управления находится в файле .mcp для вашего модуля, и, как сказал Филипп, использование этого в качестве библиотеки - это путь.

Класс файл, расположенный в ExpressionEngine/THIRD_PARTY/your_module/библиотеки/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 делает это для вас, если у вас есть первая строка в конструкторе выше.

Смежные вопросы