Псевдорегионы

Опубликовал Максим Баев, 28 апреля 2014, 11:30

Иногда необходимо сделать дополнительные программные регионы (исключительно для вывода самописных модулей), но без размножения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.

Другие посты