问题描述
|
我正在尝试对Drupal CCk中的链接字段进行自定义验证。
我当前正在使用链接贡献模块。
所以在我的hook_nodeapi和案例验证
请注意,此值接受无限值,因此存在foreach。
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文件中,它确实可以工作。
关于我缺少什么的任何想法?
谢谢
解决方法
您应该使用hook_form_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);
}
}
,尝试将数据库中“ѭ2”表中模块的权重设置为最高,以使钩子最后被调用,并且所有CCK字段-包括(field_post_twitter)可能尚未填充的情况都已填充。
毕竟不要忘记清除缓存(drush cc)。