为什么“#weight”属性有时在Drupal表单中没有任何效果?

前端之家收集整理的这篇文章主要介绍了为什么“#weight”属性有时在Drupal表单中没有任何效果?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为自定义类型创建一个节点表单.我有有机组和分类学都能启用,但希望他们的元素以非标准的顺序出现.所以我已经实现了hook_form_alter,并将og_nodeapi子阵列的#weight属性设置为-1000,但它仍然符合分类菜单.我甚至尝试将子阵列更改为一个字段集(强制实际渲染),但没有骰子.我也试过设置
$form['taxonomy']['#weight'] = 1000

(我有两个vocab,所以它已经被渲染为一个字段),但是也没有工作.

我设置了我的模块的重量非常高,并在系统表中确认,它确实是网站上最高的模块 – 所以我都是出于想法.有什么建议么?

更新:

虽然我不完全确定如何,但我确实设法使分类学领域下沉到其他的一切,但现在我有一个相关的问题,希望更容易理解.在分类字段集中,我有两个项目(一个标签和多个选择),我想在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",);

那么它就像我想的那样神奇地漂浮在顶端.我也尝试了textarea(这也是工作),并明确地说标记(这没有).

因此,基本上将类型从“标记”(默认IIRC)更改为“字段”,具有不再忽略其重要性.

解决方法

这听起来很奇怪,因为表单元素的#weight参数的操作总是可靠地为我公布的.需要注意的一点是,重量只会影响相对于元素兄弟姐妹的顺序,所以如果你要移动的元素的水平低于其他元素的水平,那么你必须改变与要移动的父元素位于同一级别的父元素.

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

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

您不能通过设置“baz”的重量来移动’baz’相对于’foo’.你必须将重量放在’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>",);

猜你在找的HTML相关文章