Иногда необходимо сделать дополнительные программные регионы (исключительно для вывода самописных модулей), но без размноженияregions[name] = Name
в .info темы.
К примеру, страница состоит из 2х частей: формы-фильтра и какого-то результата. Тогда:
в модуле
<?php
function my_module_page(){
$form = drupal_get_form('my_module_some_form');
$output = array();
$output['separate_form']['#markup'] = drupal_render($form);
$output['separate_content']['#markup'] = my_module_result();
return $output;
}
в template.php темы
<?php
/**
* Implementation of hook_preprocess_page()
*/
function my_theme_preprocess_page(&$vars){
// Разделение страницы на форму и контент
$vars['separate_form'] = NULL;
$vars['separate_content'] = NULL;
if (my_module_separate_page()){
$content = &$vars['page']['content'];
if (array_key_exists('separate_form', $content['system_main'])){
$vars['separate_form'] = $content['system_main']['separate_form']['#markup'];
}
if (array_key_exists('separate_content', $content['system_main'])){
$vars['separate_content'] = $content['system_main']['separate_content']['#markup'];
}
unset($content['system_main']);
}
}
/**
* Определение страниц для которых надо разделять контент на две части
* Здесь можно придумать какие-то свои правила. Для примера, указаны простые.
*/
function my_module_separate_page(){
static $is_separate;
if ($is_separate === NULL){
if (in_array(arg(1), array('page1', 'page2', 'my-module-page-3')) && !arg(2)){
$is_separate = TRUE;
}
}
return $is_separate;
}
в page.tpl.php темы
<?php
if ($separate_form || $separate_content): ?>
<div class="separate-region form">
<div class="container" class="clearfix">
<?php print $separate_form ?>
</div> <!-- /.container -->
</div> <!-- /.separate-region -->
<div class="separate-region content">
<div class="container" class="clearfix">
<?php print $separate_content ?>
</div> <!-- /.container -->
</div> <!-- /.separate-region -->
<?php endif; ?>
Profit.