web-dev-qa-db-ja.com

カスタムコンポーネントの動的ノートフィールドを生成する方法

_com_image_という名前の最初のカスタムコンポーネントを開発しようとしています。プロジェクト要件の構造と機能のため、_com_contact_フォルダーのクローンを作成し、必要なdbテーブル/行を複製するのが最善の方法です。コンポーネントから不要な構造をたくさんコメントアウトしましたが、ここで何かを追加する必要があります。

_administrator/index.php?option=com_image&view=image&layout=edit&id=1_の[画像の編集](最初)タブにblue/info note を生成するにはどうすればよいですか?

私のプロジェクトでは、最初のタブのプライマリパネルには実際にはフィールドがありません。ノートフィールドはlocationの値を保持するだけで十分です。

_<div class="row-fluid">
    <div class="span9">
        <div class="row-fluid form-horizontal-desktop float-cols" >
            <div class="span12">
                <?php echo "Path: <b>" , $this->item->location , "</b><br>"; ?>
                <?php echo "<img src=\"" , $this->item->location , "\">"; ?>
            </div>
        </div>
    </div>
    <div class="span3">
        <?php echo JLayoutHelper::render('joomla.edit.global', $this); ?>
    </div>
</div>
_

$this->form->renderField();を動作させる方法がわかりません。

私は https://docs.joomla.org/Creating_a_custom_form_field_type/en を読みましたが、これは問題の半分しか解決しません。

私の教育では、このコンポーネントを mise en place に注意して提供したいので、ベストプラクティスのみを提案してください。

具体的には:

JFormFieldNoteを拡張できるように、_com_image/models/fields_に新しい.phpファイルを作成しますか?もしそうなら、どうすれば_$this->item->location_値をgetLabel()に渡すことができますか?そして、edit.phpから新しいカスタムノートを呼び出す方法を教えてください。 _com_image/config.xml_を変更したくないですよね?

現在のスクリーンショット:

enter image description here

私の目的にはGDPの答えが正しくないと思います: PHPからフォームのXMLを動的に生成するにはどうすればよいですか?

これはそうではありません: カスタム「動的」フォームフィールドの作成

これはかなり近いと思います: カスタムフィールドの引数を渡す

pS image要素を処理するより良い方法があれば、私もそれを聞いてうれしいです。

4
mickmackusa

Form::setFieldAttribute()を使用します。通常、これはモデルのgetForm()メソッドで行われます。ただし、外観のみの場合は、ビューでも実行できます。

/ administrator/com_image/models/forms/image.xml(_<fieldset>_以外でも問題ありません)の場合:

_<field
    name="myNote"
    type="note"
    class="alert alert-info"
/>
_

/ administrator/com_image/views/image/view.html.php$this->addToolbar();の直前):

_$this->form->setFieldAttribute('myNote', 'label', $this->item->location);
_

/ administrator/com_image/views/image/tmpl/edit.phpで:

_echo $this->form->renderField('myNote');
_

XMLファイルを編集せずにフィールドを作成するには:

_$note = new \SimpleXMLElement('<field />');
$note->addAttribute('name', 'myNote');
$note->addAttribute('type', 'note');
$note->addAttribute('label', $this->item->location);
$note->addAttribute('class', 'alert alert-info');
$this->form->setField($note);
_
4
Sharky