Теги условных операторов в шаблонах Blogger (Blogspot)

Каждый кто хоть раз "ковырял" шаблон своего Blogger-блога, встречал в коде условные операторы if и else. По русски это будет как - если и иначе(по-другому), что в полной мере отображает суть их действия. То есть применяя данные операторы можно задавать условия для выполнения того или иного действия как во всем блоге, так на отдельных его страницах. Причем управлять можно практически любым элементом блога.
  В шаблоне Blogger они применяются в виде тегов b:if и b:else. В справке Google об этих тегах написано примерно следующие:
Вы можете использовать теги b:if и b:else для отображения определенного содержимого при выполнении условий. Основной вид записи:
<b:if cond='condition'>
    [содержимое будет показано если условие выполнено]
 <b:else/>
    [содержимое будет показано если условие не выполнено]
 </b:if>
Тег b:else не обязателен. В случае его отсутствия будет обработана секция b:if или ничего не произойдет. Однако, при использовании условий, обязателен закрывающий тег </b:if>.
Для условия "condition" можно использовать любые выражения которых истина (true) или ложь (false). Некоторые данные тегов сами по себе возвращают значения true/false, например allowComments (показать комментарии) для сообщений. Другие данные элементов можно сравнивать с определенными значениями, чтобы в результате получить true или false.
Вот несколько примеров:
<b:if cond='data:post.showBacklinks'> Истина, если для текущего сообщения установлено свойство «Показать обратные ссылки».
<b:if cond='data:blog.pageType == "item"'> Истина, если текущая страница - страница сообщения.
<b:if cond='data:displayname != "Fred"'> Истина, если имя автора отлично от Fred.
<b:if cond='data:post.numComments > 1'> Истина, если у текущего поста более одного комментария.
Источник

  Но не смотря на всю обширность возможностей использования данных тегов, среди большинства блоггеров самыми популярными и наиболее употребляемыми являются следующие варианты:
Элемент будет показан только на главной страницы
<b:if cond='data:blog.url == data:blog.homepageUrl'>
Элемент будет показан на всех страницах, кроме главной
<b:if cond='data:blog.url != data:blog.homepageUrl'>

Элемент будет показан только на страницах сообщений
<b:if cond='data:blog.pageType == "item"'>
Элемент будет виден только на страницах архива
<b:if cond='data:blog.pageType == "archive"'>
Элемент будет виден только на статичных страницах
<b:if cond='data:blog.pageType == "static_page"'>
Элемент будет виден только на главной и на страницах ярлыков
<b:if cond='data:blog.pageType == "index"'>
Элемент будет показан только на заданной странице
<b:if cond='data:blog.url == "http://адрес страницы"'>
Элемент будет показан только на странице ошибки 404 - "Страница не найдена"
<b:if cond='data:blog.pageType == "error_page"'>

Два первых примера показывают разницу между использованием в условии двух равенств: "==" - только для и знака восклицания с равенством: "!=" - всё кроме.

  Однако, использование условных тегов не ограничивается только постами и страницами, условия можно применять практически ко всем элементам шаблона - блокам, стилям, скриптам.
  Все теги данных для Blogger показаны на странице поддержки для Blogger

©http://magentawave.com

