Drupal CCK字段未使用hook_nodeapi验证

问题描述

| 我正在尝试对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)。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...