скрыть модуль при наложении пути


Я разрабатываю модуль, который показывает панель (фиксированная, верхняя, z-индекс 99999) с некоторым содержимым. Когда я в интерфейсе администратора с наложением, я хочу скрыть модуль, прямо сейчас панель перекрывает наложение.

Этот код работает хорошо, если наложение не активировано

if (arg(0) == 'admin' || arg(0) == '#overlay=admin') { $output = NULL; }

Только часть arg(0) == '#overlay=admin' не работает,

Есть идеи?

Заранее благодарю

Author: mhmdrupal, 2012-06-28

3 answers

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

if (module_exists('overlay') && path_is_admin($_GET['q'])) {
  // The overlay is visualized.
}

path_is_admin() используется из overlay_init(), который содержит следующий код.

  // If this page shouldn't be rendered inside the overlay, redirect to the
  // parent.
  elseif (!path_is_admin($current_path)) {
    overlay_close_dialog($current_path, array('query' => drupal_get_query_parameters(NULL, array('q', 'render'))));
  }
 2
Author: kiamlaluno, 2012-06-28 12:49:19

Не могли бы вы просто скрыть свою панель с помощью CSS при наложении?

Скажем, например, родительский идентификатор вашего бара #my-admin-bar просто напишите следующее в файле mymodule.css:

body.overlay #my-admin-bar {
  display: none;
}

Затем включите файл mymodule.css в файл вашего модуля .info.

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

Это совершенно непроверено и может не делать даже близко того, что я думаю, что он должен делать, но здесь идет:

//Check if the overlay module is active first otherwise the
// overlay_get_mode() function won't be available and you'll get a WSOD
if (module_exists('overlay')){
  //Get the current path
  $current_path = current_path();
  //Get the overlay mode
  $overlay_mode = overlay_get_mode();
  //This bit should be self-explanatory
  if (path_is_admin($current_path) && $overlay_mode != 'none') {
    //The overlay is active and you are on an admin page!
  }
}

Документация по функциям:

module_exists()

current_path()

path_is_admin()

overlay_get_mode() ( К вашему СВЕДЕНИЮ: это всего лишь обертка для overlay_set_mode())

 1
Author: Chapabu, 2012-06-28 14:20:18

Я думаю, что самым простым способом было бы проверить, включен ли модуль наложения, и просто проверить URL-адрес для текущего запроса страницы, чтобы узнать, содержит ли он "администратор". Если наложение включено, по умолчанию все пути, начинающиеся с "admin", автоматически вызовут наложение, так что это должно сработать (я еще не проверял это):

if (module_exists('overlay') && arg(0) == 'admin') {
  // ...
}

Обратите внимание, что это не будет работать для страниц, которые открываются в наложении без "администратора" в пути (например, узел/добавить). Если вы хотите сделать то же самое для тех,, вам, вероятно, потребуется вызвать hook_admin_paths() чтобы получить список страниц, а затем проверить текущий URL-адрес на их соответствие.

 0
Author: Clive, 2012-06-28 12:11:05