скрыть модуль при наложении пути
Я разрабатываю модуль, который показывает панель (фиксированная, верхняя, z-индекс 99999) с некоторым содержимым. Когда я в интерфейсе администратора с наложением, я хочу скрыть модуль, прямо сейчас панель перекрывает наложение.
Этот код работает хорошо, если наложение не активировано
if (arg(0) == 'admin' || arg(0) == '#overlay=admin') { $output = NULL; }
Только часть arg(0) == '#overlay=admin'
не работает,
Есть идеи?
Заранее благодарю
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'))));
}
Не могли бы вы просто скрыть свою панель с помощью 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!
}
}
Документация по функциям:
overlay_get_mode()
( К вашему СВЕДЕНИЮ: это всего лишь обертка для overlay_set_mode()
)
Я думаю, что самым простым способом было бы проверить, включен ли модуль наложения, и просто проверить URL-адрес для текущего запроса страницы, чтобы узнать, содержит ли он "администратор". Если наложение включено, по умолчанию все пути, начинающиеся с "admin", автоматически вызовут наложение, так что это должно сработать (я еще не проверял это):
if (module_exists('overlay') && arg(0) == 'admin') {
// ...
}
Обратите внимание, что это не будет работать для страниц, которые открываются в наложении без "администратора" в пути (например, узел/добавить). Если вы хотите сделать то же самое для тех,, вам, вероятно, потребуется вызвать hook_admin_paths()
чтобы получить список страниц, а затем проверить текущий URL-адрес на их соответствие.