Добавление js в форму узла drupal - PullRequest
7 голосов
/ 06 апреля 2010

В Drupal вы можете создать свой собственный тип узла в пользовательском модуле.Делая это, вы создаете свою собственную форму, которая очень хороша.

Однако, если вы хотите добавить js, форма становится немного сложнее.Если вы добавите js в форму, js будет добавлен в форму только при ее загрузке.Если пользователь отправит форму с ошибками проверки, функция формы больше не запускается и, следовательно, js не добавляется.Обычно вы просто создаете обратный вызов меню и добавляете туда js, но для формы добавления узла это не будет возможным решением.сохранить его постоянным, когда форма не проверяется?

Ответы [ 3 ]

12 голосов
/ 06 апреля 2010

Попробовав несколько разных хаков, я нашел довольно простое решение этой проблемы, создал функцию темы для формы и добавил туда js. Это будет выглядеть примерно так:

function theme_content_type_node_form($form) {
  drupal_add_js(...);
  return theme('node_form', $form);
}

Это просто вызывает функцию темы по умолчанию для формы добавления узла после добавления js. Так как функция темы вызывается даже при кешировании формы, это прекрасно работает. Вам также нужно реализовать hook_theme, чтобы эта работа работала.

Обновление для Drupal 7.

Drupal 7 делает это намного проще, так как это возможно

$form['#attached']['js'][] = 'path_to_js_file;

Примером использования этого может быть:

$form['#attached']['js'][] = drupal_get_path('module', 'foo') . '/js/foo.form.js';
2 голосов
/ 06 апреля 2010

Я опубликовал патч для модуля Смайлики , который решает эту проблему: Смайлики нельзя выбрать при повторной отправке страницы

Патч добавляет функцию hook_nodeapi (), чтобы проверить, является ли операция узла «проверять», и если это так, она проверяет, должен ли узел иметь смайлики, и если это так, вызывает функцию для добавления файла javascript smileys.js это создает форму выбора.

Вам просто нужно сделать то же самое в вашем случае. Это потребует от вас написания очень простого модуля, который реализует функцию hook_nodeapi и проверяет наличие обновлений так же, как это делает исправленный модуль Smileys.

0 голосов
/ 18 августа 2011

Вы можете использовать hook_nodeapi с чехлом prepare:

Пример:

/**
 * Implementation of hook_nodeapi
 */

function mymodulename_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch($op) {     
    case 'prepare':
      $module_path = drupal_get_path('module' , 'mymodulename'); 
      drupal_add_js($module_path."/myscript.js");
      break; 
  }
}

Теперь вы можете добавить свой код JavaScript в папку вашего модуля, например myscript.js.

...