Wie kann ich ein Modell einer anderen Komponente in meiner Komponente verwenden?

8

Ich baue eine Komponente und sie muss auf die Tabelle #__content zugreifen. Die Komponente com_content erledigt alles, was meine Komponente in dieser Tabelle tun muss. Wie kann ich die Modelle com_content in die Controller meiner Komponente importieren?

Ist es eine gute Praxis, stattdessen eine vorhandene Tabelle zu verwenden, um meine eigene zu erstellen? Meine Komponente zeigt eine Fotogalerie mit Kommentaren an und ich möchte die Tabelle #__content zum Speichern der Kommentare verwenden. Soll ich eine neue Tabelle zu den Kommentaren erstellen?

csbenjamin
quelle

Antworten:

16

Sie können com_contentModelle mit der folgenden addIncludePath()Methode in den Controller importieren :

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

addIncludePath()Methode fügt ein Verzeichnis hinzu, in dem JModelLegacynach Modellen gesucht werden soll. Sie können entweder eine Zeichenfolge oder ein Array von Verzeichnissen als ersten Parameter übergeben. Als zweiten Parameter können Sie das Klassenpräfix für Modelle angeben (optional).

Dann benutze einfach die getInstance()Methode:

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

Der erste Parameter ist der zu instanziierende Modelltyp, der zweite ist das Präfix für den Modellklassennamen (optional) und der dritte Parameter ist das Konfigurationsarray für das Modell (optional).

Ich bevorzuge es jedoch, keine vorhandenen Kernkomponententabellen für benutzerdefinierte Komponenten zu verwenden.

Dmitry Rekun
quelle
Vielen Dank! Es ist das, wonach ich gesucht habe. Ich werde versuchen, vorhandene Kernkomponenten nicht zu verwenden. Ich denke, Sie haben Recht damit.
Csbenjamin
Okey, ich verstehe jetzt ... Wie kann ich es benutzen? Nehmen wir zum Beispiel an, ich habe die Funktion getMsg, wie nenne ich sie?. $this->msg = $this->get('Msg');
ValRob