【问题标题】:Get tumblr photo post content via API but arrange it differently for photoset posts通过 API 获取 tumblr 照片帖子内容,但对于照片集帖子的排列方式不同
【发布时间】:2015-05-27 12:37:12
【问题描述】:

我有一些代码当前循环浏览博客上的帖子,并将它们作为列表项内的图像输出为带有链接和标题文本(如果存在)的图像。这很好用,但是当我运行代码并且有照片集帖子时,每个图像和标题都会按照照片博客帖子循环。

(因此,如果照片集中有 10 张图像和 1 个标题,则每个图像和标题都会输出 10 次)。

这是我的原始代码:

// get tumblr posts and embed them. 
var postContent     = $('#tumblr-posts');
var getPosts = {};
getPosts.get = function(){
    var offSet = href * 10;
    $.ajax({
        url:"http://api.tumblr.com/v2/blog/jessicaharby.tumblr.com/posts?limit=11",
        dataType: 'jsonp',
        data: {
            api_key: _site._apiKey,
            tag: 'news',
            offset: offSet
        },
        success: function(results){
            var i = 0;
            while (i < results.response.posts.length) {
                var type = results.response.posts[i].type;
                var photoset = results.response.posts[i].photoset_layout;
                if (type == "photo") {
                    var photos = results.response.posts[i].photos;
                    var linkURL = results.response.posts[i].post_url;
                    var caption = results.response.posts[i].caption;
                    for (var j = 0; j < photos.length; j++) {
                        var imgURL;
                        if (photos[j].alt_sizes[1]) {
                            imgURL = photos[j].alt_sizes[1].url
                        }else{
                            continue;
                        }
                        postContent.append("<li><img src=" + imgURL + " /><p>" + caption + "</p></li>");
                    }
                i++;
            }
            console.log(results.response);
            postContent.find('a').attr('target','_blank');
        }
    });
}

getPosts.get();

我一直在尝试编写一个 else if 语句来捕获照片集的帖子。它需要改进,但看起来像这样:

else if(photoset != null) {
    for (var k = 0; k < photos.length; k++) {
        var imgURL;
        if (photos[k].alt_sizes[1]) {
            imgURL = photos[k].alt_sizes[1].url
        }else{
            continue;
        }
        postContent.append("<li><img src=" + imgURL + " /></li>");
    }
    postContent.append("<li><p>" + caption + "</p></li>");
 }else{
    console.log('some error')   
}

所以它应该在帖子底部吐出所有图像和一个标题(所以我想我需要将这些都放在一个列表项中)。我只是不是 100% 确定如何完成循环。

另一个问题是,如果我编写一个 if/else 如果我认为我当前的代码第一个 if 为真,那么帖子可能会重复,或者 else if 可能会被忽略。

我有两个可以试验/分叉等的小提琴;

1) http://jsfiddle.net/lharby/bLveggwk/1/ 循环浏览所有帖子

2) http://jsfiddle.net/lharby/bLveggwk/3/ 只循环浏览照片集的帖子。

很抱歉,这不是最简洁的问题。如果我不清楚,如果有帮助,我可以画一幅画!

编辑

决定做图:

【问题讨论】:

  • 澄清一下,您想在一个帖子中输出照片集中的所有照片,然后是标题?
  • 是的,照片帖子应被视为正常。抱歉,如果不是很清楚@mikedidthis。
  • @mikedidthis 毕竟我最终制作了一张图片(希望每个白色块都应该是一个 LI。i.imgur.com/OqLu3nd.png

标签: javascript jquery ajax loops tumblr


【解决方案1】:

我不确定我是否很好地理解了这个问题,顺便说一句,这个解决方案 http://jsfiddle.net/1bLrocj1/ 有效吗?

重要部分:

var set = [];
while (i < results.response.posts.length) {
    var type = results.response.posts[i].type;
    var photoset = results.response.posts[i].photoset_layout;
    if (photoset != null) {
        var photos = results.response.posts[i].photos;
        var linkURL = results.response.posts[i].post_url;
        var caption = results.response.posts[i].caption;
        for (var j = 0; j < photos.length; j++) {
            var imgURL;
            if (photos[j].alt_sizes[1]) {
                imgURL = photos[j].alt_sizes[1].url
            } else {
                continue;
            }
            set.push("<li><img src=" + imgURL + " /></li>");
        }
        if (caption) {
            set.push("<li><p>" + caption + "</p></li>");
            var subUl = document.createElement("ul");
            for (var k = 0; k < set.length; k++) {
                $(subUl).append(set[k]);
            }
            postContent.append(subUl);
            set.length = 0;
        }
    } else {
        console.log('some error')
    }
    i++;
}

css:

ul li {
    padding:20px;
    float:left;
    max-width:550px;
    background:#FFF;
}

ul li:last-child {
    margin:0 1px 30px 0;
}

【讨论】:

  • 非常感谢。我已经设法使用照片集和普通照片帖子来解决这个问题。我不得不做一个小调整,但要点是你的。在你的小提琴中,你输出一个 ul 作为另一个 ul 的直接子级,通常它应该被包裹在另一个 li 中以正确嵌套。但是非常感谢你,我真的很感谢你的时间!
  • 啊,直到明天我才能奖励赏金!
  • 很高兴有帮助:)
猜你喜欢
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 2014-07-02
  • 2023-03-10
  • 2017-10-19
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多