Я использую Commerce Kickstart Distribution из Drupal 7. Я хочу, чтобы панель поиска была назначена другому региону на главной странице, чем на всех других сайтах в моей теме. Я использовал подход, показанный здесь: http://saw.tl/drupal/programmatically-manage-drupal-blocks.html
function mytheme_hook_block_info_alter(&$blocks, $theme, $code_blocks)
{
if(drupal_is_front_page()) {
$blocks['views]['-exp-display_products-page']['region'] = "branding";
}
}
Это функция в моем template.php. Я знаю, что панель поиска создается с использованием модуля views и не является «блоком по умолчанию».
Имя, отображаемое в меню «Блок» для панели поиска: Exposed form: display_products-page
, имя модуля и имя компьютера, которые я выбрал, следуя этому уроку http://drupalchamp.org/node/166
Тем не менее, это не работает вообще. Я не получаю никаких ошибок или предупреждений, блок просто остается в регионе по умолчанию, когда я загружаю первую страницу.
Вы можете использовать модуль Context для добавления блоков в разные регионы в зависимости от некоторых критериев:
https://www.drupal.org/project/context
Очень мощный и простой в использовании модуль, поэтому я советую его.
И если вы предпочитаете делать это из кода, вы можете получить содержимое блока и распечатать его непосредственно из шаблона, в зависимости от обнаруженной страницы. Что-то вроде:
$block = module_invoke('views', 'block_view', 'block_machine_name');
print render($block);
Конечно, вы бы выполнили это условно …
Других решений пока нет …