6/09/2018

구글 블로거 다루기 #이전글과 다음글 링크에 제목 표시하기

구글 블로거 다루기
- 깃허브 링크

구글 블로거에 없는 기능중 하나는, 이전글과 다음글로 가는 링크에 제목표시가 없다는것 입니다. 꼭 있을 필요는 없지만, 있으면 좋은 기능입니다.

제 블로그는 최근/이전 게시물 링크 하단에 제목이 표시되어있습니다.

블로거에서 제공하는 템플릿은 이러한 기능이 없습니다.

템플릿 편집화면으로 이동하여, nextprev를 검색합니다. 약 3~5개정도 결과가 나오는데, <b:includable id='nextprev'> ~ </b:includable> 부분을 찾으면 됩니다.

</b:includable> 바로 위에 코드를 추가합니다.

<b:if cond='data:blog.pageType == &quot;item&quot;'>
  <script>
  //<![CDATA[
      var newerLink = $("a.blog-pager-newer-link");
      var olderLink = $("a.blog-pager-older-link");

      $.get(newerLink.attr("href"), function(newer){
          newerLink.parent().append("<div class='next-title'>"+$(newer).find("h3.post-title").text()+"</div>");
      },"html");

      $.get(olderLink.attr('href'), function(older){
          olderLink.parent().append("<div class='prev-title'>"+$(older).find("h3.post-title").text()+"</div>");
      },"html");
  //]]>
  </script>
</b:if>

가장 먼저 나오는 <b:if cond='data:blog.pageType == &quot;item&quot;'> 는 조건문입니다. '현재 페이지의 타입이 아이템이라면 출력한다'라는 의미입니다. 여기서 아이템 타입이란 지금 보는것과 같은 게시물 화면을 의미합니다.

newerLink와 olderLink는 각각 다음글과 이전글인데, 다음글인 nwerLink를 기준으로 설명하겠습니다.

변수 newerLink 에 다음글 이동하는 링크를 저장하고, 비동기 요청 방식인 $.get() 을 이용하여 데이터를 가져옵니다. 가져오는 데이터는, olderLink.attr('href'), function(older) 로 인해 링크된 페이지 전체가 됩니다.

newerLink.parent().append() 를 이용해 newerLink의 부모(parent)요소에 <div class='next-title'>"+$(newer).find("h3.post-title").text()+"</div> 코드를 추가(append)합니다.

현재 블로그의 제목의 선택자가 h3.post-title 이므로 find("h3.post-title") 를 사용했습니다.

같은 방법으로 제목뿐만 아니라, 글 내용이나 첨부된 이미지도 가져올 수 있습니다.

이런 코드를 한줄 추가합니다.

newerLink.parent().append("<img src='"+$(newer).find(".post-body img").eq(1).attr("src")+"'>");

find(".post-body img").eq(1).attr("src") 는 본문(.post-body) 하위에있는 이미지 태그(img)중 두번째 있는 이미지의 주소(src)를 가져오는 코드입니다.

이때 eq(1)은 첫번째가 아니라 두번째라는것을 주의해야합니다. 첫번째 이미지는 eq(0) 입니다.

이렇게하면 실제로 최근 게시물의 링크에 있는 이미지중 두번째 이미지가 표시됩니다.

어떤 데이터를 가져오는지 알아보기 위해, console.log(newer); 를 추가합니다.

크롬 또는 사용하는 브라우저의 콘솔을 보면, 그 링크의 페이지 코드 전체를 가져오는걸 알 수 있습니다.

