修改Drupal表单字段 - [#weight]不被尊重的数组?
问题描述:
我没有经验的PHP。我遵循几个教程,使用template.php中的主题方法修改我的Drupal表单。修改Drupal表单字段 - [#weight]不被尊重的数组?
由于某些原因,字段的[#weight]属性不符合其值。我想将Subject字段[subject]上的Category字段[cid]移动。这些是代码行我用:
$form['cid']['#weight'] = 0.003;
$form['subject']['#weight'] = 0.004;
当我打印我的阵列来查看我看到的值发生了变化,但是当我渲染表单没有更改。每次修改后,我已经清除了性能缓存。
如果你有兴趣,这里是我的印刷阵列的一个片段:
[subject] => Array
(
[#type] => textfield
[#title] => Subject
[#maxlength] => 255
[#required] => 1
[#post] => Array
(
)
[#programmed] =>
[#tree] =>
[#parents] => Array
(
[0] => subject
)
[#array_parents] => Array
(
[0] => subject
)
[#weight] => 0.004
[#processed] => 1
[#description] =>
[#attributes] => Array
(
)
[#input] => 1
[#size] => 60
[#autocomplete_path] =>
[#process] => Array
(
[0] => form_expand_ahah
)
[#name] => subject
[#id] => edit-subject
[#value] =>
[#defaults_loaded] => 1
[#sorted] => 1
)
[cid] => Array
(
[#type] => select
[#title] => Category
[#default_value] => 1
[#options] => Array
(
[1] => General Enquiries
[2] => Support
)
[#required] => 1
[#post] => Array
(
)
[#programmed] =>
[#tree] =>
[#parents] => Array
(
[0] => cid
)
[#array_parents] => Array
(
[0] => cid
)
[#weight] => 0.003
[#processed] => 1
[#description] =>
[#attributes] => Array
(
)
[#input] => 1
[#size] => 0
[#multiple] =>
[#process] => Array
(
[0] => form_expand_ahah
)
[#name] => cid
[#id] => edit-cid
[#value] => 1
[#defaults_loaded] => 1
[#sorted] => 1
)
大加赞赏,
克里斯
答
您通常看到的节点形式的行为被启用时,CCK。这是因为CCK覆盖重量与自己订购系统配置的默认和CCK领域转到内容管理 - >内容类型 - >[内容类型] - >管理领域。
当然,如果您禁用CCK(可能不是一个选项),您的#weight
值将被尊重。
有一点要注意的是,尽管Forms API允许使用小数点#weight
,但最好使用整数。
编辑
如果你想限制CCK礼物内工作,自定义模块中,你需要实现一个#pre_render
处理CCK涂改后,将改变表单元素的权重其中:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
$form['#pre_render'][] = 'mymodule_form_alter_weight';
}
function mymodule_form_alter_weight($elements) {
$elements['cid']['#weight'] = 0.003;
$elements['subject']['#weight'] = 0.004;
return $elements;
}
的问题是,你不知道的权重值CCK已经用于其他形式的元素,所以当你订购的问题之前CID,这两个领域可能会出现在页面上所有其他字段的中间,而不是原来的位置。
当谈到体重时,CCK迫使你进入角落。正确的是,Drupal/CCK的方式来处理表格排序是尊重由管理员做出的选择上内容管理 - >内容类型 - >[内容类型] - >管理领域。
如果您有自定义表单元素,您可以告诉CCK关于它的信息,以便它显示在中通过执行hook_content_extra_fields()
来管理字段。继续上面的代码:
function mymodule_content_extra_fields() {
$extras['mymodule'] = array(// Name of field
'label' => t('Mymodule'),
'description' => t('Mymodule field'),
'weight' => 10, // The default weight, can be overriden on Manage Fields
);
return $extras;
}
这是有道理的。那么有没有办法解决这个问题?我只需要一个例外就是联系表单。我知道我可以主题它,但有没有编码修复? – 2010-07-31 10:13:43
@克里斯,是的,没有。我已经用更多信息和一些可能的解决方案更新了我的答案。 – 2010-07-31 10:38:15
感谢您的解决方案。我了解CCK现在如何处理表单字段。我想如果我有一个自定义窗体,那么我会走这条路线,但因为我只需要重新排列整个站点范围内的一个[cid]字段,我只需要使用CSS就可以了。我会记下您的解决方案以备将来参考。非常感谢! – 2010-07-31 10:46:37