Скрывающийся блок средствами модуля "Ctools"

Описание проблемы: необходимо изменить стандартный блок, чтобы по нажатию на его заголовок блок сворачивался либо разворачивался.

Это можно реализовать с помощью модуля ctools. Он требуется для модуля Views, так что, скорее всего, он у Вас уже установлен.

Для начала необходимо отредактировать файл template.php Вашей темы. Добавляем либо изменяем функцию template_preprocess_block:

function MYTHEME_preprocess_block(&$vars) {
    // Изменяем блок с ID = 2. Используйте функцию dpm($vars) модуля Devel
    // для определения ID нужного блока.
    if ($vars['id'] == 2) {
        // Добавляем новый класс к заголовку
        $vars['title_attributes_array']['class'][] = 'ctools-collapsible-handle';
        // Добавляем новые классы для контейнера, содержащего заголовок и содержимое блока
        $vars['classes_array'][] = 'ctools-collapsible-container';
        // ctools-collapsible-remember - нужно ли запоминать выбор пользователя
        // Т.е. при переходе между страницами блок будет открытым либо закрытым
        // в зависимости от выбора пользователя
        $vars['classes_array'][] = 'ctools-collapsible-remember';
        // По умолчанию я сворачиваю блок. Уберите этот класс, если нет в этом необходимости
        $vars['classes_array'][] = 'ctools-collapsed';
        // Подключаем js-файлы из пакета ctools
        ctools_add_js('collapsible-div');
        ctools_add_css('collapsible-div');
    }
}

Не забудьте поменять MYTHEME на название Вашей темы.

Учтите следующие особенности:

  1. Классы "ctools-collapsible-container" и "ctools-collapsible-content" могут быть присвоены только элементу DIV.
  2. Класс "ctools-collapsible-remember" присваивается только элементу DIV с уникальным ID.
  3. Класс "ctools-collapsible-handle" может быть присвоен любому блочному элементу.

Следующий шаг: необходимо добавить класс "ctools-collapsible-content" к элементу DIV с нашим содержимым. Для этого я в папку своей темы добавил файл block.tpl.php. Название этого файла поменяйте в соответствии с указаниями в документации Drupal. В моём случае файл получил название - "block--views---exp-filter_of_promise-page.tpl.php". Содержимое этого файла:

<div id="<?php print $block_html_id; ?>" class="<?php print $classes; ?>"<?php print $attributes; ?>>

    <?php print render($title_prefix); ?>
        <?php if ($block->subject): ?>
            <h2<?php print $title_attributes; ?>><?php print $block->subject ?></h2>
        <?php endif;?>
    <?php print render($title_suffix); ?>

    <div class="content ctools-collapsible-content"<?php print $content_attributes; ?>>
        <?php print $content ?>
    </div>
    
</div>

Собственно всё! Теперь блок будет сворачиваться/разворачиваться по нажатию на заголовок. Как нетрудно догадаться, этот функционал можно подключить ко многим элементам.