게시물 수정
  1. 익명3/18/2020

    쿠주로님 제가 뭘 잘못 건드렸는데요.

    https://zzal1234.blogspot.com 으로 들어갈때는 pages 1 of 25, 1,2,3,4 next Last 이런 항목이 있는데,

    막상 본문을 클릭하면은

    https://zzal1234.blogspot.com/2020/03/ukrainian-beautiful-girl-irina-sivalnaya.html

    이전 글 다음 글 이 없어졌습니다...어떻게 만드는 방법 없겠습니까????

    답글삭제
    답글
    1. 안녕하세요? 방문해주셔서 감사합니다.
      사용하시는 템플릿은 기본적으로 다음/이전 링크가 있는데 없다고하시는걸 보니 삭제하신것 같습니다.

      <b:includable id='postRelated' var='post'> 코드를 찾은 뒤, 찾은 코드의 위에다가 아래의 코드를 추가해주세요.


      <b:includable id='postNavigation' var='post'>
      <!-- Post Navigation Item -->
      <ul class='post-nav'>
      <li class='post-next'>
      <b:if cond='data:newerPageUrl'>
      <a class='next-post-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + "_blog-pager-newer-link"' rel='next'>
      <div class='post-nav-inner'><span><data:messages.newer/></span><p/></div>
      </a>
      <b:else/>
      <a rel='next'><div class='post-nav-inner post-nav-active'><span><data:messages.newer/></span><p><data:post.title/></p></div></a>
      </b:if>
      </li>
      <li class='post-prev'>
      <b:if cond='data:olderPageUrl'>
      <a class='prev-post-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + "_blog-pager-older-link"' rel='previous'>
      <div class='post-nav-inner'><span><data:messages.older/></span><p/></div>
      </a>
      <b:else/>
      <a rel='previous'><div class='post-nav-inner post-nav-active'><span><data:messages.older/></span><p><data:post.title/></p></div></a>
      </b:if>
      </li>
      </ul>
      </b:includable>
      <b:includable id='postPagination'>
      <b:comment>Disabled</b:comment>
      </b:includable>
      <b:includable id='postReactions' var='post'>
      <!-- Post Reactions -->
      <b:if cond='data:allBylineItems.reactions'>
      <div class='post-reactions'>
      <span><data:allBylineItems.reactions.label/></span>
      <div class='reactions-inner'>
      <iframe allowtransparency='true' class='reactions-iframe' expr:src='data:posts[0].reactionsUrl' frameborder='0' name='reactions' scrolling='no'/>
      </div>
      </div>
      </b:if>
      </b:includable>

      삭제
    2. 만약, 위의 코드가 이미 있거나 추가해도 보이지 않는 경우

      <div class='post-footer'> 를 찾으신 뒤, 아래에 굵게 표시된 코드를 추가해주세요.



      <div class='post-footer'>
      <!-- Navigation, About Author an Related Posts -->
      <b:include cond='data:allBylineItems.icons' data='post' name='postNavigation'/>
      <b:include cond='data:post.author.aboutMe' data='post' name='aboutPostAuthor'/>
      <b:include cond='data:allBylineItems.backlinks' data='post' name='postRelated'/>
      </div>

      삭제
  2. 혹시 아직까지 답변을 해주시는지는 모르겠지만 혹시나 해서 답변을 달아봅니다 (__);

    제 블로그는 기본 제공해주는 템플릿을 사용하고 있습니다만

    <div class='blog-pager' id='blog-pager'>
    <b:if cond='data:newerPageUrl'>
    <span id='blog-pager-newer-link'>
    <a class='blog-pager-newer-link' expr:href='data:newerPageUrl' expr:id='data:widget.instanceId + "_blog-pager-newer-link"' expr:title='data:newerPageTitle'><data:newerPageTitle/></a>
    </span>
    </b:if>

    <b:if cond='data:olderPageUrl'>
    <span id='blog-pager-older-link'>
    <a class='blog-pager-older-link' expr:href='data:olderPageUrl' expr:id='data:widget.instanceId + "_blog-pager-older-link"' expr:title='data:olderPageTitle'><data:olderPageTitle/></a>
    </span>
    </b:if>

    이런 형식의 태그가 사용되고 있습니다.

    혹시, 여기서 "같은 레이블(label)" 게시물들 사이에서만 왔다 갔다 할 수 있게 하는 법은 없을까요? 전체 게시물이 아니라요...


    답글삭제
    답글
    1. 안녕하세요? 방문해주셔서 감사합니다.

      즉, [ 다음/이전 페이지로 이동하는 기능이, 현재 레이블과 동일한 레이블의 게시물에만 적용 ] 이라는거지요?

      일단 최종적으로 말씀드리면 가능하기는 합니다. 단, 가능케하려면.. 흔히 말하는 마개조(...).. 즉 자바스크립트로 도배작업을 해야합니다. 그런데 이렇게할 경우 블로그에 게시물이 많아지게되면 그만큼 느려질 가능성이 있어서...

      마침 저도 이부분에 대해 고민하고 있었는데.. 좀 더 생각해봐야겠습니다.

      삭제
    2. 아... 현재 기술(?)로는 구현하기 어려운 거였군요 ㅠ.
      친절한 답변 고맙습니다!

      삭제