【问题标题】:Accessing CodeIgniter library through ExpressionEngine通过 ExpressionEngine 访问 CodeIgniter 库
【发布时间】:2012-02-06 02:39:08
【问题描述】:

我不确定这是否可行,但 ExpressionEngine 论坛和文档中的各种帖子表明我应该能够让 ExpressionEngine 知道它所建立的 CodeIgniter 基础中发生了什么。

因此,鉴于此,我有一个 CodeIgniter 应用程序和一个 ExpressionEngine 站点。 /system 目录的结构如下:

/系统

  • /system/codeigniter
  • /system/codeigniter/application(这是我现有的 CodeIgniter 应用程序)
  • /system/codeigniter/system(这是运行 EE 的同一个 CI 文件夹)

  • /system/expressionengine

  • ...(这是普通的 EE - 模板、插件等。

我对 ExpressionEngine 还很陌生,但我的理解是我可以使用此设置来构建一个可以与 CodeIgniter 很好集成的 EE 模块。

目前,我有一个模块设置,以及其中的一个方法,这只是一个起点:

function __construct()
{
    $this->EE =& get_instance();
    $this->CI =& get_instance();
    $this->auth =& $this->CI->load->library('mylibrary');
}

但是当我加载模块时它无法识别库(这一切都发生在 EE 控制面板内,此时我可以在两者之间建立连接)。说不存在。我可以做些什么来建立这种联系,还是我完全走错了方向?

谢谢, 乔纳森

【问题讨论】:

    标签: php codeigniter expressionengine


    【解决方案1】:

    好的,感谢http://expressionengine.com/forums/viewthread/208140/ 我有一个我认为可以建立的答案。

    为了后代,它是这样工作的:

    EE 和你的模块根本不知道你的 system/codeigniter/application 文件夹。试试这个,它可能会起作用:

    $this->EE =& get_instance();
    $this->EE->load->add_package_path(BASEPATH.'../application/');
    $this->EE->load->library('mylibrary');
    $this->EE->mylibrary->do_stuff();
    

    从那里我能够加载我的库,但它在加载其语言文件时出现问题。同样的线程也给出了答案。此代码进入 CI 库文件,EE 在加载时对其进行翻译。

    $this->ci->lang->load('mylangfile', '', FALSE, TRUE, BASEPATH.'../application/');  
    

    【讨论】:

      【解决方案2】:

      在过去,我为 EE 编写了简单的包装器插件来访问 CodeIgniter 助手等。Here's an example of a simple wrapper add-on

      另一种选择,PHP 应该可以做到这一点,这意味着您需要在模板中启用 PHP。简而言之,你加载 helper/library/etc,然后调用你想要的方法。更多info on how to do that in the EE docs

      【讨论】:

      • 感谢您的帮助。我想我仍然对 EE 如何知道我在 CodeIgniter 中的自定义库感到有些困惑?我最初的想法很像你的例子,但它似乎不起作用。正如我之前尝试过的,$this->CI->load->library('libraryname'); 只是返回一个错误。这有意义吗?
      • 我应该澄清一下:当我使用 get_instance 时,它​​确实知道 CI 本身;只是不是我的图书馆。
      • 您是否尝试将您的库放入 EE 库文件夹中?
      【解决方案3】:

      你应该简单地将你的库放在/third_party/my_addon/libraries/ 文件夹中,然后像这样加载它:

      function __construct()
      {
          $this->EE =& get_instance();
          $this->auth = $this->EE->load->library('../third_party/mhy_addon/libraries/mylibrary');
      }
      

      【讨论】:

      • 我猜我希望 EE 能够理解 CI 应用程序本身。也许解释我想要的一个好方法是说 EE 模块可以取代 CI 控制器。所以 it 会加载 CI 库,it 会调用模型、检索数据等。但我认为这可能是一个白日梦。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多