Добавление js к drupal форме узла

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

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

Таким образом, каково лучшее решение для добавления js в узле, добавляет форма, для хранения этого персистентным, когда форма не проверяет?

7
задан googletorp 6 April 2010 в 11:28
поделиться

2 ответа

Попробовав несколько разных хаков, я нашел довольно простое решение этой проблемы: создал функцию темы для формы и добавил туда 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';
12
ответ дан 6 December 2019 в 15:20
поделиться

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

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

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

2
ответ дан 6 December 2019 в 15:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: