태터툴즈 플러그인

태터툴즈가 1.x에는 플러그인 기능이 있다. 0.9x까지는 태터툴즈에 기능을 추가하려면 태터툴즈를 직접 패치해야 한다. 그러나 플러그인 기능을 사용하면 태터툴즈를 패치하지 않고 '관리 도구'에서 플러그인만 설정해주면 된다. 설치하는 방법이 워낙 간단하기 때문에 이전에 태터툴즈를 패치해서 사용하던 기능을 플러그인으로 만들었다.

목차

태터툴즈 플러그인

태터툴즈가 1.x에는 플러그인 기능이 있다. 0.9x까지는 태터툴즈에 기능을 추가하려면 태터툴즈를 직접 패치해야 한다. 그러나 플러그인 기능을 사용하면 태터툴즈를 패치하지 않고 '관리 도구'에서 플러그인만 설정해주면 된다. 설치하는 방법이 워낙 간단하기 때문에 이전에 태터툴즈를 패치해서 사용하던 기능을 플러그인으로 만들었다.

첫 번째로 만든 플러그인이 QAOS.com에서 소개한 TraceWatch의 분석 코드를 쉽게 태터툴즈에 삽입할 수 있는 TraceWatch 로그였고, 두 번째로 만든 플러그인이 태터툴즈에 인쇄 버튼을 달 수 있는 인쇄 버튼 플러그인이었다.

'인쇄 버튼 플러그인'을 태터센터에 올린 후 확인해보니 인쇄 버튼을 클릭하면 인쇄 페이지가 만들어지지만 항상 최신 글만 인쇄 페이지에 나타나는 치명적인 버그가 있다는 것을 알았다. 그 이유는 간단했다. 플러그인에서 사용한 파일이 index.php 파일이었기 때문이다.

태터툴즈의 각 폴더를 확인해보면 알 수 있지만 태터툴즈는 기본적으로 index.php 파일과 item.php 파일로 구성된다. 이중 index.php 파일은 https://offree.net/처럼 URL에 파일 경로가 없는 경우에 호출되는 파일이며, item.php 파일은 https://offree.net/457처럼 URL에 파일 경로가 있는 경우에 호출되는 파일이다. 글의 ID를 이용해서 인쇄 페이지를 표시하려면 당연히 URL에 글의 ID가 표시되는 item.php를 이용해야 한다.

여기까지는 쉽게 왔다. 그런데 문제는 플러그인에서 글의 ID를 가져올 수 있는 방법이 많지 않다는 점이었다. 태터툴즈의 이벤트 중 글의 ID를 가져올 수 있는 이벤트는 'ViewPostContent'처럼 치환자를 사용하지 않는 이벤트들인데 '인쇄 버튼 플러그인'은 인쇄 버튼을 달기 위해서는 꼭 치환자를 사용해야 하기 때문이다.

결국 '인쇄 버튼 링크'에 자바스크립트를 호출하는 코드를 삽입하고 자바스크립트를 'ViewPostContent' 이벤트를 이용해서 생성하는 방법으로 문제를 해결했다. 그러나 이 방법도 역시 문제가 있었다. 치환자를 이용해서 플러그인을 호출하면 글의 ID를 알 수 있는 방법이 없기 때문에 블로그의 글을 한 페이지당 하나만 출력하도록 설정해야 정상적으로 동작한다는 점이다.

인쇄 플러그인 사용법

이 부분은 태터툴즈의 이벤트가 보강되면 수정하도록 하겠다. 이 인쇄 버튼을 사용하는 방법은 다음과 같다.

플러그인 설치
내려받은 플러그인을 푼 후 태터툴즈의 플러그인 폴더로 폴더째 복사한다.
플러그인 설정
'관리 도구/환경 설정/플러그인 관리'에서 '인쇄 버튼'을 '미사용'에서 '사용중'으로 변경한다.
블로그 설정
'관리 도구/스킨 관리/스킨에 맞춘 출력 설정'을 클릭하고 '블로그 글을 한 페이지 당 1개 보여줍니다'로 변경한다.
.htaccess 변경

좋아하는 편집기로 '.htaccess'를 불러온 후 다음처럼 변경한다. 적색 줄이 새로 추가된 줄이다.

RewriteEngine On
RewriteCond %{ENV:REDIRECT_SURI} !^$
RewriteRule (.*) - [L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ $1/ [L]
RewriteRule ^print/[0-9]+$ plugins/PrintArticle/item.php [E=SURI:1,L]
스킨 변경
자신이 사용하는 Skin.html 파일의 적당한 위치에 [ ##_printarticle_## ]이라는 치환자를 삽입한다.
인쇄용 스킨 생성
인쇄를 하기 위해서는 별도의 인쇄용 스킨이 필요하다. 태터툴즈의 표준 스킨을 사용하는 경우에는 압축 파일에 포함된 skin_print.html 파일을 /skin/Tattertools_skyline_ko 폴더에 복사하면 된다. 그러나 이외의 스킨을 사용하는 사람은 스킨 파일을 직접 변경해야 한다. 이 인쇄용 버튼을 자주 사용하는 사람은 스킨을 제작하는 분께 인쇄용 스킨 제작을 문의하는 것도 한 방법이다. 변경하는 방법은 스킨마다 차이가 있다. 일반적으로 <s_t3> 태그와 <s_article_protected> 태그 사이에서 <div> 태그를 제외한 모든 내용, <s_article_rep> 태그와 </s_article_rep> 태그 사이의 내용 중 불필요한 내용, </s_article_rep> 태그와 </s_t3> 태그 사이에서 <div> 태그를 제외한 모든 내용을 지우면 된다.

좌/우측 패널이 존재하는 경우 해당 <div> 태그도 삭제해야 한다.

인쇄용 스킨

다음은 태터툴즈의 표준 스킨을 인쇄용 스킨(skin_print.html)으로 변환한 경우이다. 대충 다음처럼 구성되면 된다.

<s_t3>
  <div id="container">
      <s_article_protected>
        <div class="entry_protected">
          <h2>[##_article_rep_title_##]</h2>
          <span class="date">[##_article_rep_date_##]</span>
          <p>보호되어 있는 글입니다. 내용을 보실려면 비밀번호를 입력하세요.</p>
          <p><label for="[##_article_password_##]">비밀번호 ::</label>
            <input type="password" maxlength="16" id="[##_article_password_##]" name="[##_article_password_##]" value="" onkeydown="if (event.keyCode == 13) [##_article_dissolve_##]" />
            <input type="button" class="submit" value="submit" onclick="[##_article_dissolve_##]" />
          </p>
        </div>
        <hr />
      </s_article_protected>
      <!-- entries -->
      <s_article_rep>
        <div class="entry">
          <h2><a href="[##_article_rep_link_##]">[##_article_rep_title_##]</a></h2>
          <span class="name"><a href="[##_article_rep_category_link_##]">[##_article_rep_category_##]</a> |  [##_printarticle_##]</span> | <span class="date">[##_article_rep_date_##]</span>
          <div class="article"> [##_article_rep_desc_##] </div>
          <div class="btn_top"><a href="#top"><img src="./images/btn_top.gif" /></a></div>
            </div>
          </s_rp>
        </div>
      </s_article_rep>
</s_t3>

관련 글타래