Skip to content
ssut edited this page Oct 19, 2014 · 7 revisions

텍스트큐브 스킨 사양에 정의되지 않은 치환자([##_치환자_##] 의 형태를 하고 있습니다)에 플러그인의 핸들러를 붙이기 위해서는 tag을 사용합니다.
또한 스킨을 직접 수정하지 않더라도 기본적으로 제공하는 치환자들이 있습니다. 스킨에도 보이지 않지만 마치 있는 것 처럼 동작하는 치환자들을 가상 치환자(meta tag)라고 합니다.

기본 개념

tag 방식은 주로 배너 이미지나 스크립트, 특정 HTML 코드 등을 블로그 화면에 노출시키기 위해 사용합니다. 텍스트큐브는 tag 방식 플러그인들을 동작시킬 때 핸들러 함수의 반환값을 스킨의 tag 자리에 끼워넣습니다.

예제: Hello World 플러그인

아래의 예제는 Hello World를 [##_HelloWorld_##]에 출력해주는 예제입니다.

  • index.xml
  <?xml version="1.0" encoding="utf-8"?>
  <plugin version="1.0">
    <title xml:lang="ko">안녕 세상아! (기본)</title>
    <link>http://www.example.com/</link>
    <version>1.0</version>
    <description xml:lang="ko">여기저기에 Hello world!를 출력해보는 예제 플러그인입니다.</description>
    <license>GPL</license>
    <author xml:lang="ko" link="http://www.example.com">슈퍼맨</author>
    <safety changeData="no" exposeData="no" accessLocal="no" accessRemote="no" accessRaw="no" />
    <requirements>
      <textcube>1.5</textcube>
    </requirements>
    <binding>
         <tag name="HelloWorld" handler="Helloworld_Show" />
    </binding>
  </plugin>
  • index.php
  <?php
       function Helloworld_Show($target) {
            return $target.'Hello World!';
       }
  ?>

Listener와의 차이점

이벤트가 발생하는 시점을 파악하여 동작하는 listener 방식과는 달리, tag는 스킨이 출력되는 시점을 기준으로 빈 값, 또는 같은 tag를 정의하였기에 앞서 실행된 플러그인이 리턴한 결과값만을 인자로 보내줍니다. 또한 tag 방식의 플러그인이 동작하기 위해서는 스킨에 해당 치환자가 반드시 존재해야 하며, 존재하지 않는 경우에는 동작하지 않습니다.

가상 치환자

스킨에 직접 tag를 적어야 하는 임의치환자 방식은 스킨을 변경할 경우 사용하는 플러그인마다 일일이 tag를 다시 추가해주어야 한다는 단점이 있습니다. 플러그인을 스킨과 상관없이 동작할 수 있도록 도와주기 위해 텍스트큐브는 스킨을 해석하며 특정한 위치에 가상으로 치환자가 있는 것처럼 흉내내줍니다. 이러한 가상 치환자를 사용하여, 스킨을 수정하는 번거로움을 감수하지 않고서도 스킨에 쉽게 html을 끼워 넣을 수 있습니다.

예를 들어, 웹 브라우저가 찾기 쉽도록 댓글 RSS의 주소를 스킨의 header 부분에 끼워넣고 싶은 경우를 가정해 보겠습니다. 이 경우 스킨의 <head> 태그 위치에

<head>
...
<link rel="alternate" type="application/rss+xml" title="TEST" href="/comment/rss" />
...
</head>

처럼 출력하기 위해서는 스킨을 직접 수정하거나 스킨에 [##_head_print_##] 등의 치환자를 추가한 다음

<?php
function print_comment_rss_link($target) {
     return $target.CRLF.'<link rel="alternate" type="application/rss+xml" title="TEST" href="/comment/rss" />'.CRLF;
}
?>

식의 핸들러를 만들어

    <binding>
        <tag name="head_print" handler="print_comment_rss_link" />
    </binding>

와 같은 tag binding을 사용하여 head_print()에 붙여야 할 것입니다. (CRLF는 텍스트큐브에서 사용할 수 있는 줄바꿈 문자입니다.)

가상 치환자를 이용하면 이런 경우 스킨에 치환자를 추가하지 않아도 됩니다. 위 예제의 경우, 치환자를 추가하지 않고

    <binding>
        <tag name="SKIN_head_end" handler="print_comment_rss_link" />
    </binding>

처럼 드라이버 xml을 만들면 실제로는 [##_SKIN_head_end_##]가 없음에도 불구하고 마치 있는 것 처럼 </head>태그의 윗줄에 붙습니다.

다음은 텍스트큐브가 지원하는 가상 치환자의 목록입니다.

  • SKIN_html_start - <html>태그의 밑 줄에 추가됩니다.
  • SKIN_head_start - <head>태그의 밑 줄에 추가됩니다.
  • SKIN_head_end - </head>태그의 윗 줄에 추가됩니다.
  • SKIN_body_start - <body>태그의 밑 줄에 추가됩니다.
  • SKIN_body_end - </body>태그의 윗 줄에 추가됩니다.
  • SKIN_html_end - </html>태그의 윗 줄에 추가됩니다.
Clone this wiki locally