0

私のコンポーネントでは、カスタム フィールド タイプを持つ管理フォームが必要です。このカスタム フィールドは、実際には別の xml フォーム定義ファイルを読み込み、そこで定義されたこれらのフィールドをレンダリングします。カスタム フィールド クラスでは、次のようになります。

<?php

class CustomField extends JFormField
{
    protected function getInput()
    {
        $form = JForm::getInstance("another_form", "path/to/xml");
        $field_names = array_keys($form->getFieldset());

        $html = "";
        foreach ($field_names as $name) {
            $field = $form->getField($name);
            $html .= "<li>" . $field->getLabel() . $field->getInput() . "</li>";
        }

        return $html;
    }

}

それはうまくレンダリングされますが、これらの追加フィールドを管理フォームとスムーズに統合するにはどうすればよいですか?

  • 送信後、追加のフィールドには、残りのフィールドと同様に最後の入力データが自動的に入力されます (セッション統合)
  • 可能であれば、追加のフィールドは管理フォームの一部と見なされ、すべての保存および読み込み機能が含まれます (データベース テーブルにこれらのフィールドに対応する列があると仮定します)。

ありがとう!

4

1 に答える 1

2

まず、外部ファイルを完全に使用することを避け、構成の標準要素を定義することをお勧めします。

ただし、続行したい場合:

カスタム要素を作成すると、name プロパティを使用して値が読み書きされます。

protected function getInput() {
    return "<input type='hidden' name='$this->name' />";
}

したがって、Joomla に値の保存を処理させたい場合は、上記のような入力 (非表示) を追加して、すべてのカスタム入力値を保持する必要があります。カスタム要素に 2 つのスクリプトをバインドすることで、これを実現できます。カスタム入力フィールドからのすべての値を json 文字列にパックし、隠しフィールドの値をこの json 文字列に設定します (\n! を削除します)。もう 1 つは onload が値を復元します。XML構造を追加/変更しても構成が存続するように、jsonでフィールド名を使用してください。

ただし、コンポーネントのパラメーターは既に json 形式であるため、これは見苦しい結果をもたらします。json 内に json を使用してコンポーネントを構成することになります。醜いですが、あまり多くの問題を引き起こすべきではありません。

于 2013-02-06T22:00:01.390 に答える