如何在Agile Toolkit中呈现(获取HTML)表单对象?

时间:2016-11-24 14:56:02

标签: php atk4 agiletoolkit

我正在使用PHP框架Agile Toolkit版本4.3.2(此时最新)。我在一个扩展默认Page类的页面上。

假设我有一个表单对象,如:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View x =  inflater.inflate(R.layout.tab_layout,null);
        tabLayout = (TabLayout) x.findViewById(R.id.tabs);
        viewPager = (ViewPager) x.findViewById(R.id.viewpager);

        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
        tabLayout.setupWithViewPager(viewPager);

        // Find out which day is today
        int dayIndex = getCurrentDayIndex();

        // Select the corresponding tab
        TabLayout.Tab tab = tabLayout.getTabAt(dayIndex);
        tab.select();

        return x;

    }

如何获取表单对象的HTML?我想将表单的HTML发送到另一个模板部分,例如:

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

如果我使用HTML代码而不是$ form对象,则上面的函数可以工作。

但在这种情况下,当我刷新页面时,而不是表单HTML会出现如下字符串:对象表单(22f8a7bc__ancedsearch_form)

我尝试过: $ form-> render() $ form-> getHTML(),但这些功能不起作用。

那么请告诉我,如何在敏捷工具包中渲染对象?如何获取对象的HTML代码。

修改

我正在扩展网格布局。对于每列,我添加了一个搜索过滤选项。我已经扩展了Grid_Advanced.php以便能够自定义它。在每个列上,在表头(列名称)下面,我正在插入一个带有输入的表单(我正在发送列名字段):

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

$ form_html是从扩展atk4 / lib / Filter.php的文件返回的(它类似于quicksearch)。 quicksearch自动将html添加到网格中,但在我的情况下,我需要将它添加到表的头部,在列名后面。这就是我试图获取表单HTML的原因。

在这个文件中,我有一个类似于:

的init函数
$header_col->trySetHTML('advance_search_filter', $form_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;
}

有什么想法吗?为什么表格是空的?我使用addField将字​​段添加到现有字段,但字段可能存在。我不知道如何获取它们,以获取现有表单的HTML。

1 个答案:

答案 0 :(得分:2)

对于大多数观点:

$html = $view->getHTML();

然而,表格可能会更棘手。

在您所描述的解决方案中(编辑后),您似乎并不真正需要表单的所有功能

获取单个字段的HTML:

$field->getInput();

这将为您提供可以放置在列标题中的“input”元素。您还可以使用“Form_Plain”将GRID包装在<form>标记内。

但您需要手动处理提交。