Как сделать свой фон для каждой категории/рубрики?

/ Просмотров: 2974
Как сделать свой фон для каждой категории/рубрики?

Как сделать свой фон для каждой категории/рубрики?

Доброго времени суток. Что-то меня "осенило", а есть возможность сделать свой фон для каждой категории на сайте? И как можно это сделать? Шаблон стандартный, который шёл по умолчанию в 0.863.

Спасибо.

Комментариев: 7 RSS

Сергей, уточни - «сделать свой фон» - это имеется в виду поставить картинку в фон?

Допустим, если речь идёт об установке разных картинок в фон и воздействие должно быть оказано на тег body (в общем случае задача может быть иначе поставлена и фон нужно менять у какого-то другого блока, но тогда и решение будет немного иначе выглядеть).

Тогда нам нужно открыть файл \application\maxsite\templates\default\main\main.php и увидеть такой код:

<body<?= (mso_get_val('body_class')) ? ' class="' . mso_get_val('body_class') . '"' : ''; ?>>

Он означает, что если моменту его исполнения будет задана переменная body_class, то её значение будет прописано в качестве css-класса. Т.е. если мы создадим несколько классов с разными фонами, то задача сведётся к тому как и где установить значение переменной body_class?

Само по себе значение задаётся функцией mso_set_val(переменная, значение). Т.е. нам остаётся только понять где эту функцию вызвать.

Если мы хотим менять фон только на страницах рубрик, то логично было бы начать поиск с \application\maxsite\shared\type\category\category.php (в default-шаблоне по-умолчанию используется этот type-файл для отображения страниц рубрик), но это только на первый взгляд. Если поискать, то можно увидеть более логичное место для таких действий - \application\maxsite\templates\default\custom\my_functions.php. Это файл как раз и предназначен для хранения ваших функций и установки значений глобальных (для шаблона) переменных. Его прелесть в контексте нашей задачи ещё и в том, что этот файл выполняется для всех страниц сайта, т.е. в перспективе, можно здесь же порешать вопрос с фонами остальных типов страниц, а не только рубрик.

Итак, с местом определились и осталось понять каким кодом это можно сделать. Вариантов много, для примера приведу самый простой. Допустим у нас есть три рубрики со slug-ами - articles, news и media. Тогда можно написать такой код:

if( is_type('category') )
{
 mso_set_val('body_class', 'category '.mso_segment(2));
}

Поясню. Во-первых, мы делаем проверку - открываемая страница имеет тип category. Во-вторых, устанавливаем значение переменной body_class равной строке из двух классов - category и mso_segment(2). Т.к. функция mso_segment(2) возвращает значение второго сегмента поступившего запроса (для категорий стандартные запросы выглядят как /category/slug), то это будет одно из слов - articles, news и media. Тогда нам останется только прописать настройки css классов:

.category.articles { background:... }
.category.news { background:... }
.category.media { background:... }

В целом, должно работать. Единственно, что могу ещё добавить так это то, что если использовать функцию mso_segment, то при внедрении плагина ЧПУ возможно потребуется подкорректировать код, чтобы он опирался в расчётах на правильный сегмент.

Чтобы изменять фон не с помощью тега body, а через свойства какого-то другого блока, нужны будут примерно те же действия, только вам нужно будет для вашего блока самому прописать примерно такой код:

<div<?= (mso_get_val('my_div_class')) ? ' class="' . mso_get_val('my_div_class') . '"' : ''; ?>>

И, соответственно, устанавливать значение переменной my_div_class, а не body_class.

Сергей, уточни - «сделать свой фон» - это имеется в виду поставить картинку в фоном

Да. спс smile

А если воспользоваться уже готовым решением? В папке css/profiles, где находятся файлы theme-red.css, theme-black.css и так далее, создаём файлы category_name1.css, category_name2.css, category_name3.css, category_name4.css по числу рубрик, в которых прописываем соответствующие css-стили. Затем, при редактировании статьи во вкладке "Дополнительные поля" выбираем "Профиль оформления" где указываем для статьи соответствующий профиль. Правда, такой способ не будет работать на странице вывода статей по указанной рубрике.

А если воспользоваться уже готовым решением? В папке css/profiles, где находятся файлы theme-red.css, theme-black.css и так далее, создаём файлы category_name1.css, category_name2.css, category_name3.css, category_name4.css по числу рубрик, в которых прописываем соответствующие css-стили. Затем, при редактировании статьи во вкладке "Дополнительные поля" выбираем "Профиль оформления" где указываем для статьи соответствующий профиль. Правда, такой способ не будет работать на странице вывода статей по указанной рубрике.

И как описал способ Илья в полной новости, тоже не подхватывается фон.

Немного по тестировал, мелькает в глазах, а это не очень хорошо, только если похожие фоны стоят, только например с разными иконками. Просто как вариант tongue wink

И как описал способ Илья в полной новости, тоже не подхватывается фон.
Немного по тестировал, мелькает в глазах, а это не очень хорошо, только если похожие фоны стоят,

Я так и не понял, так получилось или нет сделать по моему методу? А то в одном предложении вроде не подхватывается, а в другом уже "мелькает в глазах" grin

Я так и не понял, так получилось или нет сделать по моему методу? А то в одном предложении вроде не подхватывается, а в другом уже "мелькает в глазах" grin

http://sovlife.ru/category/gotovim-doma