我正在尝试为自定义类型创建节点表单.我启用了有机组和分类法,但希望它们的元素以非标准顺序出现.所以我已经实现hook_form_alter并将子数组的#weight属性设置og_nodeapi为-1000,但它仍然在分类和菜单之后.我甚至尝试将子阵列更改为字段集(强制实际渲染),但没有骰子.我也尝试过设置
$form['taxonomy']['#weight'] = 1000
Run Code Online (Sandbox Code Playgroud)
(我有两个词汇,所以它已经被渲染为一个字段集),但这也没有用.
我将模块的权重设置得非常高,并在系统表中确认它确实是网站上最高的模块 - 所以我完全没有想法.有什么建议?
更新:
虽然我不确定如何,但我确实设法让分类法字段集低于其他一切,但现在我有一个相关的问题,希望更容易理解.在分类法字段集中,我有两个项目(标签和多选),我想在hook_form_alter中添加一些指令,如下所示:
$form['taxonomy']['instructions'] = array(
'#value' => "These are the instructions",
'#weight' => -1,
);
Run Code Online (Sandbox Code Playgroud)
你猜对了,这出现在分类模块插入的术语之后.但是,如果我将其更改为字段集:
$form['taxonomy']['instructions'] = array(
'#type' => 'fieldset', // <-- here
'#title' => 'Instructions', // <-- and here for good measure
'#value' => "These are the instructions",
'#weight' => -1,
);
Run Code Online (Sandbox Code Playgroud)
然后它像我想要的那样神奇地漂浮到顶端.我也试过textarea(这也有效)并明确地说标记(这没有).
所以基本上,将类型从"标记"(默认的IIRC)更改为"fieldset"具有不再忽略其权重的效果.
Hen*_*pel 12
这听起来很奇怪,因为表格元素#weight参数的操作对我来说总是可行的,如广告所说.但有一点需要注意的是,权重仅影响相对于元素兄弟的顺序,因此如果要移动的元素位于低于其他元素的水平,则必须更改权重父元素与您要移动的元素位于同一级别.
为了澄清,如果你有这样的层次结构,
$element['foo'];
$element['bar'];
$element['bar']['baz']
Run Code Online (Sandbox Code Playgroud)
你不能通过设置'baz'的重量来移动'baz'相对于'foo'.你必须在'bar'上设置权重(也可以移动它),或者拉出'baz'并将它带到与'foo'相同的水平.
另一个可能的原因可能是CCK:如果您安装了CCK,它允许您设置自己的顺序以及其他字段admin/content/node-type/<yourNodeType>/fields.它通过注册预渲染回调来更改顺序content_alter_extra_weights(),因此这将在您进行更改后运行hook_form_alter.
编辑:更新以回答问题更新
在fieldset中使用时,标记字段类型具有特殊行为,这在表单api文档中暗示:
注意:如果您使用标记,如果您的内容未包含在标记中(通常
<p>或<div>),则您的内容将不在折叠的字段集中.
看起来它不仅落在折叠的场集之外,而且在这些情况下也拒绝尊重重量.在标记中包含标记字段的内容<p>使其尊重我的计算机上的权重:
$form['taxonomy']['instructions'] = array(
'#value' => "<p>These are the instructions</p>",
'#weight' => -1,
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14220 次 |
| 最近记录: |