forms - 为什么 '#weight' 属性有时在 Drupal 表单中没有任何影响?

标签 forms drupal

我正在尝试为自定义类型创建节点表单。我启用了有机组和分类法,但希望它们的元素以非标准顺序出现。所以我实现了hook_form_alter并设置 #weight og_nodeapi 的属性(property)子数组到-1000,但它仍然在分类和菜单之后。我什至尝试将子数组更改为字段集(以强制它实际呈现),但没有骰子。我也试过设置

$form['taxonomy']['#weight'] = 1000 

(我有两个词汇,所以它已经被渲染为一个字段集)但这也不起作用。

我将模块的权重设置得很高,并在系统表中确认它确实是站点上最高的模块 - 所以我完全没有想法。有什么建议么?

更新:

虽然我不完全确定如何,但我确实设法让分类字段集低于其他所有内容,但现在我有一个相关问题,希望更易于理解。在分类字段集中,我有两个项目(一个标签和一个多选),我想在 hook_form_alter 中添加一些指令,如下所示:
$form['taxonomy']['instructions'] = array(
  '#value' => "These are the instructions",
  '#weight' => -1,
);

您猜对了,它出现在分类模块插入的术语之后。但是,如果我将其更改为字段集:
$form['taxonomy']['instructions'] = array(
  '#type' => 'fieldset', // <-- here
  '#title' => 'Instructions',  // <-- and here for good measure
  '#value' => "These are the instructions",
  '#weight' => -1,
);

然后它就像我想要的那样神奇地漂浮到顶部。我还尝试了 textarea (这也有效)并明确表示标记(这没有)。

所以基本上,将类型从“标记”(默认 IIRC)更改为“字段集”具有不再忽略其权重的效果。

最佳答案

这听起来很奇怪,因为对表单元素的操作 #weight正如宣传的那样,参数对我来说总是可靠的。不过要注意的一点是,权重仅影响相对于元素兄弟的顺序,因此如果您要移动的元素低于其他元素的级别,则必须更改权重与要移动的元素处于同一级别的父元素。

澄清一下,如果你有这样的层次结构,

$element['foo'];
$element['bar'];
$element['bar']['baz']

您不能通过设置“baz”的权重来相对于“foo”移动“baz”。您必须在“bar”上设置权重(也可以移动它),或者拉出“baz”并将其置于与“foo”相同的水平。

另一个可能的原因可能是 CCK : 如果你安装了 CCK,它允许你设置它自己的顺序以及 admin/content/node-type/<yourNodeType>/fields 下的其他字段。 .它通过注册预渲染回调 content_alter_extra_weights() 来更改顺序,所以这将在您更改 hook_form_alter 之后运行.

编辑:更新以回答问题更新

标记字段类型在字段集中使用时具有特殊的行为,这在 forms api documentation 中有所暗示。 :

Note: if you use markup, if your content is not wrapped in tags (generally <p> or <div>), your content will fall outside of collapsed fieldsets.



看起来它不仅不属于折叠的字段集,而且在这些情况下也拒绝尊重权重。将标记字段的内容包装在 <p> 中标签使它尊重我机器上的重量:
$form['taxonomy']['instructions'] = array(
  '#value' => "<p>These are the instructions</p>",
  '#weight' => -1,
);

关于forms - 为什么 '#weight' 属性有时在 Drupal 表单中没有任何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1291550/

相关文章:

javascript - 使用 JavaScript/jQuery 对数组进行表单验证

css - 是否可以在 Drupal 的内容节点上方有一个大图像?

html - 如何使用 Drupal CSS Injector 覆盖以前的悬停状态

html - 如何使表单元素与另一个元素共享 Bootstrap 列

javascript - 使用本地存储中保存的数据填充 HTML 表单

ruby-on-rails - 如何在内联循环中包含 'next if' 条件

javascript - MVC Core 如何允许表单嵌入另一个表单

div 顶部的 CSS 仅限 Chrome 的空间

Drupal:我需要在 block 中显示用户名

Drupal: "All languages"作为多语言站点中的默认别名语言