Возможно ли для модуля знать, когда один из его блоков выводит на приборной панели, и изменить содержание этого блока?

drupal.stackexchange https://drupal.stackexchange.com/questions/514

  •  16-10-2019
  •  | 
  •  

Вопрос

Drupal 7 имеет новый Core Module (Dashboard.Module), который позволяет пользователям с правильными разрешениями добавлять блоки, определенные с сторонних сайтов на панель панели, которая отображается как наложение на текущей странице.

Возможно ли для модуля, который реализует блоки, чтобы знать, когда блок отображается на приборной панели?
Идея заключается в том, чтобы изменить содержание блока и сделать его меньше (например,).

Это было полезно?

Решение 2

Глядя на код Dashboard.Module, я нашел следующую функцию:

/**
 * Implements hook_block_list_alter().
 *
 * Skip rendering dashboard blocks when not on the dashboard page itself. This
 * prevents expensive dashboard blocks from causing performance issues on pages
 * where they will never be displayed.
 */
function dashboard_block_list_alter(&$blocks) {
  if (!dashboard_is_visible()) {
    foreach ($blocks as $key => $block) {
      if (in_array($block->region, dashboard_regions())) {
        unset($blocks[$key]);
      }
    }
  }
}

Dashboard_is_visible () это функция, которая возвращается TRUE Когда приборная панель видна, и dashboard_regions () это функция, которая возвращает массив, содержащий список регионов, содержащихся на приборной панели.

Это функции, которые позволяют модулю знать, когда его блоки отображаются на приборной панели. Единственная проблема заключается в том, чтобы модуль узнал, в какой области связаны его блоки, поскольку объект блока не передается в Hook_block_view ()Анкет Drupal 7 использует новые крючки, Hook_block_view_alter () а также Hook_block_view_module_delta_alter (), чей второй параметр является объектом блока. Реализация одного из этих крючков возможно изменить блок, основываясь на том факте, что блок отображается на приборной панели или нет.

Предполагая, что mymodule это короткое имя модуля, и test_block является значением дельта, модуль должен использовать следующую функцию:

/**
 * Implements hook_block_view_MODULE_DELTA_alter().
 */
function mymodule_block_view_mymodule_test_block_alter(&$data, $block) {
  if (dashboard_is_visible() && in_array($block->region, dashboard_regions())) {
    // The block is rendered in the dashboard.
  }
}

Другие советы

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

Обновление: этот метод все еще будет работать, хотя я недостаточно знаком модуля Drupal 7S Dashboard, чтобы прокомментировать. Единственное, что я бы предложил, это вывод переменных страниц и посмотреть, есть ли что -нибудь установленное модулем панели мониторинга.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top