web-dev-qa-db-ja.com

システムプラグインからモデルメソッドを呼び出す方法は?

'foobar'というモデルを持つコンポーネント( 'com_foo')があります。クラス宣言は次のようになります:

class FooModelbar extends JModelItem

このクラスには、getFooBar()というパブリックメソッドがあります。

また、「foobar」というシステムプラグインもあります。このプラグインからコンポーネントのパブリックメソッドにアクセスしようとしています。

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

しかし、プラグインやコンポーネントにもない「関数xを再宣言できません」などの無関係なエラーが発生します。そして、プラグインをオフにするか、JLoader :: registerのコード行を削除すると、エラーが消えます。明らかに私は何か間違ったことをしているに違いありません。

システムプラグインからコンポーネントのメソッドにアクセスするための「正しい」方法は何ですか?

6
sifu

これは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();
4
Piero Marsilio

Joomla内のどこからでもモデルを呼び出すには、このメソッドを使用できます

//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