MaxHub
Служба Заботы MaxSite CMS

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

Вопросы-ответы / 19 ноября 2015

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

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

Спасибо.

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

    Допустим, если речь идёт об установке разных картинок в фон и воздействие должно быть оказано на тег 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.

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

    Да. спс smile

  3. Работает =) Пример

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

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

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

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

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

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

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

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

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

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Вход / регистрация или войти без комментирования
  Имя и сайт используются только при регистрации

Авторизация MaxSiteAuth. Войти через loginza

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