Как я могу использовать модель другого компонента в моем компоненте?


8

Я строю компонент, и ему нужен доступ к таблице #__content. Компонент com_content делает все, что нужно моему компоненту в этой таблице. Как я могу импортировать модели com_content в контроллеры в моем компоненте?

Является ли хорошей практикой использование существующей таблицы вместо создания собственной? Мой компонент покажет фотогалерею с комментариями, и я хочу использовать таблицу #__content для хранения комментариев. Должен ли я создать новую таблицу для комментариев?

Ответы:


16

Вы можете импортировать com_contentмодели в контроллер, используя addIncludePath()метод:

JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_content/models', 'ContentModel');

addIncludePath()Метод добавляет каталог, в котором JModelLegacyследует искать модели. Вы можете передать строку или массив каталогов в качестве первого параметра. В качестве второго параметра можно указать префикс класса для моделей (необязательно).

Тогда просто используйте getInstance()метод:

$model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));

Первый параметр - это тип модели для создания экземпляра, второй - префикс для имени класса модели (необязательно), а третий параметр - массив конфигурации для модели (необязательно).

Но я предпочитаю не использовать существующие таблицы основных компонентов для пользовательских компонентов.


Спасибо! Это то, что я искал. Я постараюсь избегать использования существующих основных компонентов. Я думаю, что вы правы в этом.
csbenjamin

Хорошо, я понимаю, теперь ... Как я могу использовать это. Например, предположим, что у меня есть функция getMsg, как я могу ее вызвать? $this->msg = $this->get('Msg');
ValRob
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.