解答:
Linuser 12:38:09
或许你加错了
Helios 12:38:11

Linuser 12:38:15
你看看手册
Linuser 12:39:11
$form['field_order]['#element_validate'] = array('example_order_validate');
Linuser 12:39:34
后面是一个数组
Helios 12:39:43
恩
Helios 12:39:57
给哪个元素加上那个元素就没了
Linuser 12:41:01
你仔细的对比一下
Linuser 12:41:14
至少说明,你的代码起作用了
Helios 12:41:25
发现在我的form_alter时表单元素数组还没准备好Helios 12:41:36

Linuser 12:41:45
(&$form,&$form_state,$form_id) {
Helios 12:41:52
还没有页面元素
Linuser 12:42:14
你需要增加模块的重量Linuser 12:42:32
db_query("UPDATE {system} SET weight=999 WHERE name='example'");
Helios 12:42:47
。。。
Linuser 12:42:59
这样,这个模块的钩子,在数据库中,在后面执行
Helios 12:43:02
还有这个原因啊
Linuser 12:43:13
function example_install(){
drupal_install_schema('example');
db_query("UPDATE {system} SET weight=999 WHERE name='example'");
}
Linuser 12:43:16
对
Helios 12:43:22
谢谢老师
Linuser 12:43:36
因为那个表单元素可能是其它模块使用form_alter加上的
Helios 12:43:37
我自己怎么也找不到原因
Helios 12:43:49
是cck的
Helios 12:43:54
content模块
Linuser 12:44:22
如果是其它模块form_alter加上的,那么你的模块想要修改里面的元素,你的模块的重量要大一点。
Helios 12:45:00
也就是说在执行form_alter时是根据module的weight来依次修改
Helios 12:45:06
可以这样理解吗
Helios 12:45:43
invoke_hook是这样这行的?
Linuser 12:45:53
对
Linuser 12:45:59
就是这么理解
Helios 12:46:16
呵呵,真没想到
Helios 12:46:20
谢谢了
Linuser 12:46:27
钩子的执行顺序是按照模块的重量先后执行的
默认字段只有标题和正文,对于分类字段还有其它CCK字段,这些都是通过其它模块实现form_alter的钩子函数添加进来的。对于这些后来添加进来的表单元素,如果你想修改他们的属性,那么除了需要实现form_alter钩子函数以外,还需要考虑你定制的模块的自身重量,看它是否大于CCK模块或者分类模块。