Как не печатать блок меню, если блок меню существует


Я использовал 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;
?>

Я даже не уверен, что это действительно возможно.

 2
Author: vincer, 2015-05-17

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);
}
 1
Author: Richard Robinson, 2015-05-17 08:36:07

Согласно вашей последней фразе в вашем вопросе, модуль Bean является потенциальной альтернативой, которую вы, возможно, захотите рассмотреть. Вот цитата о его странице проекта:

Подумайте о компоненте как о способе предоставления новых типов (по сравнению с узлом это будет тип контента), который затем предоставляет интерфейс добавления контента для создания необходимого количества блоков (см. Скриншот ниже). Затем содержимое компонента может быть размещено на сайте, как и любое другое блок.

Существует довольно много других модулей, которые также интегрируются с модулем Bean.

 0
Author: Pierre.Vriens, 2015-05-17 05:52:20

Проверьте, существуют ли пункты меню содержимого блока, затем покажите блок.

<?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) 
?>
 0
Author: LucSB, 2016-06-17 00:53:46