Как не печатать блок меню, если блок меню существует
Я использовал PHP-скрипт белого списка/черного списка для управления отображением 2 разных блоков меню, и он раздулся.
Блок меню 1 является основным меню. Menu_block 2 - это дополнительное меню.
Я пытаюсь установить видимость блока для Menu_block 1 с помощью PHP - ЕСЛИ Menu_block 2 существует, верните FALSE, иначе верните TRUE. Выведите Menu_block 1, если только не существует Menu_block 2.
Видимость PHP для Menu_block 1
<?php
if(isset($block = module_exists('menu_block', 'block', '2')) {
return FALSE;
}
return TRUE;
?>
Я даже не уверен, что это действительно возможно.
3 answers
У меня была та же проблема, и я решил ее, удалив один из блоков, вызвав template_preprocess_page() в пользовательском модуле или в вашей темеtemplate.php . Что я делаю, так это проверяю, существуют ли оба блока на странице, и если да, вызываю unset() в блоке, который я хочу удалить:
function mymodule_preprocess_page(&$variables) {
//Remove secondary menu block if tertiary menu block is on the page
if(!empty($variables['page']['sidebar_first']['menu_block_tertiary']) && !empty($variables['page']['sidebar_first']['menu_block_secondary'])) {
unset($variables['page']['sidebar_first']['menu_block_secondary']);
}
Индексы в вашем массиве $variables, скорее всего, будут другими. На моем сайте "sidebar_first" - это область в моей теме, где мое меню блокируется (menu_block_primary и menu_block_secondary) размещаются. Если вы не уверены, каковы ваши переменные, вы можете использовать вызов dpm ($variables), чтобы найти их (убедитесь, что у вас включен модуль devel), например:
function mymodule_preprocess_page(&$variables) {
dpm($variables);
}
Согласно вашей последней фразе в вашем вопросе, модуль Bean является потенциальной альтернативой, которую вы, возможно, захотите рассмотреть. Вот цитата о его странице проекта:
Подумайте о компоненте как о способе предоставления новых типов (по сравнению с узлом это будет тип контента), который затем предоставляет интерфейс добавления контента для создания необходимого количества блоков (см. Скриншот ниже). Затем содержимое компонента может быть размещено на сайте, как и любое другое блок.
Существует довольно много других модулей, которые также интегрируются с модулем Bean.
Проверьте, существуют ли пункты меню содержимого блока, затем покажите блок.
<?php
$block1 = module_invoke('menu_block', 'block_view', '1');
$block2 = module_invoke('menu_block', 'block_view', '2');
if ($block1['content']['#content'] == null ) {
print render($block2['content']);
} else {
print render($block1['content']);
}
//dpm($block1)
?>