Современная, быстрая и удобная система управления сайтом

Условия отображения виджета

Центр помощиКомментарии: 5Просмотров: 32992

Иногда возникает задача отображать виджет не на каждой странице сайта, а на каких-то выбранных. Например с учетом типа данных (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/... но стоит зайти на любую страницу в этой простыне - и виджета уже нет. А мне нужно, чтоб был.

4Hullios24-11-2008 10:59

И какое же решение было принято?