구글 블로그 글 목록 (post list) 수정 버전

google blogger 글 목록(post list) 자바 스크립트 수정버전.

원 스크립트 파일은 아래에서 받았다. 두 군데 모두 스크립트내용이 동일해 누가 원작자인지는 모르겠다.


수정 내용


- 리스트 항목 클릭 시 summary를 보여주던 문제를 포스트 페이지로 바로 이동하도록 수정




스크립트는 Blogger:레이아웃 > 가젯 추가 > HTML/JavaScript를 추가한 후 콘텐츠에 스크립트를 복사해 붙여 넣으면 된다. 


수정된 스크립트

<div class='refer_box'>
    <div align="left" id="posts"></div>
    <div align="center" id="posts-pgno" style="cursor: pointer;"></div>
</div>

<script language="Javascript" type="text/javascript">

var request =
{
    parameter: function(name) { return this.parameters()[name];},
    parameters: function()
    {
        var result = {};
        var url = window.location.href;
        var parameters = url.slice(url.indexOf('?') + 1).split('&');
        for(var i = 0;  i < parameters.length; i++)
        {
            var parameter = parameters[i].split('=');
            result[parameter[0]] = parameter[1];
        }
        return result;
    }
}  /*endof var request*/


var page = {
    init: function(home,max)
    {
        page.home = home;
        page.max = max;
        page.label = '';
        page.no = 1;
    },
    setPage: function()
    {
        var url = window.location.href;
        var pl = url.lastIndexOf("/label/");  
        var pq = url.lastIndexOf("?"); 
        if(pl != -1) page.label = url.substr(pl+7,((pq!=-1)?pq:url.length)-(pl+7));  
        if(url.indexOf("pgno") != -1) page.no = request.parameter("pgno");
    }
}/* end of var page*/

var obj = {
    init: function ()
    {
        obj.posts = document.getElementById('posts');
        obj.pgno = document.getElementById('posts-pgno');
    },
    SearchPosts: function ()
    {
        obj.s = document.createElement('script');
        obj.s.type = 'text/javascript';
        obj.s.charset = 'utf-8';
 
        if (page.label == '')
            obj.s.src = '' + page.home + '/feeds/posts/summary/?max-results=' + (page.no * page.max) + '&alt=json-in-script&callback=obj.SearchResult';
        else
            obj.s.src = '' + page.home + '/feeds/posts/summary/-/' + page.label + '?max-results=' + (page.no * page.max) + '&alt=json-in-script&callback=obj.SearchResult';
        //append.
        document.getElementsByTagName('head')[0].appendChild(obj.s);
    },/*end of SearchPosts: function (z) */
    SearchResult: function (z)
    {
        obj.displayposts(z);
        obj.displaypgno(z);
    },  /*end of SearchResult: function (z) */
    displayposts: function (z)
    {
        obj.posts.innerHTML = '';

        for (var i = (page.no - 1) * page.max; i < page.no * page.max; i++)
        {
            if (i >= z.feed.openSearch$totalResults.$t) break;

            var li = document.createElement("li");
            var a = document.createElement('a');

            li.style.fontSize = '12pt';
            li.style.color = '#555555';
            li.style.listStyleType = "lower-alpha";
            a.style.fontSize = '12pt';
            a.style.color = '#555555';

            var url = '';
            for (var j = 0; j < z.feed.entry[i].link.length; j++)
            {
                if (z.feed.entry[i].link[j].rel == 'alternate')
                {
                    url = z.feed.entry[i].link[j].href;
                    break;
                }
            }

            a.href = url;
            a.innerHTML = obj.escapeHtml(z.feed.entry[i].title.$t);

            li.appendChild(a);
            obj.posts.appendChild(li);
        }
    },
    displaypgno: function (z)
    {
        obj.pgno.innerHTML = '';
        var before = document.createElement('a');
        var next = document.createElement('a');

        var ten = parseInt((page.no-1)/10);
        var total = z.feed.openSearch$totalResults.$t;

        /* before page */
        before.innerHTML = ' << ';
        if(ten>0)  obj.onMouseDown(before, ten*10);
        obj.pgno.appendChild(before);

        /* page number */
        for(var i=ten*10; i< (ten+1)*10; i++)
        {
            if(i >= total/page.max)  break;
            var a = document.createElement('a');
            obj.onMouseDown(a,i+1);

            a.innerHTML = ' ' + (i+1) + ' ';

            if(i+1 == page.no)  a.style.color = 'red';
            obj.pgno.appendChild(a);
        }

        /* next page */
        next.innerHTML = ' >> ';
        if(ten< parseInt(total/page.max/5))
        obj.onMouseDown(next, (ten+1)*10+1);
        obj.pgno.appendChild(next);
    },  /*end of pongPgno: function(z)*/

    //mouse click event.
    onMouseDown: function(a, i)
    {
        a.onmousedown = function()
        {
            page.no = i;
            obj.SearchPosts();
        }
    },

    changeTime: function(str)
    {
        var s = str.lastIndexOf('.')-1;
        var e = str.lastIndexOf('+')+1;

        if(e<1)
        {
            e = str.lastIndexOf('-')+1;
            var str2 = str.substr(0,s) + '-' + str.substr(e,100);
        }
        else
        {
            var str2 = str.substr(0,s) + '%2B' + str.substr(e,100);
        }

        return str2;
    },

    escapeHtml: function (str)
    {
        str = str.replace(/&/g, "&");
        str = str.replace(/</g, "<");
        str = str.replace(/>/g, ">");
        return str;
    }
};  /*end of var obj*/


