Drupal → Как добавить настройки к блоку, созданному в стороннем модуле

30.01.2012

Чтобы расширить блок настройками, нужно воспользоваться хуком hook_block_configure(), но это работает только для блоков, определённых в этом же модуле. Если же встаёт задача расширить настройками блок из стороннего модуля, то на помощь приходит hook_form_FORM_ID_alter().

Ниже, пример кода для добавления текстового поля к настройкам блока, созданному из Views:

/**
 * Implements hook_form_FORM_ID_alter(): block_admin_configure.
 */
function mymodule_form_block_admin_configure_alter(&$form, &$form_state) {
  if ($form['module']['#value'] == 'views' && $form['delta']['#value'] == 'viewname-block_1') {
    $form['settings']['nids'] = array(
      '#type' => 'textfield',
      '#title' => 'Идетификаторы материалов',
      '#description' => 'Nid-ы материалов через запятую',
      '#default_value' => variable_get('mymodule_nids'),
    );
    
    $form['#submit'][] = 'mymodule_form_block_admin_configure_submit';
  }
}

/**
 * Custom submit callback for block_admin_configure form.
 */
function mymodule_form_block_admin_configure_submit($form, &$form_state) {
  variable_set('mymodule_nids', $form_state['values']['nids']);
}

Версия для Drupal 8+

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

А далее ты предлагаешь создание кастомного аргумента и и подсовывание туда variable_get()?

Почему нельзя ниды указывать сразу во вьюсе?

чтобы редактор не лез куда не следует

Тоже самое делал с атвокомплитом, но это было специально обозначено заказчиком, чтобы ноды задавались в настройках блока, а не во вьюсе. Хотя интерфейс блоков тоже как бы не для редактора. Я бы сделал через ноды. К примеру можно добавить поле (чекбокс) в ноду "Размещать в блоке СПЕЦ. ТОВАРЫ" и все. Во вьюсе добавить это поле в фильтрацию.
Это удобней как минимум по двум причинам:

  1. Не надо ничего кодить
  2. Не надо редактору лазить в интерфейс блоков или еще куда нибудь. Все задаётся естественно при редактировании ноды.

сохранить порядок нод можно миллионом способов, но всё это к сабжу не имеет отношение)

И еще нужно не забывать при удалении редактором ноды, удалять её нид из $mymodule_nids или как то по другому это учтитывать.

Александр
12.03.2012, 12:29

А изменить содержимое блока в зависимости от сохраненных настроек как можно?
Могу предположить

function hook_preprocess_block( &$variables )

Или это не правильное решение?

Альберт
03.07.2015, 09:15

Очень полезный ресурс! Админ и Всея сего - Респект тебе!
У мня тут целый дискусс на друпал.ру, все из-за твоих материалов, бабахаю расширение блоков. Используя АПИ друпал.орг и твой ресурс, знаю друпал меньше недели)))... получается все без костылей и на тест быстро, и САМОЕ Главное получается то, что задумано!
Не помешал бы мануальчик про аякс а то я разных формы конфликтуют, нашел решение - хук: calls to file_field_widget_form(). Но его пока что не разбирал, да и подсказать не кому, но к моменту написания мануала надеюсь победа будет за мной!)

Альберт
03.07.2015, 09:16

И вопрос один назрел:
Как к ХУКу _form_block_admin_configure_alter к полю 'file' прикрутить валидатор, всю голову изломал!(

Альберт
03.07.2015, 09:27

Совсем забыл поделиться:
_form_block_admin_configure_alter - добавляет настройки при редактировании блока
_form_block_add_block_form_alter - добавляет настройки при создании блока
Может кому сгодиться!)

Добавить комментарий