구글 블로그 글 목록 (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이다.
[관련 포스트]
유용하고 훌륭한 스크립트 공유에 깊은 감사를 드립니다.
답글삭제제목이 길어서 두 줄이 될 경우 첫째 줄과 같은
시작 위치로 조정이 가능할까요?
즐거운 하루 되세요..^^
안녕하세요.
삭제스크립트에서 li.style.listStyleType = "lower-alpha"; 아래에 다음 스크립트를 추가해 보세요.
li.style.listStylePosition = "inside";
li.style.textIndent ="-10px";
li.style.paddingLeft = "18px";
textIndent값과 paddingLeft값은 적당히 조절하시면 될 것 같습니다.
명쾌한 답변 감사드립니다.
삭제즐거운 하루 되세요.
건승을 기원 드립니다..^^
다른 곳에서 찾은 소스들이 적용이 안되던데 잘 작동합니다. 감사합니다!
답글삭제안녕하세요?
답글삭제유용한 코드 잘 활용하고 있습니다.
혹시 특정 카테고리/라벨만 출력이 가능한지요?
즐거운 시간 되세요..^^
안녕하세요. 댓글을 늦게 봤습니다. 저도 스크립트를 공부하며 만드는 형편이라 문의하신 내용이 가능한지는 좀더 찾아봐야할것같습니다. 다만 제가 요즘 진행중인 프로젝트가 바빠서 현재로서는 시간을 내기가 어렵습니다. ㅜㅜ
삭제안녕하세요 ?
답글삭제번거롭게 해서 죄송합니다.
지난번 질문의 추가입니다.
링크 위젯의 용도가 다양하고 훌륭한 것으로 판단됩니다. 사이트를 여러 개 운영하는 분들에게 아주 유용한 것으로 판단됩니다.
예를 들자면, 이 사이트(https://ryanclaire.blogspot.com)를 제 사이트에 링크해도 아주 잘 됩니다. 따라서 필요한 카테고리/라벨별로 이미지가 동반되어 새 창에서 출력이 된다면, 엄청난 파급효과가 있는 위젯이 될 것으로 판단됩니다.
감사합니다.
답변 감사드립니다..^^
답글삭제안녕하세요.
답글삭제위 소스를 사용하고 있습니다. 한가지 문제점이 있습니다.
제 블로그에서 메인 카타로그를 클릭하게 되면 post list(게시글)이 나타납니다. ( 위소스를 이용해서요)
여기서 post list 해당글을 클릭을 하게 되면 post list 게시글이 all 로 나타나게 됩니다.
저가 하고 싶은것은 메인 카타로그를 클릭한 후 post list(게시물)를 클릭했을때 메인 카타로그의 post list(게시글)만 나타나게 하고 싶습니다. 하지만 지금은 전부 나타나고 있습니다.
해결방법이 있을까요?
안녕하세요.
삭제본문의 스크립트는 blog url/feeds/postsummary/ 에서 받아오는 xml을 파싱하여 포스트 리스트를 만드는 방식입니다. xml파일에서 category 항목을 함께 파싱하여 리스트를 만들면 될 것 같습니다. 제가 요즘 다수의 프로젝트를 진행중이라 시간여유가 없어 답변에 늦었습니다.