web-dev-qa-db-ja.com

プラグインによるコアコンポーネントレイアウトのオーバーライド

プラグイン内で、管理のcom_menus&view = menusビューに列を追加してデータを追加する必要があります(データは私のプラグイン内で利用可能です)。

enter image description here

my_plugin.php

...
public function onAfterInitialise()
{
    $input = JFactory::getApplication()->input;
    if (JFactory::getApplication()->isAdmin()
        && $input->getCmd('option') == 'com_menus'
        && $input->getCmd('view') == 'menus')
    {
        JRequest::setVar('view', 'menusextra');
        JLoader::register('MenusViewMenusextra', __DIR__ . '/views/menus/view.html.php');
    }
}
...

view.html.php

...
JLoader::register('MenusViewMenus', JPATH_ADMINISTRATOR . '/components/com_menus/views/menus/view.html.php');
JLoader::register('MenusModelMenus', JPATH_ADMINISTRATOR . '/components/com_menus/models/menus.php');

class MenusViewMenusextra extends MenusViewMenus
{
    public function display($tpl = null)
    {
        $this->items         = $this->get('Items');
        $this->pagination    = $this->get('Pagination');
        $this->state         = $this->get('State');
        $this->filterForm    = $this->get('FilterForm');
        $this->activeFilters = $this->get('ActiveFilters');
        $this->canDo         = JHelperContent::getActions('com_menus');
        $this->db            = JFactory::getDbo();

        $this->addTemplatePath(__DIR__ . '/tmpl/');
        parent::display($tpl);
    }
}

class MenusModelMenusextra extends MenusModelMenus {}
...

現在、エラー "JForm :: getInstance could not load file"が発生しています。 filter_menusextra.xml、元の(コア)filter_menus.xmlをロードできないため、これが原因であると考えてください\ administrator\components\com_menus\models\forms。それはJLayout検索ツールを使用していて、xmlファイルをロードする必要があるためですか?

次のテストを行いました:filter_menus.xmlfilter_menusextra.xml\ administrator\components\com_menus\models\formsに変更して動作しました。しかし、それをオーバーライドしているので、コアプラグインではなく、プラグイン内で作成できるはずです。何が悪いのですか?

誰かがこれについて喜んで助けてくれますか?ありがとうございました。

4
n.h.

短い答え

できません。システム出力の処理(アプリケーション出力バッファーまたはJavaスクリプト))またはシステムファイルの変更のみを試行できます。

長い答え

メニューコンポーネントはカスタムプラグインイベントをサポートする必要がありますが、サポートしていません。システムファイルの変更は非常に悪い考えであり、回避することをお勧めします。アプリケーションの出力バッファーを変更するシステムプラグインを作成しようとすることもできますが、コードの変更に対して脆弱です。 JavaScript/jQueryでそれを行うことは、より防弾対策になるでしょう。そうすれば、コードの小さな変更がプラグインの機能に影響を与えることはありません。もちろん、それには欠点もあります。この列をソート可能にしたり、その内容を検索したりすることはできません。

1
Artur Stępień

別のフィルターフォームを読み込むには、$filterFormNameモデルのプロパティ:

class MenusModelMenusextra extends MenusModelMenus
{
    public function __construct($config = array())
    {
        $this->filterFormName = 'filter_menus';

        parent::__construct($config);
    }
}
1
Sharky