it-swarm.com.de

Wie rufe ich eine Modellmethode von einem System-Plugin aus auf?

Ich habe eine Komponente ('com_foo'), die ein Modell namens 'foobar' hat. Die Klassendeklaration sieht folgendermaßen aus:

class FooModelbar extends JModelItem

Diese Klasse hat eine öffentliche Methode namens getFooBar ().

Ich habe auch ein System-Plugin namens 'foobar'. Ich versuche über dieses Plugin auf die öffentliche Methode der Komponente zuzugreifen.

JLoader::register('FooModelBar', JPATH_SITE . '/components/com_foo/models/bar.php');
$foobarInstance = new FooModelBar();
$baz = $foobarInstance->getFoobar();

Ich erhalte jedoch einige Fehler, die nichts damit zu tun haben, wie z. B. "Funktion x kann nicht neu deklariert werden", die sich nicht einmal im Plugin oder in der Komponente befinden. Und wenn ich das Plugin ausschalte oder die Codezeile von JLoader :: register entferne, verschwindet der Fehler. Ich muss also offensichtlich etwas falsch machen.

Wie kann man mit einem System-Plugin auf die Methode einer Komponente 'richtig' zugreifen?

6
sifu

Dies wird in Joomla 3.x problemlos funktionieren

//load model
JModelLegacy::addIncludePath(JPATH_SITE . DIRECTORY_SEPARATOR . 'components' . DIRECTORY_SEPARATOR . 'com_foo' . DIRECTORY_SEPARATOR . 'models');

//get instance of model class, where class name will be fooModelBar
$model = JModelLegacy::getInstance('bar', 'fooModel');

//call model method
$baz = $model->getFoobar();
4
Piero Marsilio

Mit dieser Methode können Sie ein Modell von überall in Joomla aufrufen

//Load the Joomla Model framework
jimport('joomla.application.component.model');

//Load com_foo's foobar model. Remember the file name should be foobar.php inside the models folder
JModelLegacy::addIncludePath(JPATH_SITE.'/components/com_foo/models', 'FooModelBar');

//Get Instance of Model Object
$foobarInstance = JModelLegacy::getInstance('foobar', 'FooModelBar');

//Now you can call the methods inside the model
$baz = $foobarInstance->getFoobar();
4
Amit Ray