2

PHP フレームワーク Agile Toolkit バージョン 4.3.2 (現時点では最新) を使用しています。デフォルトの Page クラスを拡張するページにいます。

次のようなフォーム オブジェクトがあるとします。

$form = $this->add('Form');
$form->addField('text', 'name', 'Name');
$form->addSubmit('Save');

フォーム オブジェクトの HTML を取得するにはどうすればよいですか? フォームの HTML を次のような別のテンプレート パーツに送信したいと考えています。

$this->template->trySetHTML('Content', $form);

$form オブジェクトの代わりに HTML コードを使用すると、上記の関数が機能します。

しかし、この場合、ページを更新すると、フォーム HTML の代わりに次のような文字列が表示されます: Object Form(22f8a7bc__ancedsearch_form)

$form- >render()または$form->getHTML()を試しましたが、これらの関数は機能しません。

教えてください、アジャイルツールキットでオブジェクトをレンダリングするにはどうすればよいですか? オブジェクトの HTML コードを取得する方法を教えてください。

編集

グリッド レイアウトを拡張しています。列ごとに、検索フィルタリング オプションを追加します。Grid_Advanced.php をカスタマイズできるように拡張しました。各列のテーブル ヘッダー (列名) の下に、入力を含むフォームを挿入しています (列名フィールドを送信しています)。

$header_col->trySetHTML('advance_search_filter', $form_html);

$form_html は、atk4/lib/Filter.php を拡張するファイルから返されます (クイックサーチに似ています)。クイックサーチは自動的に html をグリッドに追加しますが、私の場合は、列名の後にテーブルのヘッドに追加する必要があります。そのため、フォームの HTML を取得しようとしています。

このファイルには、次のような init 関数があります。

public function init()
{
        parent::init();
        $this->addClass('grid-extended-search atk-box ui-widget ui-widget-content');
        $this->default_controller = 'Controller_..._MVCForm';
        $this->template->trySet('fieldset', 'atk-row');

        $this->bs = $this->addSubmit('Search');

        $this->save = $this->bs;
}

しかし、これは何も返さないので、テンプレートの HTML を返す関数を作成しました。しかし、フォームは空だったので、フィールドを再作成しました (これは悪いことです):

    $m = $this->view->model
    foreach($this->fields as $f) {
            $field = $this->view->columns[$f];

            if($m->hasField($f)) {
                if($field['type'] == 'text') {
                    $field_html = $this->addField('line', $f, $field['descr']);
                    $form_html .= $field_html->getInput();
                }
                $this->template->setHTML('Content', $form_html);
            }
        }

何か案が?フォームが空なのはなぜですか? addField を使用してフィールドを既存のフィールドに追加しましたが、フィールドはおそらく存在します。既存のフォームの HTML を取得する方法がわかりません。

4

1 に答える 1

2

ほとんどのビューの場合:

$html = $view->getHTML();

ただし、フォームの場合はよりトリッキーになる場合があります。

(編集後)説明したソリューションでは、フォームのすべての機能が実際には必要ないようです

個々のフィールドの HTML を取得するには:

$field->getInput();

これにより、列ヘッダー内に配置できる「入力」要素が得られます。「Form_Plain」を使用して GRID を<form>タグ内にラップすることもできます。

ただし、送信を手動で処理する必要があります。

于 2016-11-24T16:48:35.733 に答える