Comment puis-je utiliser un modèle d'un autre composant dans mon composant?


8

Je construis un composant et il a besoin d'accéder à la table #__content. Le composant com_content fait tout ce que mon composant doit faire dans cette table. Comment puis-je importer les modèles com_content dans les contrôleurs de mon composant?

Est-ce une bonne pratique d'utiliser une table existante à la place pour créer la mienne? Mon composant va afficher une galerie de photos avec des commentaires et je veux utiliser la table #__content pour stocker les commentaires. Dois-je créer un nouveau tableau pour les commentaires?

Réponses:


16

Vous pouvez importer des com_contentmodèles dans le contrôleur en utilisant la addIncludePath()méthode:

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

addIncludePath() ajoute un répertoire où JModelLegacy doit rechercher les modèles. Vous pouvez soit passer une chaîne ou un tableau de répertoires comme premier paramètre. En tant que deuxième paramètre, vous pouvez spécifier le préfixe de classe pour les modèles (facultatif).

Ensuite, utilisez simplement la getInstance()méthode:

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

Le premier paramètre est le type de modèle à instancier, le second est le préfixe du nom de classe de modèle (facultatif) et le troisième paramètre est le tableau de configuration du modèle (facultatif).

Mais je préfère ne pas utiliser les tableaux de composants principaux existants pour les composants personnalisés.


Merci! C'est ce que je cherchais. J'essaierai d'éviter d'utiliser les composants principaux existants. Je pense que vous avez raison à ce sujet.
csbenjamin

Okey je reçois, maintenant ... Comment puis-je l'utiliser. Par exemple, supposons que j'ai la fonction getMsg, comment l'appeler?. $this->msg = $this->get('Msg');
ValRob
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.