我正在尝试为自定义类型创建节点表单。我启用了有机组和分类法,但希望它们的元素以非标准顺序出现。所以我已经实现了hook_form_alter
并将#weight
子阵列的og_nodeapi
属性设置为-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)更改为“fieldset”具有不再忽略其权重的效果。
答案 0 :(得分:12)
这听起来很奇怪,因为表格元素'#weight
参数的操作对我来说总是可行的,如广告所说。但有一点需要注意的是,权重仅影响相对于元素兄弟的顺序,因此如果要移动的元素低于其他元素的元素,那么'' d必须更改与要移动的元素处于同一级别的父元素的权重。
澄清一下,如果你有这样的层次结构,
$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中暗示:
注意:如果您使用标记,如果您的内容未包含在代码中(通常为
<p>
或<div>
),则您的内容将不在折叠的字段集中。
看起来它不仅落在折叠的场集之外,而且在这些情况下也拒绝尊重重量。在<p>
标记中包含标记字段的内容会使其尊重我的计算机上的权重:
$form['taxonomy']['instructions'] = array(
'#value' => "<p>These are the instructions</p>",
'#weight' => -1,
);
答案 1 :(得分:3)
有时(或者总是,当加权CCK元素时)在hook_form_alter或$ form ['#after_build']回调中起作用的行是这样的:
$form['#content_extra_fields']['taxonomy']['weight'] = 5;
答案 2 :(得分:2)
想要插入一个我可以在JS中使用的<div>
。这对我不起作用:
$form['you_as_reviewer']['ui_container'] = array(
'#type' => 'markup',
'#value' => '<div id="le_reviewer_tags_ui"/>',
'#weight' => 5,
);
重量被忽略了。
这有效:
$form['you_as_reviewer']['ui_container'] = array(
'#type' => 'markup',
'#prefix' => '<div>',
'#value' => '<div id="le_reviewer_tags_ui"/>',
'#suffix' => '</div>',
'#weight' => 5,
);
添加了前缀和后缀。
答案 3 :(得分:1)
我不太明白你想要达到的目标。你能澄清一下吗?您想在页面上更改分类标准下拉列表的位置吗?
同时你可以安装Drupal Devel module(如果你还没有这样做的话)。然后从Admin&gt;启用“显示表单元素键和权重”。开发设置。
这可以帮助您调试问题。
反馈后修改:
我进一步研究了一下。分类权重在第556行(Drupal 6.12)的taxonomy.module中设置:
$form['taxonomy']['#weight'] = -3;
为了测试,我还为我的模块实现了hook_form_alter
,如下所示:
function mymodule_form_alter(&$form, $form_state, $form_id) {
...
$form['taxonomy']['#weight'] = -9;
...
}
这对我有用,即它将分类法下拉菜单移到页面顶部。我可以改变重量,并在渲染页面上相应移动。
由于您说过您尝试在原始帖子中设置$form['taxonomy']['#weight']
,我目前只能考虑两种可能的检查:
hook_form_alter
taxonomy_form_alter
是否被称为
醇>
我发布了您目前拥有的代码,我们可以更详细地查看它。
请注意:Devel模块显示的权重对于这种情况不是很有用。显示“子表单”上元素的权重,而不是“子表单”本身的权重。例如。当我设置$form['taxonomy']['#weight'] = -9;
时,Devel模块不显示-9,而是$form['taxonomy']
内的元素权重。
答案 4 :(得分:0)
您是否指定了另一个字段的权重,现在您的节点表单组织不正确?形式api有点敏感,改变形式可能导致事情变得混乱。我有时必须将重量重新分配给我的提交/预览按钮,以便将它们放回到它们所属的表单底部。
答案 5 :(得分:0)
只是为了覆盖所有基础,请确保在必要时清除缓存。如果启用了缓存模块,Drupal默认将表单存储在缓存中。