Я начинаю разработку как 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();
Давайте разложим это:
В 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
который будет только родительским элементом пути . Поэтому JLoader
просматривает /administrator/helpers/lookups.php
.
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;