Drupal CCK字段不使用hook_nodeapi进行验证

时间:2011-04-13 10:39:46

标签: php validation drupal cck

我正在尝试在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文件中,它就可以工作了。 我缺少什么想法?

由于

2 个答案:

答案 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)。