Admin menu Select c ajax обработчиком

Главные вкладки

Аватар пользователя Darkkiss Darkkiss 3 февраля 2015 в 21:21

Добрый день,

Вопрос в следующем: нужно добавить в админку (Drupal 7) admin_menu селект, при выборе элементов которого будут происходить определенные действия(перестраиваться контент). Хочу сразу отметить, что мне не нужно создавать ссылку в админ меню, нужен именно селект с/без аякс обработчика.

1. В модуле админ меню есть специальный хук - hook_admin_menu_output_build(). Таким образом создали форму, селект, повесили на селект аякс обработчик и все вывели через хук. И все работает ровно до первого обновления страницы. После обновления страницы: админ меню хитрым образом кеширует весь свой контент и обработчик слетает с селекта. Далее при изменении селекта ничего не происходит(никакие события не выполняются).
Вопрос: как повесить обработчик обратно(вызов ф-ции колбека при изменении значения селекта.)? Можно ли как-то добавить обработчики через Behavior используя встроенный ф-ционал, чтобы не писать их "с нуля"(ведь апи формы их создает).

2. Таже ситуация, но не аякс, а просто сабмит кнопка + селект(все создано через hook_form). При нажатии на сабмит выполняется отправка формы постом, но ни на hook_form_submit ни на hook_form_validate не заходит (ф-ции хуков формирую правильно). Что может быть не так? Куда смотреть (не хочется начинать с index.php)?

Спасибо за идеи.

Комментарии

Аватар пользователя Darkkiss Darkkiss 4 февраля 2015 в 11:47

Нет, не сработало Sad После обновления - нету обработчика. Кеш выключил в админ_меню.
Обработчик навешиваю стандартно на всю форму
$form['eurail_preview_product_revision'] = array(
'#type' => 'select',
'#options' => $product_revision_tags,
'#default_value' => $product_revision_tags['current_revision'],
'#ajax' => array(
'callback' => 'ajax_preview_revision_callback',
'wrapper' => 'eurail-preview-product-revision-tag-form',
'method' => 'replace',
),
);

Аватар пользователя Darkkiss Darkkiss 4 февраля 2015 в 18:30

Решение нашел, т.к admin menu кешируется не только на стороне клиента(опция в конфиге), но и на стороне бекенда и т.к форма, тоже "кешируется" и требует это значение при валидациию. Но админ меню уже к этому моменту закешировало все в html, у формы уже нет шансов создать свой "кеш" (по факту это не совсем кеш) и при перезагрузки страницы она валится -не работает отправка постом. (В технических моментах могу ошибатся, но на практике как то так). Поэтому:
1. создаем форму
2. на препроцессе страницы добавляем js и передаем ему форму
3. Важно! Админ меню формируется сложно, просто взять элемент на загруженном доме и вставить в него html не получится(может и получится, но у меня не получилось :), не было элемента собственно, сам скрипт подключал после админ меню. Поэтому, берем бехавиор админ меню и расширяем его кодом со вставкой формы. Вот так вот просто.

Может кому будет полезно. Если есть вопросы, задавайте.