Взаимодействие частей

Дата публикации:Ноябрь 28, 2010

Прежде, чем мы перейдем к более сложным модификациям нашей темы, посмотрим на то, как взаимодействуют между собой хуки и файлы шаблона для создания разметки. Откроем файл single.php, который отвечает за отображение отдельной записи:

<?php// calling the header.php
get_header();// action hook for placing content above #container
thematic_abovecontainer();?><div id="container"><?php thematic_abovecontent(); ?><div id="content">

<?php

the_post();

// create the navigation above the content
thematic_navigation_above();

// calling the widget area 'single-top'
get_sidebar('single-top');

// action hook creating the single post
thematic_singlepost();

// calling the widget area 'single-insert'
get_sidebar('single-insert');

// create the navigation below the content
thematic_navigation_below();

// calling the comments template
thematic_comments_template();

// calling the widget area 'single-bottom'
get_sidebar('single-bottom');

?>

</div><!-- #content -->

<?php thematic_belowcontent(); ?>

</div><!-- #container -->

<?php

// action hook for placing content below #container
thematic_belowcontainer();

// calling the standard sidebar
thematic_sidebar();

// calling footer.php
get_footer();

?>

Фунция thematic_singlepost отвечает за вывод полной записи. Выполнив поиск по всему каталогу Thematic, обнаруживаем, что объявление функции находится в файле library/extensions/content-extensions.php:

// Located in single.php
// The Post
function thematic_singlepost() {
do_action('thematic_singlepost');
} //end thematic_singlepost

do_action сообщает механизму WordPress, что действие имело место. Таким образом, активируется выполнение подцепленных функций. Для того, чтобы понять в деталях, как именно это работает, разобьем действие на отдельные пункты:

1. Когда WordPress начинает обрабатывать файл шаблона single.php, он сталкивается с вызовом функции thematic_singlepost().
2. При запуске указанной функции Thematic сообщает WordPress о выполнении действия thematic_singlepost.
3. Начиная с этого момента, все функции, которые были подцеплены к хуку через do_action, будут выполнены.

Для того, чтобы узнать, что дальше будет делать Thematic, необходимо отыскать функции, которые были сцеплены с хуком. Следующее вхождение строки «thematic_singlepost» находится в том же самом файле:

add_action('thematic_singlepost', 'thematic_single_post');

Это и есть необходимый нам вызов add_action. Он сообщает WordPress, что после того как событие thematic_singlepost произошло, нужно вызвать функцию thematic_single_post. Сама функция расположена над вызовом add_action:

function thematic_single_post() { ?>
<div id="post-<?php the_ID(); ?>">
<?php thematic_postheader(); ?>
<div>
<?php thematic_content(); ?>
<?php wp_link_pages('before=<div>' .
?__('Pages:', 'thematic') . '&after=</div>') ?>
</div>
<?php thematic_postfooter(); ?>
</div><!-- .post -->
<?php
}

Несмотря на то, что одну из функций мы нашли, код содержит вызов других функций, которые также спрятаны в папках Thematic. Некоторые из них, такие как, к примеру, thematic_content, находятся в папке library фреймворка Thematic. Другие — к примеру, wp_link_pages, — относятся к встроенной функциональности WordPress. Однако, как первый, так и второй вид функций выполняют схожие задачи: отвечают за представление отдельной записи. Запись состоит из: блока div с несколькими классами и собственным идентификатором; функции, отвечающей за вывод заголовка записи; блока div с контентом; функции, отвечающей за вывод нижней части записи.

Для того, чтобы узнать, как работает одна маленькая функция, нам пришлось перерыть множество различных файлов. Одна функция вызывает другую функцию, а та, в свою очередь, вызывает третью — настоящая «матрешка» из функций. На самом деле, ничего странного в такой структуре нет. Все функциональные элементы разбиты на небольшие обособленные блоки, которые затем можно быстро и легко использовать в различных частях шаблонов, что обеспечивает высокую гибкость при редактировании материалов.

Поделиться

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

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

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