1

案例:在另一个表单中插入/嵌入表单,同时保持<form>嵌入输出中的原始标记。在这种情况下,它是一个 Views Bulk Operations 表单,其中包含嵌入在节点编辑表单中的公开表单过滤器。

问题:嵌入时,表面上的一切看起来都很好,视图显示表单及其所有元素。但是,当检查 Views Exposed Form 呈现的输出时,Exposed Filter 被剥离了它的<form>标记。但是,当我在与节点编辑表单相同的页面上以标准方式将块添加到区域时,Views Exposed Form 输出包含<form>标记并且过滤器工作正常。

注意:VBO 表单的视图内容不受影响,其<form>标记在节点编辑表单中保持不变。只有同一视图显示中的 Exposed Form Filter 会被剥离<form>。此外,在视图显示中使用分页器并将 Use Ajax 设置为 Yes,如果我单击视图结果的下一页,Ajax 刷新的表单将包含<form>Views Exposed Form 的正确标记,并且过滤器从那时起开始工作。

我尝试过的事情

  • 将公开的表单设置为出现在一个块中,然后使用 module_invoke('views', 'block', 'view', '-exp-instructor_select-page_1') 单独嵌入公开的表单块。

  • 使用 views_embed_view('VIEW-NAME', 'VIEW-DISPLAY') 嵌入视图 - VIEW-DISPLAY 是“默认”、“page_1”还是“block_1”——同样的问题。

  • 使用 module_invoke('views', 'block', 'view', 'VIEWS-DISPLAY-block_1') 嵌入视图块显示;

  • 使用 drupal_build_form($form_id, &$form_state) 直接插入表单(视图替换 drupal_get_form)

经测试

  • 使用 hook_form_alter

  • theme_preprocess_NODETYPE_node_form($vars)

  • 在自定义视图公开的过滤器模板中对标记进行硬编码:

  • <form id="views-exposed-form-VIEWS-DISPLAY" method="get" accept-charset="UTF-8" action="/URL" class="views-processed"> 查看暴露的表单模板代码 <input type="hidden" value="instructor_select" name="view_name"><input type="hidden" value="block_1" name="view_display_id"><input type="hidden" value="" name="view_args"><input type="hidden" value="user/1/edit/studio" name="view_path"><input type="hidden" value="URL-PATH" name="view_base_path"><input type="hidden" value="VIEWS-DISPLAY" name="view_dom_id"><input type="hidden" value="0" name="pager_element"></form>

我确定我错过了一些我尝试解决的其他方法,但这应该足以作为尝试的示例。

无论表单如何嵌入到节点编辑表单中,视图暴露过滤器都不起作用,因为<form>缺少元素,但是 AJAX 可以与 VBO 表单的其余部分一起使用,并且在使用分页器和 AJAX 刷新视图表单显示时,Exposed Form Filter 标记被正确呈现并且过滤器工作。

在这一点上,我没有想法。我真的很感激一些关于如何尝试的指针或代码示例。

提前致谢。

4

1 回答 1

0

我想做同样的事情,像你一样挣扎。我终于找到了适合我的东西。上下文:Drupal 6,将带有暴露过滤器的 ajax 视图放在节点编辑表单上。

我在视图上创建了一个显示“块”并简单地通过块管理 UI 将其插入......事实证明它工作正常。

于 2013-04-08T20:37:59.550 回答