如何检测在Tumblr上单个帖子/页面?

4

我还没有找到一种方法来检测用户当前是否正在查看页面、文章或整个文章列表。WordPress有像is_page、is_single等函数可以实现,但是Tumblr有没有类似的方法呢?目前我正在使用以下代码进行hack:

$(function() {
    var uri_root = 'http://' + window.location.hostname + '/';
    var uri = window.location.href;
    if(uri_root !== uri){
        alert("Viewing a single POST or PAGE!");
    }
});

我在想这是否是最佳的做法,还是有其他选择?

3个回答

30

我已经找到了一个更适合的解决方案。根据Tumblr的文档:

{block:IndexPage} {/block:IndexPage} 仅在首页(post页面)上呈现。

{block:PermalinkPage} {/block:PermalinkPage} 仅在单个帖子链接页面上呈现。

所以基本上,被IndexPage块包含的代码只会在能够显示多个帖子的页面上运行,无论是文本、照片、视频等帖子。

PermalinkPage块中的代码只会在单个帖子永久链接页面上运行。


我尝试了这个解决方案,很好用,谢谢老兄!给你点赞+1! - Sal Prima
1
这个解决方案确实比JS解决方案更加适当。 - halloleo
检测 Ask 页面怎么样?有相应的代码块吗?我在我的页面上嵌入了一个 Ask Box 的 iframe,但我只想在用户导航到 Ask 页面时显示它。目前它会同时出现在 Ask 和 Permalink 页面上。 - Owzzz
@Owzzz 对于那些静态页面,没有一个特定的代码块。但是{block:Date}{/block:Date}只会在单个帖子页面显示内容,这意味着你可以在两者之间进行半排序。至于将提问框嵌入到提问页面中,这是不必要的,因为Tumblr已经为你生成了一个带有提问框的提问页面。 - chloe784

0
每篇文章都有一个类名为post的div。因此,计算具有post类的div数量。
类似这样:$('div.post').lengthdocument.getElementsByClassName('post')(如果没有jQuery)。

0
为了检测当前页面是“页面”还是“文章”,我创建了这个脚本,对我来说效果很好。
{block:PermalinkPage} 
  var page = {JSPostID};
  if(page == '') alert('Page!');
  else alert('Post');
{/block:PermalinkPage}

或者使用最简单的函数

function isPage(){
    {block:PermalinkPage} if({JSPostID} == '') return true; {/block:PermalinkPage}
    return false;
}
function isPost(){
    {block:PermalinkPage} if({JSPostID} != '') return true; {/block:PermalinkPage}
    return false;
}

请问您可以详细说明一下 {JSPostID} 变量吗? - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接