Поле Drupal CCK не проверяется с помощью hook_nodeapi

Я пытаюсь выполнить настраиваемую проверку по полю ссылки в Drupal CCk. В настоящее время я использую модуль Link Contributed. Итак, в моем hook_nodeapi и case validate обратите внимание, что это значение принимает неограниченные значения, это есть 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, он ДЕЙСТВИТЕЛЬНО работает. Любые идеи о том, что мне не хватает?

Спасибо


person Valor    schedule 13.04.2011    source источник
comment
Из-за отсутствия трассировки в PHP вы могли бы разбрызгивать var_dumps () по всему коду, чтобы увидеть, от высокого к низкому, действительно ли код выполняется. В качестве альтернативы установите модуль devel и замените var_dump на dvm() и другие помощники, предоставляемые модулем devel. От высокого к низкому означает: проверьте, загружен ли модуль вообще, затем, если функция вызывается, затем выполняется ли ваш foreach и так далее.   -  person berkes    schedule 13.04.2011


Ответы (2)


Вы должны использовать 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);
  }
}
person dobeerman    schedule 13.04.2011

Попробуйте установить максимальный вес вашего модуля из таблицы system в вашей базе данных, чтобы ваш хук был вызван последним, а все поля CCK, включая (field_post_twitter), которые, вероятно, еще не заполнены в вашем случае, уже были заполнены.

В конце концов, не забудьте очистить кеш (drush cc).

person Mohammed J. Razem    schedule 13.04.2011