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

8

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

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

csbenjamin
источник

Ответы:

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