Como posso usar um modelo de outro componente no meu componente?

8

Estou construindo um componente e ele precisa acessar a tabela #__content. O componente com_content faz tudo o que meu componente precisa fazer nessa tabela. Como posso importar os modelos com_content para os controladores do meu componente?

É uma boa prática usar uma tabela existente para criar a minha? Meu componente mostrará uma galeria de fotos com comentários e desejo usar a tabela #__content para armazenar os comentários. Devo criar uma nova tabela para os comentários?

csbenjamin
fonte

Respostas:

16

Você pode importar com_contentmodelos para o controlador usando o addIncludePath()método:

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

addIncludePath()O método adiciona um diretório onde JModelLegacydeve procurar modelos. Você pode passar uma string ou uma matriz de diretórios como o primeiro parâmetro. Como segundo parâmetro, você pode especificar o prefixo da classe para os modelos (opcional).

Então basta usar o getInstance()método:

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

O primeiro parâmetro é o tipo de modelo a ser instanciado, o segundo é o prefixo do nome da classe do modelo (opcional) e o terceiro parâmetro é a matriz de configuração do modelo (opcional).

Mas eu prefiro não usar as tabelas de componentes principais existentes para componentes personalizados.

Dmitry Rekun
fonte
Obrigado! É o que eu estava procurando. Vou tentar evitar usar componentes principais existentes. Eu acho que você está certo sobre isso.
csbenjamin
Okey, agora ... Como posso usá-lo. Por exemplo, vamos assumir que eu tenho a função getMsg, como eu a chamo? $this->msg = $this->get('Msg');
ValRob 02/11