Иногда возникает задача отображать виджет не на каждой странице сайта, а на каких-то выбранных. Например с учетом типа данных (home, page, category и т.д.). «Классический вариант» перекладывает решение на сам виджет. Ну например для отображения только на страницах рубрик нужно вводить условие is_type('category').
Технически это все реализуется довольно несложно, но тогда мы напрямую зависим от разработчика виджета - предусмотрел ли он такую возможность.
Ну и к тому же есть еще один проблемный момент - это предопределенные условия. Например вряд ли разработчик будет думать о том, чтобы предусмотреть условие вроде такого: «отображать на главной (home) или на страницах рубрик (category), но только если рубрика не "news", а также на странице "about"». Такие условия значительно усложняют виджеты и я подумал, что двигаться в этом направлении бессмысленно.
Однако в MaxSite CMS всё-таки можно будет указывать чуть ли не произвольные условия для отображения условий. Для этого я разработал схему, при которой само условие для отображения можно указать в настройках сайдбара. Чтобы было понятно, приведу простой пример:
category_widget 1 is_type('page') or is_type('category')
В данном случае мы укажем, что виджет Рубрик (category_widget) первый (1) будет отображаться на любой странице одиночной записи (is_type('page')) или рубрики (is_type('category')).
Как вы поняли, условие - это не что иное, как php-код. Но этот код будет всегда возвращать 0 или 1. Если условие выполняется, то виджет отображается. Если нет - не отображается.
Можно комбинировать разные условия с помощью скобок. Главное требование, чтобы этот php-код выполнялся без ошибок.
Для тех, кто разбирается в PHP просто скажу, что данное условие «превратится» вот в такой PHP-код:
return ( is_type('page') or is_type('category') ) ? 1 : 0;
Для совсем сложных условий можно будет использовать новую функцию is_type_slug('тип', 'slug').
Наример, чтобы вывести сайдбар только на странице «about» достаточно будет написать:
category_widget 1 is_type_slug('page', 'about')
В данном примере is_type_slug вернет true для страницы «about» (id=2) не зависимо от того по какому адресу она вызвалась (т.н. синонимы): сайт/about, сайт/page/about, сайт/2, сайт/page/2.
Следующий пример позволяет вывести виджет в самой рубрике (где список страниц) и на каждой странице этой рубрики (используется функция is_page_cat).
text_block_widget 1 is_type_slug('category', 'news') or is_page_cat('news')
C учетом того, что в MaxSite CMS виджетов может быть сколько угодно, то новая возможность указать условие, позволяет выставить виджеты практически под любые задачи.
Комментариев: 5 RSS
1WaveСайт09-10-2008 00:10
А как выводить виджет только на страницах определённых рубрик или на страницах с определённым типом страниц?
Допустим, я хочу выводить на страницах одной рубрики виджет с одной галереей, а на страницах другой рубрики - другую галерею, любой другой виджет, что угодно.
В голову приходит только запрос к таблице page_type
where 'page_type_id'= id-текущей страницы.
Наверняка же можно проще поступить.
По типу страниц будет полезно и при создании шаблонов для своих типов страниц. А то в админке они предусмотрены, но в стандартных шаблонах я что-то не вижу никакой разницы между blog и static, чтобы по аналогии сделать свой тип.
2WaveСайт09-10-2008 00:17
Поясню.
is_type_slug('category', 'category-name') выводит виджет на /category/category-name/next/... но стоит зайти на любую страницу в этой простыне - и виджета уже нет. А мне нужно, чтоб был.
3Максим09-10-2008 08:16
Понял. Подумаю над этим.
4Hullios24-11-2008 10:59
И какое же решение было принято?
5WaveСайт24-11-2008 11:57
Hullios
is_page_cat
max-3000.com/page/funkcii-proverki-tipa-segmenta-i-td-is