web-dev-qa-db-ja.com

すべての拡張機能でカスタムフォームフィールドタイプを使用できますか?

私はカスタムフォームフィールドタイプを作成しています。それらをJoomlaのすべてのフォームでグローバルに使用できるようにしたいと考えています。

libraries/joomla/form/fields以外に、この目的で使用できる特定の場所はありますか?一般に、カスタムファイルをそこに追加することは悪い習慣と考えられていますか?

カスタムフィールドのすべてのXMLに手動でパスを追加できると思いますが、上記のように単に"global scope"にフィールドを追加できれば、とても便利に思えます。

2
FFrewin

プラグインを作成し、onContentPrepareForm()を使用して、可能なすべてのフォームに新しいフィールドを追加できます。

public function onContentPrepareForm($form, $data)
{
    // You can add some filtering here and add fields only to selected components
    if ($form->getName() != 'com_content.article')
    {
        return true;
    }

    // Ensure you're dealing with Form
    if (!($form instanceof JForm))
    {
        $this->_subject->setError('JERROR_NOT_A_FORM');

        return false;
    }

    // If everything is ok - load form file
    JForm::addFormPath(dirname(__FILE__) . '/myform');
    $form->loadFile('myform', false);

    return true;
}

この方法で追加されたフィールドのデータは、「attribs」列に格納されます。唯一の欠点は、コンポーネントがonContentPrepareFormイベントをサポートする必要があることです。 onContentDeforeSave()およびonContentAfterSave()関数を使用して、カスタムデータ処理を追加することもできます。

1
Krossfire