Я использовал компонент создателя для создания пользовательского компонента для Joomla 3. У меня есть представление на панели администратора, которое потребовало бы функции из модели в передней части.
В течение нескольких дней я выполнял поиск в Google, пытаясь найти подходящий ответ. Это самый близкий рабочий ответ:
Однако в этом ответе он, похоже, использует модель представления сайта из другого представления сайта.
Вот немного о моей структуре компонентов:
имя: com_stargazer
Admin View: электронная почта
index.php? вариант = com_stargazer&вид = электронная почта&макет = тест
/administrator/components/com_stargazer/views/email/tmpl/test.php
Вид сайта и модель: обратная страница
/components/com_stargazer/models/returnpage.php
/components/com_stargazer/views/returnpage/tmpl/default.php
Я попытался изменить свое представление администратора для включения модели сайта, указав путь:
$this->setModel(getModel(JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_stargazer/models', 'returnpageModel')));
$this->setModel(JModelLegacy::getInstance('returnpage', 'stargazerModel'));
// assigns array from the second model to 'ItemsOtherModel.' there is no '$' sign used.
$this->ItemsOtherModel = $this->get('tags','returnpage');
Тем не менее, getModel не кажется, что он доступен с точки зрения. (Возможно, только контроллер?)
Другие ссылки говорят, чтобы изменить контроллер (Дополнительные ссылки размещены в комментариях):
https://docs.joomla.org/Using_multiple_models_in_an_MVC_component
За последние несколько дней я пробовал различные итерации приведенных выше примеров кода. , , В конечном итоге я запутался, какой контроллер изменить? Нужно ли изменить контроллер администратора, чтобы заставить это работать, или контроллер сайта? Будет ли проще добавить функцию в модель администратора и получить к ней доступ в представлении сайта?
Также было сложно отлаживать, так как я не знаю, какая модель выдает ошибку. Пока что мое лучшее предположение заключается в том, что мне НИКОГДА не повезло, когда я подключался к модели сайта с точки зрения администратора. Любая помощь будет оценена в решении этого вопроса.
Это мой первый вопрос, поэтому я надеюсь, что он достаточно понятен.
Я могу уточнить, если это необходимо.
Заранее спасибо.
Чтобы вызвать внешнюю или внутреннюю модель, вы можете использовать JLoader или даже require_once для включения файла модели.
Используя JLoader, вы можете вызывать модель в админке так:
JLoader::import('joomla.application.component.model'); //Load the Joomla Application Framework
JLoader::import( 'returnpage', JPATH_SITE . '/components/com_stargazer/models' ); //Call the frontend model directory$tags_model = JModelLegacy::getInstance( 'returnpage', 'StargazerModel' );//Instantiate the model$tags = $tags_model->gettags();
И вы также можете использовать require_once
require_once JPATH_COMPONENT_SITE.'/models/returnpage.php';
$tags_model = JModelLegacy::getInstance( 'returnpage', 'StargazerModel' );//Instantiate the model$tags = $tags_model->gettags();
Других решений пока нет …