如何在 Agile Toolkit 中呈现(获取 HTML 的)表单 object?
How do I render (get HTML of) a form object in Agile Toolkit?
我正在使用 PHP 框架 Agile Toolkit 版本 4.3.2(目前最新)。我在扩展默认页面 class.
的页面上
假设我有一个 object 形式,例如:
$form = $this->add('Form');
$form->addField('text', 'name', 'Name');
$form->addSubmit('Save');
如何获得 object 的 HTML 表格?我想将表单的 HTML 发送到另一个模板部分,例如:
$this->template->trySetHTML('Content', $form);
如果我使用 HTML 代码而不是 $form object.
,则上面的函数有效
但在这种情况下,当我刷新页面时,出现的不是 HTML 形式的字符串,如: Object Form(22f8a7bc__ancedsearch_form)
我试过:$form->render() 或 $form->getHTML() 但是这些功能不起作用。
所以请告诉我,如何在敏捷工具包中呈现 object?如何获得 object 的 HTML 代码。
编辑
我正在扩展网格布局。对于每一列,我都添加了一个搜索过滤选项。我已经扩展了 Grid_Advanced.php 以便能够自定义它。在每一列的 table header(列名)下方,我插入了一个带有输入的表单(我正在发送列名字段):
$header_col->trySetHTML('advance_search_filter', $form_html);
$form_html 是从扩展 atk4/lib/Filter.php 的文件中 return 编辑的(类似于快速搜索)。快速搜索会自动将 html 添加到网格中,但在我的例子中,我需要将它添加到 table 的头部,列名之后。这就是为什么我要获取表单的 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;
}
但是这 return 没什么,所以我为 return 模板的 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" 元素,您可以将其放置在列 headers 中。您还可以使用 "Form_Plain" 将 GRID 包装在 <form>
标签内。
不过,您需要手动处理提交。
我正在使用 PHP 框架 Agile Toolkit 版本 4.3.2(目前最新)。我在扩展默认页面 class.
的页面上假设我有一个 object 形式,例如:
$form = $this->add('Form');
$form->addField('text', 'name', 'Name');
$form->addSubmit('Save');
如何获得 object 的 HTML 表格?我想将表单的 HTML 发送到另一个模板部分,例如:
$this->template->trySetHTML('Content', $form);
如果我使用 HTML 代码而不是 $form object.
,则上面的函数有效但在这种情况下,当我刷新页面时,出现的不是 HTML 形式的字符串,如: Object Form(22f8a7bc__ancedsearch_form)
我试过:$form->render() 或 $form->getHTML() 但是这些功能不起作用。
所以请告诉我,如何在敏捷工具包中呈现 object?如何获得 object 的 HTML 代码。
编辑
我正在扩展网格布局。对于每一列,我都添加了一个搜索过滤选项。我已经扩展了 Grid_Advanced.php 以便能够自定义它。在每一列的 table header(列名)下方,我插入了一个带有输入的表单(我正在发送列名字段):
$header_col->trySetHTML('advance_search_filter', $form_html);
$form_html 是从扩展 atk4/lib/Filter.php 的文件中 return 编辑的(类似于快速搜索)。快速搜索会自动将 html 添加到网格中,但在我的例子中,我需要将它添加到 table 的头部,列名之后。这就是为什么我要获取表单的 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;
}
但是这 return 没什么,所以我为 return 模板的 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" 元素,您可以将其放置在列 headers 中。您还可以使用 "Form_Plain" 将 GRID 包装在 <form>
标签内。
不过,您需要手动处理提交。