Php Drupal CCK字段不使用hook_nodeapi进行验证
我试图在DrupalCCK中对链接字段进行自定义验证。 我目前正在使用链接模块。 所以在我的hook_nodeapi和case validate中 请注意,此值接受无限制值,因为存在foreachPhp Drupal CCK字段不使用hook_nodeapi进行验证,php,validation,drupal,cck,Php,Validation,Drupal,Cck,我试图在DrupalCCK中对链接字段进行自定义验证。 我目前正在使用链接模块。 所以在我的hook_nodeapi和case validate中 请注意,此值接受无限制值,因为存在foreach case 'validate': if ($node->type == 'flow') { foreach ($node->field_post_twitter as $twitter_v) { $pattern = '/
case 'validate':
if ($node->type == 'flow')
{
foreach ($node->field_post_twitter as $twitter_v)
{
$pattern = '/(http|https|ftp):[\/]{2}twitter\.com/i';
if (preg_match_all($pattern, $twitter_v['url']))
{
form_set_error('not working');
}
}
}
break;
但它不是验证,而如果我把它放在一个普通的php文件中,它确实可以工作。
你知道我遗漏了什么吗
谢谢尝试将数据库中的
系统
表中的模块权重设置为最高,这样钩子将在最后调用,并且所有CCK字段(包括您案例中可能尚未填充的(field_post_twitter))都已填充
毕竟不要忘记清除缓存(drush cc)。您应该使用hook\u form\u alter更改当前表单的验证数组,并将自定义验证函数添加到此数组中
function mymodule_form_alter(&$form, &$form_state, $form_id){
switch($node->type){
case 'test_node_form':
$form['#validate'][] = 'my_custom_validate';
break;
}
}
function my_custom_validate($form, &$form_state){
$values = $form_state['values'];
if(/* conditions */){
$message = t('Oops!');
form_set_error('', $message);
}
}
由于PHP缺乏跟踪,您可以在代码中添加一些“var_dumps()”,从高到低查看代码是否实际运行。或者,安装devel模块并将var_dump替换为
dvm()
和devel模块提供的此类帮助程序。“从高到低”的意思是:检查模块是否被加载,然后检查函数是否被调用,然后检查foreach是否运行等等。