This is an old revision of the document!
Если вам требуется показать компонент только на одной странице, это можно сделать с помощью следующего кода в файле шаблона template.php:
<?php if (return_page_slug()=='PAGE') get_component('COMPNAME'); ?>
Соответственно – ‘PAGE’ – постоянная ссылка на страницу (slug), ‘COMPNAME’ – имя вашего компонента.
Похожий метод работает для вывода определенного компонента на страницу в зависимости от ее родителя:
<?php if (get_parent(0)=='PAGE') get_component('COMPNAME'); ?>
Здесь ‘PAGE’ – постоянная ссылка на страницу-родитель (slug), ‘COMPNAME’ – имя вашего компонента.
Для исключения компонента из определенной страницы или в зависимости от родителя поменяйте в приведенном выше коде “==“ на ”!=“.
Контент компонентов может представлять из себя графику шапки сайта, код сайдбара, слоган или теглайн, в общем, что угодно. Если только одна страница на сайте отличается набором используемых компонентов, проще сделать для этой страницы отдельный шаблон. Но в случае, если необходим вывод разных компонентов на разных страницах, есть смысл применить метод с использованием пользовательской функции.
Для постраничного вывода компонентов необходимо создать в вашей теме файл functions.php, если его там еще нет, и добавить туда следующую функцию:
<?php if (!function_exists('component_exists')) { function component_exists($id) { global $components; if (!$components) { if (file_exists(GSDATAOTHERPATH.'components.xml')) { $data = getXML(GSDATAOTHERPATH.'components.xml'); $components = $data->item; } else { $components = array(); } } $exists = FALSE; if (count($components) > 0) { foreach ($components as $component) { if ($id == $component->slug) { $exists = TRUE; break; } } } return $exists; } } ?>
Создайте компонент, который будет использоваться по умолчанию. Дайте ему имя, допустим, default. Создайте компоненты для других страниц. Имя компонента должно включать в себя постоянную ссылку (slug) той страницы, на которой их предполагается вызывать, допустим: content-about, content-contact. Затем разместите в шаблоне следующий код:
<?php if (component_exists('content-'.get_page_slug(false))) {get_component('content-'.get_page_slug(false));} else {get_component('default');} ?>
Оригинал статьи, по которому сделан перевод, можно почитать здесь.
Для вывода разных сайдбаров на разных страницах существует несколько способов. Один из них – именование соответствующих компонентов таким образом, чтобы их имя содержало постоянную ссылку на страницу (slug), допустим, sidebar-mypage, и вызов соответствующего компонента в коду шаблона следующим образом:
<?php if (return_i18n_component('sidebar-'.return_page_slug())) { get_i18n_component('sidebar-'.return_page_slug()); } else { get_i18n_component('sidebar'); } ?>
Компонент с именем sidebar - наш сайдбар по умолчанию. Остальным компонентам присваиваются имена sidebar-xxx, где xxx - текстовый идентификатор страницы (slug), на которой предполагается замена сайдбара по умолчанию на предназначенный именно для этой страницы.
Другой способ – использование пользовательского поля (custom field) c именем «sidebar» - лучше применить выпадающий список с именами компонентов-сайдбаров. Допустимо и простое текстовое поле, но это не очень удобно из-за возможной ошибки при вводе имени компонента.
После формирования списка просто включаем выбранный компонент в шаблон:
<?php get_i18n_component(return_custom_field('sidebar')); ?>
При желании можно предварительно проверить пользовательское поле с компонентом на существование:
<?php if (return_custom_field('sidebar')) { get_i18n_component(return_custom_field('sidebar')); } else { get_i18n_component('sidebar'); } ?>
Если сайдбары необходимо выводить постранично, то есть для каждой страницы – свой сайдбар, можно создать пользовательское поле WYSIWIG, соответствующим образом отредактировать его на каждой странице, и вставить в файл шаблона следующий код:
<?php get_custom_field('sidebar'); ?>
Тот же результат, но с проверкой пользовательского поля с компонентом на существование:
<?php if (return_custom_field('sidebar')) { get_custom_field('sidebar'); } else { get_i18n_component('sidebar'); } ?>