page.init('https://ryanclaire.blogspot.com', 5);
page.setPage();
obj.init();
obj.SearchPosts();

</script>


[note] 위 스크립트를 재사용시
1. page.init에서 url 수정
2. 'refer_box'는 블로그 css 추가에 추가한 html box model이다.

[관련 포스트]

댓글

  1. 유용하고 훌륭한 스크립트 공유에 깊은 감사를 드립니다.
    제목이 길어서 두 줄이 될 경우 첫째 줄과 같은
    시작 위치로 조정이 가능할까요?

    즐거운 하루 되세요..^^

    답글삭제
    답글
    1. 안녕하세요.
      스크립트에서 li.style.listStyleType = "lower-alpha"; 아래에 다음 스크립트를 추가해 보세요.
      li.style.listStylePosition = "inside";
      li.style.textIndent ="-10px";
      li.style.paddingLeft = "18px";

      textIndent값과 paddingLeft값은 적당히 조절하시면 될 것 같습니다.

      삭제
    2. 명쾌한 답변 감사드립니다.

      즐거운 하루 되세요.
      건승을 기원 드립니다..^^

      삭제
  2. 다른 곳에서 찾은 소스들이 적용이 안되던데 잘 작동합니다. 감사합니다!

    답글삭제
  3. 안녕하세요?
    유용한 코드 잘 활용하고 있습니다.
    혹시 특정 카테고리/라벨만 출력이 가능한지요?

    즐거운 시간 되세요..^^

    답글삭제
    답글
    1. 안녕하세요. 댓글을 늦게 봤습니다. 저도 스크립트를 공부하며 만드는 형편이라 문의하신 내용이 가능한지는 좀더 찾아봐야할것같습니다. 다만 제가 요즘 진행중인 프로젝트가 바빠서 현재로서는 시간을 내기가 어렵습니다. ㅜㅜ

      삭제
  4. 안녕하세요 ?
    번거롭게 해서 죄송합니다.
    지난번 질문의 추가입니다.

    링크 위젯의 용도가 다양하고 훌륭한 것으로 판단됩니다. 사이트를 여러 개 운영하는 분들에게 아주 유용한 것으로 판단됩니다.
    예를 들자면, 이 사이트(https://ryanclaire.blogspot.com)를 제 사이트에 링크해도 아주 잘 됩니다. 따라서 필요한 카테고리/라벨별로 이미지가 동반되어 새 창에서 출력이 된다면, 엄청난 파급효과가 있는 위젯이 될 것으로 판단됩니다.

    감사합니다.

    답글삭제
  5. 안녕하세요.
    위 소스를 사용하고 있습니다. 한가지 문제점이 있습니다.
    제 블로그에서 메인 카타로그를 클릭하게 되면 post list(게시글)이 나타납니다. ( 위소스를 이용해서요)
    여기서 post list 해당글을 클릭을 하게 되면 post list 게시글이 all 로 나타나게 됩니다.
    저가 하고 싶은것은 메인 카타로그를 클릭한 후 post list(게시물)를 클릭했을때 메인 카타로그의 post list(게시글)만 나타나게 하고 싶습니다. 하지만 지금은 전부 나타나고 있습니다.
    해결방법이 있을까요?

    답글삭제
    답글
    1. 안녕하세요.
      본문의 스크립트는 blog url/feeds/postsummary/ 에서 받아오는 xml을 파싱하여 포스트 리스트를 만드는 방식입니다. xml파일에서 category 항목을 함께 파싱하여 리스트를 만들면 될 것 같습니다. 제가 요즘 다수의 프로젝트를 진행중이라 시간여유가 없어 답변에 늦었습니다.

      삭제

댓글 쓰기

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

Embedded Linux USB Ethernet Gadget 사용하기

python ctypes LoadLibrary로 windows dll 로드 및 함수 호출 예제

바로 프로젝트 적용 가능한 FIR Filter (low/high/band pass filter )를 c나 python으로 만들기