在 Blogger 中浏览相同标签下的下一篇和上一篇文章
Navigating Next And Prev Posts Under Same Labels in Blogger
首先我希望你阅读
Next and Prev Buttons for Blogger Theme
明白我想要什么概念了吗?那么让我们继续我的问题:
现在我有了已经嵌入到下一个和上一个按钮主题的代码,它们是:
<nav class='op-pagi'>
<a class='blog-pager-older-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + "_blog-pager-older-link"' expr:title='data:olderPageTitle'><i class='fa fa-angle-left'/> Prev</a>
<a class='blog-pager-newer-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + "_blog-pager-newer-link"' expr:title='data:newerPageTitle'> Next <i class='fa fa-angle-right'/></a>
</nav>
并使用我之前问过的问题,例如:
和
我自己做了一个代码:
<script>
//<![CDATA[
<b:if cond='data:blog.searchLabel'>
var URLArray = <b:eval expr='data:posts map (post => post.url)'/>;
var TitleArray = <b:eval expr='data:posts map (post => post.title)'/>;
var cURL = "<data:post.url/>";
var gTitle = "<data:post.title>";
function IndexFinder(element,index) {
return element == cURL
}
function IndexFinderT(element,index){
return element == gTitle;
}
var sU = URLArray.findIndex(IndexFinder);
var sT = TitleArray.findIndex(IndexFinderT);
function prevURL(){
var prevU=URLArray[sU-1];
return prevU;
}
function prevTitle(){
var prevT=TitleArray[sT-1];
return prevT;
}
function nextURL(){
var nextU=URLArray[sU+1];
return nextU;
}
function nextTitle(){
var nextT=TitleArray[sT+1];
return nextT;
}
</b:if>
//]]>
</script>
现在我尝试通过将 expr:href='data:olderPageUrl'
更改为 expr:href='prevURL()'
来使用我首先显示的下一个和上一个按钮的代码
标题也一样
expr:title='data:olderPageTitle'
到expr:title='prevTitle()'
但没有用。
你能告诉我哪里出错了以及如何解决吗?
注意: 我使用 CDATA 标签没有特别的原因,只是把它放在那里认为它可能在某种程度上有所帮助。即使在 google 上搜索,我也不明白它的确切用法。如果它导致任何问题,请提及它。
使用 CDATA 阻止博主 XML 解析器解释像 <b:if cond='data:blog.searchLabel'>
这样的数据标签
从代码中删除 //<![CDATA[
和 //]]>
或在 blogger 标签之后使用它们:
<script>
<b:if cond='data:blog.searchLabel'>
var URLArray = <b:eval expr='data:posts map (post => post.url)'/>;
var TitleArray = <b:eval expr='data:posts map (post => post.title)'/>;
var cURL = "<data:post.url/>";
var gTitle = "<data:post.title>";
//<![CDATA[
function IndexFinder(element,index) {
return element == cURL
}
function IndexFinderT(element,index){
return element == gTitle;
}
var sU = URLArray.findIndex(IndexFinder);
var sT = TitleArray.findIndex(IndexFinderT);
function prevURL(){
var prevU=URLArray[sU-1];
return prevU;
}
function prevTitle(){
var prevT=TitleArray[sT-1];
return prevT;
}
function nextURL(){
var nextU=URLArray[sU+1];
return nextU;
}
function nextTitle(){
var nextT=TitleArray[sT+1];
return nextT;
}
//]]>
</b:if>
</script>
由于 prevURL()
和 prevTitle()
都是 JavaScript 函数而不是 Blogger 数据标签,因此您不需要在属性前面使用 expr
。
您将需要按如下方式修改函数 -
function prevURL(){
var prevU=URLArray[sU-1];
document.querySelector('.blog-pager-older-link').href = prevU;
}
function prevTitle(){
var prevT=TitleArray[sT-1];
document.querySelector('.blog-pager-older-link').title = prevT;
}
下一页链接也类似。无需更改页面的HTML。
也如 Bassam 在另一个答案中提到的。不要将 JavaScript 包装在 CDATA
指令中,否则,Blogger 使用的 XML 解析器将完全忽略脚本块并且不会评估任何数据标记
您可以将此代码粘贴到发布小部件中
<b:includable id='pager_chapter' var='type'>
<b:if expr:cond='data:post.labels any (l => l.name != data:type.name)'>
<script type='text/javascript'>var selectchap = false;</script>
</b:if>
<b:if expr:cond='data:post.labels any (l => l.name == data:type.name)'>
<script type='text/javascript'>var selectchap = true;</script>
</b:if>
<b:loop index='i' values='data:post.labels' var='label'>
<b:if cond='data:i == 0'>
<div class='pager-js rounded' id='pager-js'>
<div class='_prev' id='prevjs'><a class='pager-js-nolink'><span class='material-icons' style='font-size:2.5rem;'>chevron_left</span></a></div>
<div class='_index' id='indexjs'><a class='pager-js-nolink'><span class='material-icons' style='font-size:2.5rem;'>list</span></a></div>
<div class='_next' id='nextjs'><a class='pager-js-nolink'><span class='material-icons' style='font-size:2.5rem;'>chevron_right</span></a></div>
</div>
<script type='text/javascript'>
var postPrev = "<span class='material-icons' style='font-size:2.5rem;'>chevron_left</span>";
var postNext = "<span class='material-icons' style='font-size:2.5rem;'>chevron_right</span>";
var postIndex = "<span class='material-icons' style='font-size:2.5rem;'>list</span>";
var postID = <data:post.id/>;
/*<![CDATA[*/
if(selectchap==false){
var yktocs=function(data){
var i=0;
for(;
i<data.feed.entry.length;
i++){
var j=0;
for(;
j<data.feed.entry[i].link.length;
j++){
if("alternate"==data.feed.entry[i].link[j].rel){
var entityUrl=data.feed.entry[i].link[j].href;
break
}
}
document.getElementById("indexjs").innerHTML="<a href='"+entityUrl+"' title='Index Novel'>"+postIndex+"</a>"
}
};
var ykpager=function(data){
var node={
postlist:[]
};
var i=0;
for(;
i<data.feed.entry.length;
i++){
var j=0;
for(;
j<data.feed.entry[i].link.length;
j++){
if("alternate"==data.feed.entry[i].link[j].rel){
var murl=data.feed.entry[i].link[j].href;
break
}
}
var videoId=data.feed.entry[i].id.$t;
var CAPTURE_ID=videoId.substr(51,19);node.postlist.push({
url:murl,id:CAPTURE_ID
})
}var v=node.postlist.findIndex((timeline_mode)=>{
return timeline_mode.id==postID
});
var id=v+1;
var cbs=node.postlist[id];
if(null!=cbs){var g=Object.values(cbs)[0];
var lnkDiv=document.getElementById("prevjs");
lnkDiv.innerHTML="<a href='"+g+"' title='Chapter Sebelumnya'>"+postPrev+"</a>"
}
var q=v-1;
var val=node.postlist[q];
if(null!=val){
var k=Object.values(val)[0];
lnkDiv=document.getElementById("nextjs");
lnkDiv.innerHTML="<a href='"+k+"' title='Chapter Selanjutnya'>"+postNext+"</a>"
}
}
}
else{document.write("<style>.pager-js{display:none;}</style>")
};
/*]]>*/
</script>
<script defer='defer' expr:src='"/feeds/posts/summary/-/" + data:label.name + "?alt=json-in-script&callback=ykpager&max-results=99999999"' type='text/javascript'/>
<script defer='defer' expr:src='"/feeds/posts/summary/-/" + data:type.name + "/" + data:label.name + "?orderby=published&alt=json-in-script&callback=yktocs&max-results=1"' type='text/javascript'/>
</b:if>
</b:loop>
</b:includable>
并在 <data:post.body/>
之后粘贴代码
<b:include data='{name : "Novel"}' name='pager_chapter'/>
您可以阅读完整教程How To Make Next and Prev Button By Label on Blogger
首先我希望你阅读
Next and Prev Buttons for Blogger Theme
明白我想要什么概念了吗?那么让我们继续我的问题:
现在我有了已经嵌入到下一个和上一个按钮主题的代码,它们是:
<nav class='op-pagi'>
<a class='blog-pager-older-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + "_blog-pager-older-link"' expr:title='data:olderPageTitle'><i class='fa fa-angle-left'/> Prev</a>
<a class='blog-pager-newer-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + "_blog-pager-newer-link"' expr:title='data:newerPageTitle'> Next <i class='fa fa-angle-right'/></a>
</nav>
并使用我之前问过的问题,例如:
我自己做了一个代码:
<script>
//<![CDATA[
<b:if cond='data:blog.searchLabel'>
var URLArray = <b:eval expr='data:posts map (post => post.url)'/>;
var TitleArray = <b:eval expr='data:posts map (post => post.title)'/>;
var cURL = "<data:post.url/>";
var gTitle = "<data:post.title>";
function IndexFinder(element,index) {
return element == cURL
}
function IndexFinderT(element,index){
return element == gTitle;
}
var sU = URLArray.findIndex(IndexFinder);
var sT = TitleArray.findIndex(IndexFinderT);
function prevURL(){
var prevU=URLArray[sU-1];
return prevU;
}
function prevTitle(){
var prevT=TitleArray[sT-1];
return prevT;
}
function nextURL(){
var nextU=URLArray[sU+1];
return nextU;
}
function nextTitle(){
var nextT=TitleArray[sT+1];
return nextT;
}
</b:if>
//]]>
</script>
现在我尝试通过将 expr:href='data:olderPageUrl'
更改为 expr:href='prevURL()'
来使用我首先显示的下一个和上一个按钮的代码
标题也一样
expr:title='data:olderPageTitle'
到expr:title='prevTitle()'
但没有用。
你能告诉我哪里出错了以及如何解决吗?
注意: 我使用 CDATA 标签没有特别的原因,只是把它放在那里认为它可能在某种程度上有所帮助。即使在 google 上搜索,我也不明白它的确切用法。如果它导致任何问题,请提及它。
使用 CDATA 阻止博主 XML 解析器解释像 <b:if cond='data:blog.searchLabel'>
从代码中删除 //<![CDATA[
和 //]]>
或在 blogger 标签之后使用它们:
<script>
<b:if cond='data:blog.searchLabel'>
var URLArray = <b:eval expr='data:posts map (post => post.url)'/>;
var TitleArray = <b:eval expr='data:posts map (post => post.title)'/>;
var cURL = "<data:post.url/>";
var gTitle = "<data:post.title>";
//<![CDATA[
function IndexFinder(element,index) {
return element == cURL
}
function IndexFinderT(element,index){
return element == gTitle;
}
var sU = URLArray.findIndex(IndexFinder);
var sT = TitleArray.findIndex(IndexFinderT);
function prevURL(){
var prevU=URLArray[sU-1];
return prevU;
}
function prevTitle(){
var prevT=TitleArray[sT-1];
return prevT;
}
function nextURL(){
var nextU=URLArray[sU+1];
return nextU;
}
function nextTitle(){
var nextT=TitleArray[sT+1];
return nextT;
}
//]]>
</b:if>
</script>
由于 prevURL()
和 prevTitle()
都是 JavaScript 函数而不是 Blogger 数据标签,因此您不需要在属性前面使用 expr
。
您将需要按如下方式修改函数 -
function prevURL(){
var prevU=URLArray[sU-1];
document.querySelector('.blog-pager-older-link').href = prevU;
}
function prevTitle(){
var prevT=TitleArray[sT-1];
document.querySelector('.blog-pager-older-link').title = prevT;
}
下一页链接也类似。无需更改页面的HTML。
也如 Bassam 在另一个答案中提到的。不要将 JavaScript 包装在 CDATA
指令中,否则,Blogger 使用的 XML 解析器将完全忽略脚本块并且不会评估任何数据标记
您可以将此代码粘贴到发布小部件中
<b:includable id='pager_chapter' var='type'>
<b:if expr:cond='data:post.labels any (l => l.name != data:type.name)'>
<script type='text/javascript'>var selectchap = false;</script>
</b:if>
<b:if expr:cond='data:post.labels any (l => l.name == data:type.name)'>
<script type='text/javascript'>var selectchap = true;</script>
</b:if>
<b:loop index='i' values='data:post.labels' var='label'>
<b:if cond='data:i == 0'>
<div class='pager-js rounded' id='pager-js'>
<div class='_prev' id='prevjs'><a class='pager-js-nolink'><span class='material-icons' style='font-size:2.5rem;'>chevron_left</span></a></div>
<div class='_index' id='indexjs'><a class='pager-js-nolink'><span class='material-icons' style='font-size:2.5rem;'>list</span></a></div>
<div class='_next' id='nextjs'><a class='pager-js-nolink'><span class='material-icons' style='font-size:2.5rem;'>chevron_right</span></a></div>
</div>
<script type='text/javascript'>
var postPrev = "<span class='material-icons' style='font-size:2.5rem;'>chevron_left</span>";
var postNext = "<span class='material-icons' style='font-size:2.5rem;'>chevron_right</span>";
var postIndex = "<span class='material-icons' style='font-size:2.5rem;'>list</span>";
var postID = <data:post.id/>;
/*<![CDATA[*/
if(selectchap==false){
var yktocs=function(data){
var i=0;
for(;
i<data.feed.entry.length;
i++){
var j=0;
for(;
j<data.feed.entry[i].link.length;
j++){
if("alternate"==data.feed.entry[i].link[j].rel){
var entityUrl=data.feed.entry[i].link[j].href;
break
}
}
document.getElementById("indexjs").innerHTML="<a href='"+entityUrl+"' title='Index Novel'>"+postIndex+"</a>"
}
};
var ykpager=function(data){
var node={
postlist:[]
};
var i=0;
for(;
i<data.feed.entry.length;
i++){
var j=0;
for(;
j<data.feed.entry[i].link.length;
j++){
if("alternate"==data.feed.entry[i].link[j].rel){
var murl=data.feed.entry[i].link[j].href;
break
}
}
var videoId=data.feed.entry[i].id.$t;
var CAPTURE_ID=videoId.substr(51,19);node.postlist.push({
url:murl,id:CAPTURE_ID
})
}var v=node.postlist.findIndex((timeline_mode)=>{
return timeline_mode.id==postID
});
var id=v+1;
var cbs=node.postlist[id];
if(null!=cbs){var g=Object.values(cbs)[0];
var lnkDiv=document.getElementById("prevjs");
lnkDiv.innerHTML="<a href='"+g+"' title='Chapter Sebelumnya'>"+postPrev+"</a>"
}
var q=v-1;
var val=node.postlist[q];
if(null!=val){
var k=Object.values(val)[0];
lnkDiv=document.getElementById("nextjs");
lnkDiv.innerHTML="<a href='"+k+"' title='Chapter Selanjutnya'>"+postNext+"</a>"
}
}
}
else{document.write("<style>.pager-js{display:none;}</style>")
};
/*]]>*/
</script>
<script defer='defer' expr:src='"/feeds/posts/summary/-/" + data:label.name + "?alt=json-in-script&callback=ykpager&max-results=99999999"' type='text/javascript'/>
<script defer='defer' expr:src='"/feeds/posts/summary/-/" + data:type.name + "/" + data:label.name + "?orderby=published&alt=json-in-script&callback=yktocs&max-results=1"' type='text/javascript'/>
</b:if>
</b:loop>
</b:includable>
并在 <data:post.body/>
<b:include data='{name : "Novel"}' name='pager_chapter'/>
您可以阅读完整教程How To Make Next and Prev Button By Label on Blogger