drupal_add_js () добавляет JS, только когда нет сообщения об ошибке (D6) - PullRequest
0 голосов
/ 15 августа 2011

В моей пользовательской форме (в пользовательском модуле) drupal_add_js () добавляет JS, только когда нет сообщения об ошибке.

My code goes like this:
function ntcf_redo_order_form( &$form_state = array() ) {
  global $base_path, $user;

  $my_dir = drupal_get_path('module', 'ntcf_redo');
  drupal_add_js("$my_dir/order.js", 'module', 'header', FALSE, TRUE, FALSE);

  $form = array();
  ...
  return $form;
  }

Если функция проверки использовала _form_set_error () _ для отображения сообщения об ошибке и выделения поврежденного поля, сообщение отображается и поле подсвечивается, но вызов _drupal_add_js () _ ничего не делает. Без ожидающего сообщения об ошибке все хорошо.

РЕДАКТИРОВАТЬ: эта проблема не возникает с drupal_set_message(), только с form_set_error().

Я попытался добавить 3 более поздних параметра в вызов * drupal_add_js () *, чтобы он не оптимизировал его (не объединяйте его с другими файлами JS). В HTML не упоминается файл order.js, и не имеет значения, использую ли я последние 4 параметра ('header', FALSE, TRUE, FALSE) или нет.

В Admin / Performance я отключил Оптимизацию файлов Javascript и почти все кеширование, что также не имело никакого значения.

Дополнительные сведения: Я не уверен, если это что-то меняет, но меня это не удивит, так что вот так: То, что я делаю здесь, это многочастная форма "мастера", которая позволяет пользователю двигаться вперед и возвращаться назад. Кроме того, на многих страницах используется AJAX, поэтому мне нужно выполнить проверку всех «обязательных» полей в функции _submit вместо того, чтобы позволить Drupal делать это автоматически (поскольку это создает беспорядок в AJAX). Таким образом, если отсутствует поле «обязательное», функция _submit () устанавливает сообщение об ошибке, а функция генерации формы снова генерирует ту же форму (с дополнительным оформлением, полученным из сообщения об ошибке).

Также: это не по теме, но это может помочь кому-то, использующему Google: при создании многостраничной формы, позволяющей перейти назад, вы ДОЛЖНЫ назначить вес каждому элементу в форме, или иначе поля имеют тенденцию «блуждать», когда вы возвращаетесь назад.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 февраля 2014

Ответ Mikes ($ form ['# post_render'] [] = 'yourfunction';), будет работать, хотя это не оптимальный способ, и вызовет проблемы с drupal_add_js.

Лучший способ сделать это - добавить свой javascript через форму api '#attached'.

Вместо использования drupal_add_js или нового обратного вызова для '#post_render':

$form['#attached']['js'] = array(
  drupal_get_path('module', 'module_name') .'/file/path/filename.js',
);

Вы также можете передать массив 'css'. Будучи массивом, вы можете передавать как угодно файлы.

* Это для Drupal 7. Другие версии могут отличаться.

1 голос
/ 23 сентября 2011

У меня была та же проблема, я нашел обходной путь (для Drupal 7, может работать в 6):

1. in your form setup (or hook_form_alter), do this :
  $form['#post_render'][]='yourfunction';

2. define :

function yourfunction($content,$element){
 $my_dir = drupal_get_path('module', 'ntcf_redo');
  drupal_add_js("$my_dir/order.js", 'module', 'header', FALSE, TRUE, FALSE);
 return $content;
}

Я думаю, что это работает (в то время как ваш подход не работает), потому что hook_form_alter (и / или hook_form) НЕ вызывайте снова для подготовленной / кэшированной формы, поэтому при начальной загрузке формы будет загружаться JavaScript, но последующие сообщения НЕ будут. НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...