我正在尝试在Drupal CCk中对链接字段进行自定义验证。 我目前正在使用Link Contributed模块。 所以在我的hook_nodeapi和case中验证 请注意,此值接受无限值,这是一个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文件中,它就可以工作了。 我缺少什么想法?
由于
答案 0 :(得分:1)
您应该使用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);
}
}
答案 1 :(得分:0)
尝试将模块的权重从数据库中的system
表设置为最高,因此最后调用您的挂钩,并且所有CCK字段 - 包括(field_post_twitter)可能尚未填充到您的案例中 - 已经填充。
毕竟不要忘记清除你的缓存(drush cc)。