Как визуализировать (получить 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(), но эти функции не работают.

Итак, скажите мне, как мне отрендерить объект в agile toolkit? Как я могу получить HTML-код объекта.

Изменить

Я расширяю макет сетки. Для каждого столбца я добавляю опцию фильтрации поиска. Я расширил Grid_Advanced.php, чтобы иметь возможность его настраивать. В каждом столбце ниже заголовка таблицы (имя столбца) я вставляю форму с вводом (отправляю поле имени столбца):

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

$form_html возвращается из файла, который расширяет atk4/lib/Filter.php (это похоже на quicksearch). Быстрый поиск автоматически добавляет html в сетку, но в моем случае мне нужно, чтобы он был добавлен в заголовок таблицы после имени столбца. Вот почему я пытаюсь получить HTML-код формы.

В этом файле у меня есть функция инициализации, которая выглядит примерно так:

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-код существующей формы.


person Pascut    schedule 24.11.2016    source источник


Ответы (1)


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

$html = $view->getHTML();

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

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

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

$field->getInput();

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

Однако вам нужно будет обрабатывать отправку вручную.

person romaninsh    schedule 24.11.2016
comment
$form-›getHTML(); возвращает эти пустые теги html: ‹html› ‹head› ‹/head› ‹body› ‹/body› ‹/html› - person Pascut; 25.11.2016
comment
Я отредактировал свой исходный вопрос, см. подробности ниже РЕДАКТИРОВАТЬ. - person Pascut; 25.11.2016
comment
Просматривая свой код — почему бы просто не добавить поле в заголовки вашей сетки? У поля есть метод getInput(), который вы можете использовать, чтобы вставить его в заголовок столбца. Вы можете вручную обернуть Grid внутри Form_Plain и отправить его с помощью GET и т. д. - person romaninsh; 29.11.2016
comment
Я нашел решение, которое вы также предложили, и оно сработало. Я добавил поле и смог получить HTML с помощью метода getInput. Я награжу вас наградой, ваше решение работает для меня, и я надеюсь, что оно также поможет другим в будущем. P.S. - контактная форма со страницы agiletoolkit.org/contact не работает (есть ошибка SMTP - Ошибка приложения: ошибка SMTP: не удалось аутентифицировать) :) - person Pascut; 29.11.2016
comment
@Pascut, спасибо. В настоящее время я работаю над улучшением Agile-фреймворка и превращением его в инструментарий пользовательского интерфейса следующего поколения. Возможно, вы хотели бы помочь с некоторыми предложениями. Скажи привет в Gitter, если интересно. Спасибо за награду, я обновлю свой ответ. - person romaninsh; 29.11.2016
comment
Мне очень интересно, чтобы ваша сетка с поиском по столбцам была расширенным дополнением в ATK5 (возможно, как платное расширение). - person romaninsh; 29.11.2016
comment
звучит интересно, я сделаю это бесплатно, это еще не закончено, но после того, как это будет сделано, я создам аддон и поделюсь им с вами - person Pascut; 29.11.2016