Иногда стоит задача менять наборы компонентов шапки и подвала на разных страницах сайта. Например на какой-то странице выводить только верхнее меню, а на другой вовсе исключить вывод компонентов. Формально для таких вещей делается main-файл (в каталоге main), где в html-секции шапки прописываются нужные компоненты.
Но, main-шаблон больше используется для смены модульной сетки, где меняются расположение элементов (например правый и левый сайдбар), поэтому если и делать наборы компонентов, то придется их делать для каждого main-шаблона. Это довольно утомительно.
Оптимальным вариантом был бы выбор набора компонентов при редактировании записи через дополнительные мета-поля.
На практике это выглядит так: вебмастер подготавливает файлы, где прописывает подключение нужных компонентов, а при редактировании записи файл выбирается из выпадающего списка.
Подключение компонентов выполняется в main-файле. При этом проверяется существование файла custom/header_components.php и если он есть, то подключается только он. Если нет, то выполняется код, который подключает компоненты, основываясь на значениях опций header_component1, header_component2 и т.д.
Таким образом, чтобы жестко подключить компоненты, следует использовать файл custom/header_components.php.
Например такой вариант файла:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); if ($fn = mso_fe('components/menu-only/menu-only.php')) require($fn); # end file
Подключит в шапке только указанные компоненты (menu-only).
Разместим файлы наборов компонентов в каталоге custom/kit-header. В каждом его файле подготовим требуемые наборы компонентов, например
- custom/kit-header/menu-only.php — одиночное меню
- custom/kit-header/menu-image-rand.php — меню + случайная картинка
- custom/kit-header/no-components.php — вообще без компонентов
- и т.д.
Количество файлов и их содержимое может быть произвольным.
Теперь сделаем файл custom/my_meta.ini, где создадим дополнительное мета-поле для записи, через которое будет выбор файла.
[Набор компонентов шапки] options_key = kit_header_components type = select description = "Укажите набор компонентов шапки" default = "" values = "<?php $all = mso_get_path_files(getinfo('template_dir') . 'custom/kit-header/', '', false, array('php')); if ($all) echo ' ||обычный #' . implode($all, '#'); else echo ' ||Обычный'; ?>"
Вся магия в функции mso_get_path_files(), которая возвращает список файлов с указанным расширением в указанном каталоге. Результат подставляется в мета-ключ values.
Теперь выбор файла доступен при редактировании записей.
В файле custom/header_components.php разместим код, который будет проверять наличие выбранного пункта у записи: если есть, то подключать файл, если нет — выполнять дефолтный код main-шаблона.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); if ( is_type('page') and isset($pages[0]['page_meta']['kit_header_components'][0]) and $kit_header_components = mso_fe('custom/kit-header/' . $pages[0]['page_meta']['kit_header_components'][0]) ) { require($kit_header_components); } else { if ($fn = get_component_fn('header_component1', 'menu-only')) require($fn); if ($fn = get_component_fn('header_component2')) require($fn); if ($fn = get_component_fn('header_component3')) require($fn); if ($fn = get_component_fn('header_component4')) require($fn); if ($fn = get_component_fn('header_component5')) require($fn); } # end file
Вначале проверяем, что это тип page и присутствует мета-поле kit_header_components (мы задали его в my_meta.ini). Если всё есть, то функцией mso_fe() проверяем реальное наличие файла в шаблоне. Если есть, то подключаем файл через require().
Если любое из условий не сходится, то выполняем код из main-шаблона (блок else).
Всё вышеописанное справедливо и для компонентов подвала, только следует использовать файл footer_components.php, ну и сделать отдельную опцию и каталог для наборов, чтобы он не путался с компонентами шапки.
Комментариев: 3 RSS
1Денис Скрипник06-05-2013 19:00
Спасибо за статью: очень полезная.
Как окажусь у настольного компьютера, внедрю в свой шаблон.
2Ольга10-06-2013 13:44
Здравствуйте, Максим!
Скажите, пожалуйста, счетчик просмотров обязательно устанавливать в самом верху страницы, да еще и повередине?
Когда открывается запись (текст с картинками) в блоге, она бросется в глаза в первую очередь!
Психика современного человека устроена так, что он смотрит в первую очередь на ПОПУЛЯРНОСТЬ статьи, а не на ее качество и информативность! И видя, что (пока!) просмотров не очень много, он уже (еще не читая ее!) составляет о ней свое мнение.
Вам, как программистам, такие тонкости не страшны. А для моего блога это очень важно!
Есть функция - только отключить счетчик. А есть ли функция "видеть количество просмотров только создателям блога"? Она очень нужна - пусть посетители не видят популярность, а смотрят картинки, и читают текст! Ведь это - главное в блоге!
Очень прошу ввести скрытый счетчик. Скажите, может, есть платная функция на Вашем замечательном сайте?
Спасибо!
3Аноним10-06-2013 16:02
Непонятно... О каком счетчике вообще идет речь?