Я использую 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 появляется строка вроде: Форма объекта (22f8a7bc__ancedsearch_form)
Я старался: $ Форма-> Render () или же $ Форма-> 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-код существующей формы.
Для большинства просмотров:
$html = $view->getHTML();
Однако это может быть более сложным для формы.
В решении, которое вы описали (после редактирования), кажется, что вам не нужны все функции формы
Чтобы получить HTML отдельного поля:
$field->getInput();
Это даст вам элемент «input», который вы можете поместить в заголовки вашего столбца. Вы также можете использовать «Form_Plain», чтобы обернуть вашу GRID внутри <form>
тег.
Вы должны были бы обработать представление вручную, все же.
Других решений пока нет …