¿Cómo puedo usar un modelo de otro componente en mi componente?

8

Estoy construyendo un componente y necesita acceder a la tabla de contenidos #__. El componente com_content hace todo lo que mi componente necesita hacer en esa tabla. ¿Cómo puedo importar los modelos com_content en los controladores de mi componente?

¿Es una buena práctica utilizar una tabla existente para crear la mía propia? Mi componente mostrará una galería de fotos con comentarios y quiero usar la tabla de contenido #__ para almacenar los comentarios. ¿Debo crear una nueva tabla para los comentarios?

csbenjamin
fuente

Respuestas:

16

Puede importar com_contentmodelos al controlador utilizando el addIncludePath()método:

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

addIncludePath()El método agrega un directorio donde JModelLegacydebe buscar modelos. Puede pasar una cadena o una matriz de directorios como primer parámetro. Como segundo parámetro, puede especificar el prefijo de clase para los modelos (opcional).

Entonces solo usa el getInstance()método:

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

El primer parámetro es el tipo de modelo para instanciar, el segundo es el prefijo para el nombre de clase de modelo (opcional) y el tercer parámetro es la matriz de configuración para el modelo (opcional).

Pero prefiero no usar tablas de componentes principales existentes para componentes personalizados.

Dmitry Rekun
fuente
¡Gracias! Es lo que estaba buscando. Intentaré evitar usar componentes centrales existentes. Creo que tienes razón en eso.
csbenjamin
Okey, ahora ... ¿Cómo puedo usarlo? Por ejemplo, supongamos que tengo la función getMsg, ¿cómo la llamo? $this->msg = $this->get('Msg');
ValRob