Как отобразить (получить HTML) объект формы в Agile Toolkit?

Я использую 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);

Функция сверху работает, если я использую HTML-код вместо объекта $form.

Но в этом случае, когда я обновляю страницу, вместо формы 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 (это похоже на quicksearch). Быстрый поиск автоматически добавляет 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-код существующей формы.

1 ответ

Решение

Для большинства просмотров:

$html = $view->getHTML();

Однако это может быть более сложным для формы.

В решении, которое вы описали (после редактирования), кажется, что вам не нужны все функции формы

Чтобы получить HTML отдельного поля:

$field->getInput();

Это даст вам элемент "input", который вы можете поместить в заголовки вашего столбца. Вы также можете использовать "Form_Plain", чтобы обернуть вашу GRID внутри <form> тег.

Вы должны были бы обработать представление вручную, все же.

Другие вопросы по тегам