Добавьте специальный класс для первой страницы индекса - PullRequest
1 голос
/ 08 мая 2020

Я хочу добавить класс index--first для первой страницы с индексом pageType. Это может быть , а не только домашняя страница (в этом случае это будет простой тест data:blog.url == data:blog.homepageUrl), но и первая страница, полученная в результате поиска по ключевым словам или первая страница ярлыка.

На данный момент у меня есть следующий код (который отлично работает):

<body expr:class='(data:blog.pageType) + (data:blog.searchLabel ? " index--label" : "") + (data:blog.searchQuery ? " index--query" : "")'>
  <!-- more stuff here -->
</body>

Это добавляет класс index для всех страниц индекса, класс index--label для всех страниц индекса, которые также являются страницами меток, и класс index--query для всех страниц индекса, которые также являются результатами поискового запроса.

Что мне еще нужно, так это как-то поймать страницу типа index, которая не содержит updated-max в URL-адресе, и добавить к ней класс index--first.

Это не работает, я получаю сообщение об ошибке «недопустимое выражение»:

<body expr:class='(data:blog.pageType == "index" ? ("index" + (data:blog.url.indexOf("updated-max") != -1 ? " index--home" : "")) : "") + (data:blog.searchLabel ? " index--label" : "") + (data:blog.searchQuery ? " index--query" : "")'>
</body>

Итак, как это правильно сделать?

Я не ищу решение JavaScript, использование indexOf() было просто безумным предположением с моей стороны (к сожалению, это мое лучшее предположение, поскольку ресурсы Blogger ограничены), а не попыткой использовать здесь JavaScript.

Ответы [ 3 ]

1 голос
/ 09 мая 2020

Это должно работать

<body expr:class='data:blog.pageType'>
  <b:class cond='data:view.search.label' name='index--label'/>
  <b:class cond='data:view.search.query' name='index--query'/>
  <b:class cond='data:view.isMultipleItems and (data:view.url not contains "updated-max=")' name='index--first'/>

  <!-- more stuff here -->
</body>
1 голос
/ 09 мая 2020

Можно так

<body>
  <b:class cond='data:view.isHomepage' name='index--first'/>
  <b:class cond='data:view.isPost' name='index--first'/>
  <b:class cond='data:view.isPage' name='index--first'/>
  <b:class cond='data:view.isArchive' name='index--first'/>
  <b:class cond='data:view.search.label' name='index--label'/>
  <b:class cond='data:view.search.query' name='index--query'/>

</body>
0 голосов
/ 08 мая 2020

Вы не можете использовать метод JavaScript, такой как indexOf, непосредственно в выражении данных Blogger, поскольку это два разных языка и работают с разных сторон.

Вы можете сделать это

<b:if cond='data:blog.pageType == "index"'>
   <script>
      var blogUrl = '<data:blog.url/>';
      var cls = 'index--home';

      <b:if cond='data:blog.searchLabel'>
          cls = 'index--label';
      </b:if>
      <b:if cond='data:blog.searchQuery'>
          cls = 'index--query';
      </b:if>

      if (blogUrl.indexOf("search?updated-max") == -1) {
          document.body.classList.add(cls);
      }
   </script>
</b:if>
...