Joomla:从模型中调用辅助函数?

Gis*_*sto 5 php mysql joomla joomla1.6 joomla2.5

我开始使用php和Joomla开发,并发现在Joomla中工作很难做一些相当简单的事情.通过Joomla MVC示例和Lynda(到目前为止已经构建了一些简单的视图).

我有一个帮助文件/类/函数,它输出"已完成"表中存在的所有用户ID,因此我可以显示基于该用户的新记录的链接或编辑现有用户的记录.

我已经在该帮助文件中成功地在组件的不同部分使用了不同的函数(Joomla:在组件中编写和调用辅助函数).

当我做同样的事情在模型中,我得到这样的:"致命错误:调用保护方法JModel :: _ createFileName()根据上下文'JView中’在C:\ WAMP\WWW\ilplocal \图书馆\的Joomla \应用第773行上的\ component\view.php".当我在视图中尝试它,工作正常 - 但我需要模型中的输出.

码:

lookups.php

abstract class LookupHelper {

    public function other_functions($vars){
        ...
    }

    public function completions_exist() {

        $db =& JFactory::getDBO();            
        $query = $db->getQuery(true);

        $query->SELECT(' #__completed.completed_userid as UserID');
        $query->FROM (' #__completed');
        $query->GROUPBY (' #__completed.completed_userid ');

       $db->setQuery($query);    
       $result = $db->loadResultArray(0); 

       return $result;                        

    }        
}
Run Code Online (Sandbox Code Playgroud)

在模型中:

$completions_exist = Jview::loadHelper('lookups'); 
$completions_exist = LookupHelper::completions_exist();
Run Code Online (Sandbox Code Playgroud)

这一行抛出错误: $completions_exist = Jview::loadHelper('lookups');

我发现了一些非常模糊的引用,称为JLoader :: register以引入辅助函数,但在Joomla中找不到任何好的文档,除了每个人都说要使用它.所以我试着这样使用它:

 JLoader::register('LookupHelper', dirname( JPATH_COMPONENT_ADMINISTRATOR).DS.'helpers'.DS.'lookups.php');
 $completions_exist = LookupHelper::completions_exist();
Run Code Online (Sandbox Code Playgroud)

它抛出这个错误:"致命错误:类'LookupHelper’用C未找到:\ WAMP \路径\为\型号\不是\到\ lookups.php试图操纵JLoader ::注册(这里的一切),并没有关系". t影响错误消息的路径.

思考?为什么它在视图中工作而不在模型中?如何在模型中使用辅助函数?

谢谢!

#####编辑

感谢@cppl看起来像第二位代码的路径问题.我也读到了.DS.在将来的版本中将逐步删除表示法 - 所以正在运行的代码是:

JLoader::register('LookupHelper', JPATH_COMPONENT_ADMINISTRATOR.'/helpers/lookups.php');
$completions_exist = LookupHelper::completions_exist();
Run Code Online (Sandbox Code Playgroud)

Cra*_*aig 4

让我们分解一下:

  1. 在 Joomla! 您的组件帮助程序文件应该位于“/mycomponent/helpers/lookup.php”中

  2. JLoader::是 Joomla!方法来做到这一点,但你也可以轻松地使用 PHP,require_once例如。require_once JPATH_COMPONENT_ADMINISTRATOR.'/helpers/myfunctions.php';

  3. 你的路对吗?- 您正在提供,dirname(JPATH_COMPONENT_ADMINISTRATOR).DS.'helpers'.DS.'lookups.php'但您已经包装了组件的路径,其中dirname仅包含路径的父元素JLoader寻找也是如此/administrator/helpers/lookups.php

  4. JPATH_COMPONENT_ADMINISTRATOR被初始化为 Joomla!renderComponent()在其JComponentHelper类中调用的一部分,如果您dirname在未设置时应用它,您将得到一个点(即当前目录),因此在模型中您可以传递给./helpers/lookups.php调用JLoader