Добавление произвольной области виджетов к теме

Дата публикации:Декабрь 5, 2010

Мы видели, что фреймворк Thematic обеспечивает добавление трех областей виджетов к футеру. Указанные области обернуты в блок div с идентификатором subsidiary.

Регистрация области виджетов

Первый шаг, который необходимо сделать при добавлении новой области виджетов к теме — зарегистрировать область виджетов. Регистрация области виджетов открывает простой путь к ее управлению через интерфейс панели администратора. Для того, чтобы сохранить файл functions.php в чистоте и порядке, создадим новый файл в каталоге library нашей дочерней темы; пусть он носит название widget-areas.php. Подключим созданный файл в functions.php:

include('library/widget-areas.php');

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

<?php// Register the extra Footer Aside
function wicked_footer_aside() {
register_sidebar(array(
'name' => 'Main Footer Aside',
'id' => 'footer-aside',
'description' => __('A widget area in the footer, above the subsidiary
?asides.', 'thematic'),
'before_widget' => thematic_before_widget(),
'after_widget' => thematic_after_widget(),
'before_title' => thematic_before_title(),
'after_title' => thematic_after_title(), )
);
}
add_action('init', 'wicked_footer_aside');
?>

Массив, который передается функции register_sidebar, должен включать в себя следующие значения:

nameНазвание области виджетов. В нашем случае область имеет название «Main Footer Aside»
idИдентификатор области виджетов. Используется при добавлении области виджетов к шаблонам. В нашем примере id=»footer-aside».
descriptionОписание области виджетов, включающее в себя ее функционирование или расположение. Отображается только во внутреннем интерфейсе. В нашем примере в качестве описания выступает строка “A widget-ready area in the footer, above the subsidiary asides”.
before_widget, after_widget, before_title и after_titleПозволяют добавлять необходимую разметку до и после каждого виджета, а также до и после заголовков виджетов. Можно использовать как уже существующие в Thematic функции, так и собственную разметку.

Теперь, когда мы зарегистрировали область виджетов и она появилась во внутреннем интерфейсе, мы можем добавлять к ней любые виджеты. Однако, если мы не вызовем область виджетов в каком-либо из шаблонов, то сколько виджетов бы мы ни добавили, они никогда не будут выведены на экран. Займемся этим в следующем подразделе.

Отображение области виджетов

Таким образом, мы зарегистрировали нашу новую область виджетов, но она пока существует лишь во внутреннем интерфейсе. Теперь, для того чтобы она появилась на экране, мы должны добавить ее в какой-либо шаблон. Разместим в файле widget-areas.php следующий код:

// Add footer Sidebar Area
function add_wicked_footer_aside() {
if (is_sidebar_active('footer-aside')) {
echo thematic_before_widget_area('footer-aside');
dynamic_sidebar('footer-aside');
echo thematic_after_widget_area('footer-aside');
}
}add_action('thematic_footer','add_wicked_footer_aside', 10);

В данном примере мы создали функцию с именем add_wicked_footer_aside, которая используется для захвата области виджетов «footer-aside» и размещения ее в самом верху футера Thematic. Условный оператор if (is_sidebar_active(‘footer-aside’)) выполняет проверку, является ли область виджетов активной (есть ли в ней какие-либо виджеты, или нет). Если пользователь добавил виджеты, то область виджетов будет отображена. После условного оператора следуют три важных строки, которые отвечают за вывод необходимой разметки:

echo thematic_before_widget_area(‘footer-aside’); — добавляет открывающую разметку для области виджетов.
dynamic_sidebar(‘footer-aside’); — функция, которая выводит на экран все виджеты, размещенные в области виджетов с указанным ID.
echo thematic_after_widget_area(‘footer-aside’); — добавляет закрывающую разметку для области виджетов.

Для того чтобы область виджетов имела ту же самую ширину, что и зона основного контента, необходимо добавить CSS стили:

#footer-aside {
width: 940px;
margin: 0 auto;
}
Поделиться

3 комментария

  1. Ярослав says:

    Интересная статья, только вставки кода развалились.

    Видимо слишком рано закрыли тег code, сразу после <?php

  2. Architect Of Ruin says:

    Спасибо, Ярослав, внесу должные корректировки.

  3. Architect Of Ruin says:

    Исправлено.

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.

Предыдущая запись:

Следующая запись: