Joomla: вызов вспомогательной функции изнутри модели?

Я начинаю разработку как php, так и Joomla, и мне трудно работать в Joomla, чтобы сделать довольно простые вещи. Прошел через пример Joomla MVC и Lynda (и до сих пор создал несколько простых представлений).

У меня есть вспомогательный файл / класс / функция, который выводит все пользовательские идентификаторы, которые существуют в «завершенной» таблице, поэтому я могу отобразить ссылку для новой записи на основе этого пользователя или отредактировать запись существующего пользователя.

Я уже использовал другую функцию в этом вспомогательном файле успешно в другой части компонента ( Joomla: Write и вызов вспомогательной функции в компоненте ).

Когда я делаю то же самое в модели, я получаю следующее: «Неустранимая ошибка: вызов защищенного метода JModel :: _ createFileName () из контекста« JView »в C: \ wamp \ www \ ilplocal \ libraries \ joomla \ application \ component \ view.php в строке 773 ". Когда я пытаюсь это сделать в представлении, отлично работает, но мне нужен вывод в модели.

Код:

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'); ошибку: $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(); 

который вызывает эту ошибку: «Неустранимая ошибка: класс« LookupHelper »не найден в C: \ wamp \ path \ to \ model \ not \ to \ lookups.php. Пробовал манипулировать JLoader :: register (все здесь), и он не" t влияет на путь сообщения об ошибке.

Мысли? Почему это работает в представлении, а не в модели? Как использовать вспомогательные функции внутри модели?

Благодаря!

#####РЕДАКТИРОВАТЬ

Благодаря @cppl выглядит так, как это проблема со вторым битом кода. Также я прочитал, что .DS. нотация будет прекращена в будущих версиях – так что код, который работает:

 JLoader::register('LookupHelper', JPATH_COMPONENT_ADMINISTRATOR.'/helpers/lookups.php'); $completions_exist = LookupHelper::completions_exist(); 

Давайте разложим это:

  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 инициализируется как часть вызова renderComponent() Joomla! В его классе JComponentHelper если вы применяете к нему имя dirname когда оно не настроено, вы renderComponent() точку (то есть текущую директорию), поэтому в модели, которую вы могли бы передать ./helpers/lookups.php на вызов JLoader .

Вы можете вызвать помощника в модели следующим способом:

JLoader::import('helpers.events', JPATH_COMPONENT);

это будет включать файловые помощники / events.php из каталога компонентов.

$_helper = new EventsHelper(); echo $_helper->getAnyInsideMethod();exit;