我需要在页面的侧边栏中显示部分展开的表单,以及$content
区域中表单和内容的其余部分。我找不到这样做的好方法。我想让它以某种方式出现,通过“暴露形式”设置制作“块”视图,然后尝试仅通过.tpl文件显示我需要的部分。问题是,当单击提交按钮(提交按钮位于$content
区域)时,侧边栏中的过滤器不会被考虑在内。
答案 0 :(得分:5)
一些横向思考......为什么不探索仅CSS选项呢?您可以将该表单元素与position:absolute
一起播放吗?或者(考虑是右侧边栏)float:right
然后将一些负右边距推到边栏?如果您使用的是960网格系统,请使用pull
和push
类。
答案 1 :(得分:3)
首先我要回答你的问题,然后我会解释你为什么提出错误的问题:
如果您在formapi之外构建表单,那么您可能会有一些运气。这将变得更加丑陋,并且需要您对攻击向量(例如质量分配)采取更多关注。
views_some_view.tpl.php :
<form name="input" action="/link/to/view" method="get">
Country: <input type="text" name="country" />
my_custom_exposed_view.module:hook_block() 市:
这会使一个表单,在大多数情况下将以<form>
开头,有一些输入字段,然后有批次随机HTML,然后一些更多的输入字段,然后关闭。
如您所知,<input type="submit" value="Submit" />
只会发布其所包含的form
标记的所有内容。以下HTML中的提交按钮:
<form name="input_1" action="/link/to/view" method="get">
Country: <input type="text" name="country" />
</form>
<form name="input_2" action="/link/to/view" method="get">
City: <input type="text" name="city" />
<input type="submit" value="Submit" />
</form>
只会发送City
。这些不是您正在寻找的机器人。
它需要是一个大的形式,但由于form
和/form
之间的所有内容都非常动态,并且包含大量HTML,包括潜在的其他形式,这真的不是什么你要。此外:完全独立于内容控制块外观(显示/未示出)。你需要很多坚固的代码来确保阻止a)在起始form
标签不存在时永远不会显示,并且b)当开放form
标签是时,将保证显示阻止当下。否则,您不仅有无效的HTML,而且在大多数情况下会破坏您的页面无法使用的HTML。
您根本不希望块中的部分表单和内容中的其他部分。
但是,您希望可视化,就好像一个部分位于正文中,其余部分位于侧边栏中。
好消息是,HTML表示结构是独立的。这就是您的解决方案所在。
hook_form_alter
来更改现有表单,但您可能只是想自己为整个表单创建HTML。主题图层允许这样做。 添加一些CSS以将侧边栏移动到更低的位置,当该类位于body标记中时,为表单字段留出空间。
<body class="<?php print $splitform ?>">
function my_themename_preprocess_page() {
if ($GET['q'] == 'path/to/view') {
$vars['spliform'] = "splitform"
}
}
答案 2 :(得分:0)
从上面的解释我假设您在块和内容区域中打印相同的表单,并且您在page.tpl中隐藏了表单的某些部分,如果这是真的,那么您可以在自定义模块中使用hook_form_alter()那么
如果您采用其他方式,请提供更多信息。
此致 Chintan。
答案 3 :(得分:0)
如果您使用context之类的内容,则可以让曝光的过滤器块在同一页面中显示两次。然后,您可以使用CSS隐藏您不希望在每种表单中显示的字段。
你遇到的根本问题是,要将两个表单放在不同的位置,它们每个都有自己的表单元素 - 当触发提交时,只发送同一表单元素中的表单字段。您需要将它们移动到一个表单中,或者依赖JavaScript从两个表单中收集字段并构建帖子。
答案 4 :(得分:0)
这里有一个相关的问题: https://drupal.stackexchange.com/questions/3827/multiple-copies-of-views-filter-form-exposed-filters 其中介绍了如何复制过滤器。然而,这似乎是一个丑陋的黑客。
在#6中提到的这个解决方案似乎有点清洁: http://drupal.org/node/641838#comment-3247748 没有测试过,但它看起来不错。
它仍然会给你一些开销(重复的视图),但它可能是使用视图执行此操作的最简单方法。
另一方面,您可能会编写一个模块并构建自己的自定义过滤器块,它会挂钩到您的视图中。这是一篇关于此的博文: http://www.hashbangcode.com/blog/creating-custom-views-filters-exposed-form-element-drupal-6-561.html
答案 5 :(得分:0)
您可以将块创建为空div,并从主页面使用javascript填充辅助过滤器表单以及其中您需要的任何其他内容。同样,您可以使用javascript将表单值从块表单复制到提交时主表单中的隐藏字段。这为您提供了从一个地方(节点输出)所需的所有控制。唯一需要注意的是,它更多地依赖于javascript来加入它们。