J'ai un composant ('com_foo') qui a un modèle appelé 'foobar'. La déclaration de classe est comme ceci:
class FooModelbar extends JModelItem
Cette classe a une méthode publique appelée getFooBar ().
J'ai aussi un plugin système appelé 'foobar'. J'essaie d'accéder à la méthode publique du composant à partir de ce plugin.
JLoader::register('FooModelBar', JPATH_SITE . '/components/com_foo/models/bar.php');
$foobarInstance = new FooModelBar();
$baz = $foobarInstance->getFoobar();
Mais je reçois des erreurs sans rapport, comme "Impossible de redéclarer la fonction x", qui ne figurent même pas dans le plug-in ou le composant. Et si j'éteins le plugin ou supprime la ligne de code JLoader :: register, l'erreur disparaît. Si clairement que je dois faire quelque chose de mal.
Quelle est la manière "correcte" d'accéder à la méthode d'un composant à partir d'un plugin système?
Cela fonctionnera facilement dans Joomla 3.x
//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();
Pour appeler un modèle de n'importe où dans Joomla, vous pouvez utiliser cette méthode.
//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();