为第一个索引页添加一个特殊的 class
Add a special class for the first index page
我想为索引为 pageType
的第一页添加 index--first
class。这可以是不仅是主页(在这种情况下它是一个简单的测试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
class,为所有也是标签页的索引页添加一个 index--label
class 和一个 index--query
class 对于所有也是搜索查询结果的索引页。
我仍然需要以某种方式捕获 URL 中不包含 updated-max
的 index
类型的页面,然后添加 index--first
class就可以了。
这不起作用,我收到 "invalid expression" 错误:
<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 。
您不能在 Blogger 数据表达式中直接使用像 indexOf
这样的 JavaScript 方法,因为它们是两种不同的语言并且 运行 在不同的方面。
你可以这样做
<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>
这应该有效
<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>
你可以这样做
<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>
我想为索引为 pageType
的第一页添加 index--first
class。这可以是不仅是主页(在这种情况下它是一个简单的测试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
class,为所有也是标签页的索引页添加一个 index--label
class 和一个 index--query
class 对于所有也是搜索查询结果的索引页。
我仍然需要以某种方式捕获 URL 中不包含 updated-max
的 index
类型的页面,然后添加 index--first
class就可以了。
这不起作用,我收到 "invalid expression" 错误:
<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 。
您不能在 Blogger 数据表达式中直接使用像 indexOf
这样的 JavaScript 方法,因为它们是两种不同的语言并且 运行 在不同的方面。
你可以这样做
<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>
这应该有效
<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>
你可以这样做
<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>