Как программно отключить регионы на странице друпал 7? - PullRequest
2 голосов
/ 13 апреля 2011

Я работаю над модулем, где у меня есть страница, на которой не должно быть регионов или дополнительного контента.Что-то вроде «пожалуйста, подождите».
Как мне набрать весь дополнительный контент (меню регионов ... и т. Д.)?я думаю, что у Panels есть эта возможность, но я не могу найти фрагмент, который он использует.
С другой стороны, возможно ли для модуля указать специальную пользовательскую страницу?например, на странице обслуживания?

Ответы [ 4 ]

10 голосов
/ 16 января 2013

Метод page.tpl.php не является гибким.Он основан на логике представления.Вы должны использовать hook_page_alter () для решения бизнес-логики.Например:

function yourmodulename_page_alter(&$page) {
  if (current_path() == 'node/add/yourcontenttype') {
    unset($page['sidebar_first']);
  }
}

Также посмотрите на очень мощный Модуль контекста .

1 голос
/ 16 апреля 2011

Вы можете создать дополнительный page.tpl.php специально для страницы, где вы хотите скрыть регионы.Принцип именования аналогичен принципу для узлов.

Допустим, у вас есть страница с URL example.com/content/contact.Шаблон с именем page - content - contact.tpl.php будет обслуживать эту страницу, и любая страница, которая начинается с этого URL, т.е. страница example.com/content/contact/staff также будет использовать этот шаблон (я думаю).

Проверьте классы элемента body на предмет подсказок к тому, что вы можете назвать своим шаблоном, большинство тем напечатает это.В моем примере выше элемент body включал бы класс page-content-contact.

1 голос
/ 15 апреля 2011

Единственное, о чем я могу думать, это писать чеки в вашем файле page.tpl.php, чтобы увидеть, говорите ли вы на этой «странице» и не распечатываете регионы / меню, или используете другой шаблон. http://drupal.org/node/223440

0 голосов
/ 17 декабря 2013

Если вы хотите сделать это до , блоки будут отображены:

/**
 * Implements hook_block_list_alter()
 *
 * Hides the right sidebar on some pages.
 */
function THEME_NAME_block_list_alter(&$blocks) {

  // This condition could be more interesting.
  if (current_path() !== 'node/add/yourcontenttype') {
    return;
  }

  // Go through all blocks, and hide those in the 'sidebar_second' region.
  foreach ($blocks as $i => $block) {
    if ('sidebar_second' === $block->region) {
      // Hide this block.
      unset($blocks[$i]);
    }
  }
}

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

...