'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のコード行を削除すると、エラーが消えます。明らかに私は何か間違ったことをしているに違いありません。
システムプラグインからコンポーネントのメソッドにアクセスするための「正しい」方法は何ですか?
これは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();
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();