MaxSite.org 11 лет
Блог вебмастера о сайтостроении
Внимание! Данная запись отмечена как устаревшая и может содержать неточную или неактуальную информацию!

Наборы компонентов для любой записи

MaxSite CMS / Общие вопросыПросмотров: 15554 (308)

Иногда стоит задача менять наборы компонентов шапки и подвала на разных страницах сайта. Например на какой-то странице выводить только верхнее меню, а на другой вовсе исключить вывод компонентов. Формально для таких вещей делается 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 20:00

Спасибо за статью: очень полезная.

Как окажусь у настольного компьютера, внедрю в свой шаблон.

2Ольга10-06-2013 14:44

Здравствуйте, Максим!

Скажите, пожалуйста, счетчик просмотров обязательно устанавливать в самом верху страницы, да еще и повередине?

Когда открывается запись (текст с картинками) в блоге, она бросется в глаза в первую очередь!

Психика современного человека устроена так, что он смотрит в первую очередь на ПОПУЛЯРНОСТЬ статьи, а не на ее качество и информативность! И видя, что (пока!) просмотров не очень много, он уже (еще не читая ее!) составляет о ней свое мнение.

Вам, как программистам, такие тонкости не страшны. А для моего блога это очень важно!

Есть функция - только отключить счетчик. А есть ли функция "видеть количество просмотров только создателям блога"? Она очень нужна - пусть посетители не видят популярность, а смотрят картинки, и читают текст! Ведь это - главное в блоге!

Очень прошу ввести скрытый счетчик. Скажите, может, есть платная функция на Вашем замечательном сайте?

Спасибо!

3MAX10-06-2013 17:02

Непонятно... О каком счетчике вообще идет речь?

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

Комментарий будет опубликован после проверки. Вы соглашаетесь с правилами сайта.

(обязательно)

О сайте

Здесь вы получите самую полную информацию о создании сайтов на MaxSite CMS.