30 комментариев:

  1. А можно применить if-оператор для постов с определённым тегами. Например, по примерно такой схеме:

    if (lable == XXL-Posts )
    {
    hide.left_menu
    }

    Или этим можно влиять только на постоянные элементы, такие как статичные страницы, архив, главную страницу, и тп.?

    ОтветитьУдалить
    Ответы
    1. Вы хотите влиять на них с помощью JS? То что вам нужно можно сделать и стандартными методами Blogger используя теги данных, ссылка в конце статьи.

      Удалить
  2. извиняюсь, я не правильно выразился, я имел ввиду, можно ли скрыть боковое меню только в тех постах, которые опубликованы в определённой категории(lable), например, в категории "черчежи", где боковое меню нужно скрыть.

    Наверное, я это имел ввиду:

    Labels Widget
    The labels widget includes a list of all labels that are in use on the blog.

    title: The widget title.
    labels: The list of labels, each of which contains:
    name: The text of the label.
    count: How many posts have this label.
    url: A link to a page displaying posts with this label.

    попробуем....

    ОтветитьУдалить
    Ответы
    1. Вам надо "копать" не Labels Widget, а Blog Posts -> posts -> labels, так как Labels Widget - это данные из виджета "Ярлыки", а вам нужны данные о ярлыке поста.

      Удалить
    2. Да, спасибо, вроде бы нашёл решение:

      b:if cond='data:post.labels.name == "bigposts"'
      div class='fauxcolumn-outer fauxcolumn-right-outer'
      !--Содержимое правой колонки--
      /div
      /b:if

      Как протестирую, отпишу :)

      Удалить
    3. Применять можно связку только из двух параметров, там, вроде, нужно строить цепочку из условий. А вот как я пока не вникал.

      Удалить
    4. мда, окозалось немного сложней, чем я ожидал.
      b:if cond='data:label.name != "Sideblog"' - не прокатило, попробую задать вопрос на каком-нить форуме.

      даже мануал нашёл, как статьи с определённым тэгом выводить на главную страницу: http://www.bloggerbuster.com/2008/09/how-to-filter-posts-by-label-on-home.html но никак не могу применить для своего случая.

      Удалить
    5. Так и не будет, я же говорю - там ветки условий делать надо, как в том примере что вы нашли. И как понял, что нельзя взять один ярлык из общего списка, у неё, и не только, всегда есть условие что это последний ярлык из набора. Я просто в это так глубоко не вникал, но идея реализации такой муры может быть весьма интересной. Надо будет покурить на досуге.

      Так а сам гаджет получается сделать или тоже глухо?

      Удалить
    6. делать гаджет я даже не пробовал.
      Есть другое решение проблемы, мне оно проще, так в программировании я пока не силён, мозг сломается покая я это настрою ))))

      Что касатеся решения - можно скрывать сайдбар в зависимости от авторов поста, т.е когда мне надо будет скрыть сайдбар я просто буду постить другим автором :)

      Как будет время, запостю вопрос на англоязычном форуме. Вам случайно не знаком англоязычный форум или сообщество, где юзеры с опытом обитают?

      Удалить
    7. На счет форумов не знаю редко хожу по таким местам, только в очень крайних случаях. Но частенько ответы находил на http://stackoverflow.com , там по всей фигне вопросы постят и много толковых советов.
      Можно и на гугле, в группах поспрашать, может кто копал в этом направлении и достиг успеха.

      Удалить
  3. Спасибо, очень помогло:) Надо было только на страницах сообщений добавить элемент, а у меня стояло на всех, кроме главной. В итоге этот самый элемент вылазил, если через постраничную навигацию перейти к предыдущим сообщениям:)Плюсанула по всем социалкам:)

    ОтветитьУдалить
  4. Можете дополнить список страницей с 404 ошибкой (в справке её нет):
    b:if cond='data:blog.pageType == "error_page"'

    Спасибо за эту статью. Интересует такой момент: есть ли условие для поисковых запросов (т.е. если по запросу постов нет, то вывести определенную плашку) ?
    Подбором ничего подобного найти не смог.

    ОтветитьУдалить
    Ответы
    1. Да, спасибо что напомнили, недавно сам вспоминал и хотел добавить этот оператор :)

      Про поиск не совсем понял, речь идет о стандартном гаджете "Поиск" или о другом, добавочном? Но в любом случаи, я с таким пока не сталкивался, хотя при помощи JS думаю можно сделать все.

      Удалить
    2. О страницах вида: "/search/?q=поисковый+запрос"
      Было бы ещё лучше, если бы поиск можно было разграничить по постам/тегам.

      Удалить
    3. Хм, это похоже на обычную 404. Сверстайте такую страницу(код) самостоятельно, и добавьте не через админку (через админку не все можно добавлять что хочется), а прямо в код и выводите применяя оператор "error_page". Т.е. если по запросу страницы не будет, будет показано то что вы хотите. Можете посмотреть как это сделано у меня, я туда архив блога всенул, типа "Карта сайта" :)
      Зачем мудрить с запросами? :)

      Удалить
    4. Здравствуйте! Мучилась я мучилась, кое-как сделала страницу. Но не могу понять одной вещи. Как связать тэги к главным постам со страницами? Я понятно выразилась? Или пояснить? )

      Удалить
    5. Пояснить и желательно подробно с примерами.

      Удалить
    6. Ещё есть условие для страниц ярлыков, кстати.
      <b:if cond='data:blog.searchLabel == "label" '>

      Удалить
  5. Вот у меня блог http://shine-creation.blogspot.ru/. Есть меню горизонтальное с несколькими страницами. Я создаю сообщение, публикую запись, которая автоматически появляется на главной странице. Этой записи присваиваю тэги (labels), которые я хочу, чтобы связывались со страницами (там где сверху меню). Вот к примеру. Опубликовала работу, присвоила: watercolor, illustration. И чтобы при нажатии в верхнем меню кнопок Watercolor и Illustration запись эта дублировалась )

    ОтветитьУдалить
    Ответы
    1. Предложение кажется неоконченным... Где дублировалась? Чтобы отсортировать сообщения по ярлыкам(тегам) есть в Blogger специальный гаджет он так и называется - "Ярлыки" из него, не прилагая особых усилий можно сделать меню и даже горизонтальное.

      Думаю то что вы хотите сделать с помощью условных операторов не получится, у них немного другое назначение...

      Удалить
    2. Анонимный07.12.15, 13:39

      По поводу 404-й страницы. Как сделать, чтобы для архивов она тоже работала? Например, на Вашем блоге ошибочная страница архивов - http://www.magentawave.com/2005_02_01_archive.html , и карта сайта (или что-то иное ) не показывается, а порказывается стандартная надпись для Blogger.

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

      Удалить
    4. Анонимный08.12.15, 16:27

      Сообщения не добавлялись, а страница архивов есть. Или, наоборот - сообщения были добавлены в какой-то месяц, потом все сообщения были удалены, а страница архивов (теперь ненужная) осталась. Значит, это точно такая же ошибочная страница, и к ней должна применяться страница ошибок (404). Не согласны?

      Удалить
    5. Во-первых: я с вами не спорю, а говорю как есть.
      Во-вторых: по факту эта страница может и "ошибочная", но СУЩЕСТВУЮЩАЯ с ссылкой, которая на неё ведет, Собственно именно по этой причине и исключают из индексирования страницы архива Blogger.
      В свете такого диалога у меня к вам тоже возникает два вопроса:
      1 - Каким образом можно попасть на такую страницу (естественно если не вводить в адресную строку ссылку вручную)
      2 - Зачем держать в блоге ссылки на страницы, которые ведут в никуда? (это если на первый вопрос все-таки есть вразумительный ответ)

      Удалить
    6. Анонимный09.12.15, 0:31

      По умолчанию (изначально) страницы архивов НЕ исключаются из индексирования. Они индексируются ВСЕМИ поисковиками. А исключают их пользователи самостоятельно (и то, кто в курсе этого) через robots.txt.

      Уже объяснял - были сообщения за ноябрь, а автору они через какое-то время не понравились, поэтому он их удалил. А проиндексированная архивная страница за ноябрь осталась в выдаче поисковиков. Соответственно, линк с поисковиков и ведёт на пустую архивную страницу.

      И, вообще, вопрос у меня не глобальный, как и кто туда попадает, а чисто технический - чтобы на пустых архивных страницах тоже показывалась 404-я страница. Остальное неважно.

      Удалить
    7. 1. Я написал именно "исключают" (т.е. пользователи)
      2. Все верно: сообщений нет - страница осталась, поэтому и показывается
      3. JavaScript

      Удалить
    8. Так напишите тут этот скрипт, если знаете. Я для этого и спрашиваю. Может ещё кому пригодится, как и мне.

      Удалить
    9. Широкой, да и какой-либо другой, необходимости в нем я лично не вижу, поэтому смысла в его написании для меня тоже нет. Если заняться не чем будет, может быть напишу.

      Удалить
  6. Подскажите, пожалуйста, можно ли этим способом скрыть некоторые сообщения с определенным ярлыком? То есть чтобы ряд постов не отображался в общей ленте блога, а был доступен только по определенной ссылке - ссылке на их ярлык.
    Я правильно понимаю, что это и есть "виден только на страницах архива"? Тогда нужно использовать b:if cond='data:blog.pageType == "archive"' , правильно? Или можно создать условие, чтобы эти сообщения отображались только на странице своего ярлыка (но отсутствовали на главной)?
    Какое условие нужно писать для этих страниц: общее по объединяющему их тегу или отдельное условие для каждой страницы? Если для каждой, то что использовать id страниц или их url?
    Уже замучилась искать решение для своей задачи, надеюсь, что вы поможете мне разобраться. Мне нужно чтобы несколько сообщений открывались только на специальной странице "Мой магазин", а общую ленту не засоряли...

    ОтветитьУдалить
    Ответы
    1. Решение вашего вопроса есть, вам сюда:
      http://www.magentawave.com/2012/10/hide-elements-from-some-pages.html
      В конце статьи добавлена нужная вам информация, удачи.

      Удалить

Следующее Предыдущее

BestProject