środa, 22 maja 2013

jak stworzyć alfabetyczną listę postów w bloggerze

Chciałbyś, aby użytkownik miał możliwość przeglądania spisu treści Twojego bloga?

W tym celu wykorzystałem wskazówki zawarte w artykułach:
Dodatkowo poprawiłem problem występujący przy braku kategorii przy którymś z postów oraz wyświetlanie przy poście wszystkich jego kategorii a nie tylko pierwszej. Kod pobiera posty 1-500 oraz 501-1000 - aby pobierać więcej postów trzeba dodać kolejne analogiczne zapytania.

Wystarczy do postu wstawić poniższy kod wpisując w linku adres swojego bloga:

<script> 
var postList = new Array();
function GetPostList(json)
{      
for(var i=0;i<json.feed.entry.length;++i)
postList.push(json.feed.entry[i]);
}
function SortByTitle(a,b) 
{
var x=a.title.$t.toLowerCase();
var y=b.title.$t.toLowerCase();
if(x==y) return 0;
if(x>y) return 1;
return -1;
}
function SortByPublished(a,b)
{
var x=a.published.$t;
var y=b.published.$t;
if (x==y) return 0;
if (x<y) return 1;
return -1;
}
function ShowPostList()
{
//sortowanie alfabetyczne
postList.sort(SortByTitle);
//sortowanie po dacie
//postList.sort(SortByPublished);
document.write('<ul>'); 
for(var i=0;i<postList.length;++i) 
{
document.write('<li>');
var posturl;    
for(var k=0;k<postList[i].link.length;++k)
{
if (postList[i].link[k].rel == 'alternate')
{
posturl=postList[i].link[k].href;
break;
}
}
document.write('<a href="'+posturl+'">');
//gdyby ktoś potrzebował miniaturkę - odkomentować
//if(postList[i].media$thumbnail)
//document.write('<img src="'+postList[i].media$thumbnail.url+'"/> ');
document.write(postList[i].title.$t);
document.write('</a>');
if(postList[i].category)
for (var m=0; m<postList[i].category.length;++m)
{
document.write(' - <i>'+ postList[i].category[m].term+'</i>');
}
document.write('</li>');
}
document.write('</ul>');
document.write('<br><br><i>pobranych postów: '+postList.length+'</i>');
}
</script>
<script src="http://danielklecha.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=1&max-results=500&callback=GetPostList"></script>
<script src="http://danielklecha.blogspot.com/feeds/posts/default?alt=json-in-script&start-index=501&max-results=500&callback=GetPostList"></script>
<script>ShowPostList();</script>
*

17 komentarzy:

  1. Witam,
    wstawiłam powyższy kod na stronę/posta, zmieniłam adres, ale nadal nie widzę listy postów. Pokazuje się tylko komunikat "pobranych postów: 0". Czy to przez to, że blog jest prywatny? Czy może muszę pozmieniać coś jeszcze w kodzie html całego bloga? Proszę o pomoc!
    Pozdrawiam

    OdpowiedzUsuń
  2. Skrypt pobiera feed postów publicznych - tak też jest to ujęte na stronie api google - https://developers.google.com/gdata/samples/blogger_sample - dlatego lista nie będzie zawierać postów prywatnych
    Jeżeli sądzisz, że wszystko jest ok, pomiń javascript i wejdź bezpośrednio na adres: http://danielklecha.blogspot.com/feeds/posts/default?alt=json-in-script
    wstawiając nazwę swojego bloga i zobacz czy w zwróconej tablicy są linki do Twoich postów.
    Pozdrawiam

    OdpowiedzUsuń
  3. Wszystko jest dobrze, wina bloga prywatnego. Dzięki za wyjaśnienie.
    Pozdrawiam

    OdpowiedzUsuń
  4. Jak zmienić funkcję na chronologiczną?

    OdpowiedzUsuń
  5. nie przetestowałem tego ale powinno zadziałać coś w stylu
    function SortByPublished(a,b)
    {
    if (b.published.$t==a.published.$t) return 0;
    if (a.published.$t>b.published.$t) { return 1; }
    else return -1;
    }
    i zaktualizować linię na
    tabentry.sort(SortByPublished); //sortuj tablicę
    Możliwe, że lista jest domyślnie zwracana chronologicznie wtedy wystarczy zakomentować linię sortującą wpisy

    OdpowiedzUsuń
  6. Witam serdecznie, dałoby się stworzyć listę postów ale bez wyświetlania informacji w jakich sa kategoriach?
    Pozdrawiam

    OdpowiedzUsuń
  7. trzeba ukryć fragment
    if(tabentry[i].category)
    for (var m = 0; m < tabentry[i].category.length; m++) {
    document.write(' - '+ tabentry[i].category[m].term+'');
    }

    OdpowiedzUsuń
  8. Super, A czy da się dołączyć miniaturkę?:)

    OdpowiedzUsuń
  9. Tak, można dodać miniaturkę. Dodałem zakomentowany fragment w poście. Pozdrawiam.

    OdpowiedzUsuń
  10. witaj,
    u mnie w ogóle nie działa. o co może chodzic??
    poniżej strona z kodem


    http://tradycyjnakuchnia.blogspot.com/p/asa.html

    OdpowiedzUsuń
  11. działa :) dziękuj za pomoc :) czegoś takiego szukałam

    OdpowiedzUsuń
  12. Witam, chciałbym zapytac, czy dałoby się wyświetlać listę w dwóch kolumnach?

    OdpowiedzUsuń
    Odpowiedzi
    1. Musisz dodać sobie klasę css:
      .two-columns {
      -webkit-column-count: 2;
      -moz-column-count: 2;
      column-count: 2;
      }
      i dopisać ją do taga ul w powyższym skrypcie:
      document.write('#ul class="two-columns"#');
      Nie mogę dodać ostrych nawiasów więc podmień sobie znaki #

      Usuń
  13. Witam, pobiera mi tylko 150 postów. Co trzeba skorygować?
    http://motyw-kolejowy.blogspot.com/p/spis-filmow-na-stronie.html

    pozdrawiam

    OdpowiedzUsuń
  14. Solidnie napisane. Pozdrawiam i liczę na więcej ciekawych artykułów.

    OdpowiedzUsuń