Blogger случайное отображение сообщений, чтобы предотвратить отсутствие сообщений бесконечный цикл - PullRequest
0 голосов
/ 12 октября 2019

Как я могу заставить Blogger отображать случайные сообщения, предотвращая бесконечный цикл, когда нет сообщений для отображения?

Вот мой код JavaScript, который я пытаюсь использовать:

<script>
var dt_numposts = 10;
var dt_snippet_length = 100;
var dt_info = 'true';
var dt_comment = 'Comment';
var dt_disable = '';
var dt_current = [];
var dt_total_posts = 0;
var dt_current = new Array(dt_numposts);

function totalposts(json) {
    dt_total_posts = json.feed.openSearch$totalResults.$t
}

document.write('<script type=\"text/javascript\" src=\"/feeds/posts/summary?max-results=100&orderby=published&alt=json-in-script&callback=totalposts\"><\/script>');

function getvalue() {
    for (var i = 0; i < dt_numposts; i++) {
        var found = false;
        var rndValue = get_random();
        for (var j = 0; j < dt_current.length; j++) {
            if (dt_current[j] == rndValue) {
                found = true;
                break
            }
        };
        if (found) {
            i--
        } else {
            dt_current[i] = rndValue
        }
    }
};

function get_random() {
    var ranNum = 1 + Math.round(Math.random() * (dt_total_posts - 1));
    return ranNum
};

function random_list(json) {
    a = location.href;
    y = a.indexOf('?m=0');
    for (var i = 0; i < dt_numposts; i++) {
        var entry = json.feed.entry[i];
        var dt_posttitle = entry.title.$t;
        if ('content' in entry) {
            var dt_get_snippet = entry.content.$t
        } else {
            if ('summary' in entry) {
                var dt_get_snippet = entry.summary.$t
            } else {
                var dt_get_snippet = "";
            }
        };
        dt_get_snippet = dt_get_snippet.replace(/<[^>]*>/g, "");
        if (dt_get_snippet.length < dt_snippet_length) {
            var dt_snippet = dt_get_snippet
        } else {
            dt_get_snippet = dt_get_snippet.substring(0, dt_snippet_length);
            var space = dt_get_snippet.lastIndexOf(" ");
            dt_snippet = dt_get_snippet.substring(0, space) + "&#133;";
        };
        for (var j = 0; j < entry.link.length; j++) {
            if ('thr$total' in entry) {
                var dt_commentsNum = entry.thr$total.$t + ' ' + dt_comment
            } else {
                dt_commentsNum = dt_disable
            };
            if (entry.link[j].rel == 'alternate') {
                var dt_posturl = entry.link[j].href;
                if (y != -1) {
                    dt_posturl = dt_posturl + '?m=0'
                }
                var dt_postdate = entry.published.$t;
                if ('media$thumbnail' in entry) {
                    var dt_thumb = entry.media$thumbnail.url
                } else {
                    dt_thumb = "https://blogspot.com/"
                }
            }
        };
        document.write('<a href="' + dt_posturl + '" rel="nofollow"><img alt="' + dt_posttitle + '" src="' + dt_thumb + '"/></a>');
        document.write('<div><a href="' + dt_posturl + '" rel="nofollow" title="' + dt_snippet + '">' + dt_posttitle + '</a></div>');
        if (dt_info == 'true') {
            document.write('<span>' + dt_postdate.substring(8, 10) + '/' + dt_postdate.substring(5, 7) + '/' + dt_postdate.substring(0, 4) + ' - ' + dt_commentsNum) + '</span>'
        }
        document.write('<div style="clear:both"></div>')
    }
};

getvalue();

for (var i = 0; i < dt_numposts; i++) {
    document.write('<script type=\"text/javascript\" src=\"/feeds/posts/summary?alt=json-in-script&start-index=' + dt_current[i] + '&max-results=1&callback=random_list\"><\/script>')
};

</script>

Ожидаемый результат:

?

Фактический результат:

?


Похоже, ваш пост в основном кодовый;пожалуйста, добавьте больше деталей.

1 Ответ

0 голосов
/ 12 октября 2019

Похоже, вы пытаетесь заполнить dt_current элементами dt_numposts = 10. Я изменил getvalue() следующим образом, так что dt_numposts ограничен значением dt_total_posts, которое может быть 0. Это позволяет выходить из внешнего цикла for.

function getvalue() {
    dt_numposts = (dt_total_posts < dt_numposts) ? dt_total_posts : dt_numposts;
    // ...

Я не смог проверить это, потому что у меня нет примера /feeds/posts/summary?max-results=100&orderby=published&alt=json-in-script&callback=totalposts ресурса JSON, но он работает для нулевых записей. Работает ли для dt_numposts > 0, вам нужно проверить!

...