суббота, 27 августа 2011 г.

Как скрыть виджеты "Постоянные читатели" и "Архив блога" на определённых страницах

Иногда необходимо, чтобы некоторые виджеты отображались только на определённых страница (или на страницах определённого типа).

Это можно легко сделать с помощью тега b:if следующим образом (открываем Дизайн -> Изменить HTML (отметить 'Расширить шаблоны виджета')):

<b:widget id='HTML5' locked='false' title='Искать на блоге' type='HTML'>
<!-- отображать виджет только на главной странице -->
<b:if cond='data:blog.pageType == "index"'>
 <b:includable id='main'>
   <!-- only display title if it's non-empty -->
   <b:if cond='data:title != ""'>
     <strong class='title'><data:title/></strong>
   </b:if>
   <div class='widget-content'>
     <data:content/>
   </div>
   <b:include name='quickedit'/>
 </b:includable>
</b:if>
<!-- закрываем тег -->
</b:widget>

Однако такой трюк не проходит с такими виджетами как Постоянные читатели (Followers) и Архив блога (Blog Archive). При сохранении шаблона изменения, сделанные внутри этих виджетов, исчезают по непонятным причинам!

Опишу решение для новых шаблонов blogger. За основу взята эта статья. Задача - показывать виджет Постоянные читатели только на главной странице.

Открываем Дизайн -> Изменить HTML (НЕ отмечать 'Расширить шаблоны виджета') и находим следующий код (в случае, если виджет расположен в правой колонке ищем div с классом column-right-inner):

<div class='column-left-inner'>
  <aside>
    <macro:include id='main-column-left-sections' name='sections'>
      <macro:param default='0' name='num' value='1'/>
      <macro:param default='sidebar-left' name='idPrefix'/>
      <macro:param default='sidebar' name='class'/>
      <macro:param default='true' name='includeBottom'/>
    </macro:include>
    <!-- сюда добавим кое-что -->
  </aside>
</div>

И добавляем следующий код:

<b:if cond='data:blog.pageType == &quot;index&quot;'>
  <macro:include id='main-column-left-sections2' name='sections'>
    <macro:param default='0' name='num' value='1'/>
    <macro:param default='sidebar-left2' name='idPrefix'/>
    <macro:param default='sidebar' name='class'/>
    <macro:param default='true' name='includeBottom'/>
  </macro:include>
</b:if>

Сохраняем шаблон и прокручиваем до конца исходного кода. После секции <b:section-contents id='sidebar-left-1'></b:section-contents> должна появиться секция <b:section-contents id='sidebar-left2-1' />. Перемещаем <b:widget id='Followers1' locked='false' title='Участники' type='Followers'/> из первой секции во вторую. Должно получиться примерно следующее:

<b:section-contents id='sidebar-left2-1'>
  <b:widget id='Followers1' locked='false' title='Участники' type='Followers'/>
</b:section-contents>

Минусом данного решения является то, что скрываемый виджет должен находиться либо в начале списка виджетов, либо в конце. Но если очень хочется, то можно создать ещё одну секцию <macro:include id='main-column-left-sections3' name='sections'> и переместить в неё виджеты которые должны идти после скрываемого виджета.

1 комментарий