我开始使用php和Joomla开发,并发现在Joomla中工作很难做一些相当简单的事情。通过Joomla MVC示例和Lynda(到目前为止已经构建了一些简单的视图)。
我有一个帮助文件/类/函数,它输出“已完成”表中存在的所有用户ID,这样我就可以显示基于该用户的新记录的链接或编辑现有用户的记录。
我已经在该帮助文件中成功地在组件的不同部分使用了不同的函数(Joomla: Write and call a helper function in a component)。
当我在模型中做同样的事情时,我得到这个:“致命错误:从C:\ wamp \ www \ ilplocal \ libraries \中的上下文'JView'调用受保护的方法JModel :: _ createFileName()第773行的joomla \ application \ 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;
}
}
在模型中:
$completions_exist = Jview::loadHelper('lookups');
$completions_exist = LookupHelper::completions_exist();
此行引发错误:$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();
抛出此错误的:“致命错误:在C:\ wamp \ path \ to \ model \ not \ to \ lookups.php中找不到类'LookupHelper'。尝试操作JLoader :: register(这里的所有内容)和它不会影响错误消息的路径。
思考?为什么它在视图中工作而不在模型中?如何在模型中使用辅助函数?
谢谢!
#####编辑感谢@cppl看起来像是第二位代码的路径问题。我也读到了.DS。在将来的版本中将逐步取消符号 - 所以正在运行的代码是:
JLoader::register('LookupHelper', JPATH_COMPONENT_ADMINISTRATOR.'/helpers/lookups.php');
$completions_exist = LookupHelper::completions_exist();
答案 0 :(得分:4)
让我们打破这个:
在Joomla!你的组件助手文件应该在`/mycomponent/helpers/lookup.php'中
JLoader::
是Joomla!这样做的方法,但你可以很容易地使用PHP的require_once
,例如。 require_once JPATH_COMPONENT_ADMINISTRATOR.'/helpers/myfunctions.php';
你的路径是对的吗? - 您提供的是dirname(JPATH_COMPONENT_ADMINISTRATOR).DS.'helpers'.DS.'lookups.php'
,但您已在dirname
which will the parent element of the path only中将路径包装到您的组件中。因此JLoader
正在查看/administrator/helpers/lookups.php
。
JPATH_COMPONENT_ADMINISTRATOR
在Joomla!renderComponent()
课程中被JComponentHelper
调用,如果你在dirname
课程中设置了./helpers/lookups.php
,那么它就会被设置为你JLoader
得到一个点(即当前目录),所以在模型中你可以将{{1}}传递给{{1}}电话。
答案 1 :(得分:0)
您可以通过以下方法在模型中调用帮助程序:
JLoader::import('helpers.events', JPATH_COMPONENT);
这将包括组件目录中的文件helpers / events.php。
$_helper = new EventsHelper();
echo $_helper->getAnyInsideMethod();exit;