xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Чтобы расширить блок настройками, нужно воспользоваться хуком 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 7
Похожие записи

Комментарии RSS

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

ага

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

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

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

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

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

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

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

function hook_preprocess_block( &$variables )

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

hook_block_view_alter

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

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании