Movable Type의 CGI를 이용한 CategoryPager
이 플러그인은 무버블타입 블로그에서 PHP같은 형식으로 퍼블리싱하지 않고 HTML로 퍼블리싱하는 경우에도, 카테고리 아카이브에 페이지를 나눠 나타내게 할 수 있게 해 줍니다. 날짜 기반 아카이브의 경우 그 성질상 월별 정도의 개념으로 페이징이 나눠진다고 볼 수 있습니다. 따라서 그 경우엔 굳이 페이지를 나눌 필요성이 없는 반면에, 카테고리 아카이브는 시간이 지남에 따라 누적적으로 엔트리가 쌓이게 되므로 어느 순간 적절한 크기로 목록을 나눠서 표시할 필요성이 생깁니다.
이런 일종의 게시판에서의 페이징같은 기능은 기본적으로 동적인 특성이 요구되므로 HTML같은 형식으로 퍼블리싱하는 경우 이를 구현하기 불가능합니다. 따라서 이 페이징 기능을 사용하기 위해 일부러(?) PHP 형식으로 퍼블리싱하게 되는 현상도 발생합니다. 물론 PHP로 퍼블리싱할 경우에 그만큼 유연해지는 것은 사실이나, 특별히 동적인 기능을 사용하지 않는 경우에는 MT의 시스템 특성과도 어울리게 정적인 HTML 파일로 퍼블리싱하는게 자연스럽다고 봅니다.
어쨋든 MT에서 이 카테고리 아카이브에 페이징을 적용하려면 기본적으로 PHP 등으로 퍼블리싱을 해야 합니다. 여기서 MT 시스템이 제공하는 비공식 CGI인 mt-view.cgi를 이용할 여지가 발생합니다. 즉 MT의 이 CGI도 PHP처럼 동적인 능력을 제공하기 때문에 이를 이용한다면 별도의 파일 형태로 퍼블리싱을 할 필요가 없어집니다.
카테고리 아카이브에 페이징이 적용된 모습은 여기서 볼 수 있습니다.(이것은 이 플러그인을 이용한 것은 아닙니다만 같은 원리입니다)
Requirement
- Movable Type 3.2
Installation
압축 파일을 받아 (mt home) 폴더밑에서 $tar xvfz CategoryPager-3.2.01.tar.gz 등의 명령으로 풉니다.
Configuration
1.
(mt home)/mt-config.cgi 파일을 열어서 SafeMode에 0을 입력합니다. 디폴트로는 주석처리 되어 있습니다.
2.
MT의 Archive 템플릿 메뉴로 들어가서, 새 아카이브 템플릿을 생성합니다. 이름을 가령 "Dynamic Category Pager" 등으로 붙입니다. 그 내용은 기존에 사용하던 카테고리 아카이브 템플릿의 내용을 재사용해도 될 것입니다.
3.
그런 후, 그 템플릿 내용중에서 <MTEntries> 태그 부분을 아래처럼 수정해 줍니다.
...
</MTEntries>
...
<div id="..."><$MTCategoryPager how_many_pagers="3" $></div>
offset 속성의 값은 항상 위와 같이 "[MTPageOffset]"이어야 합니다. lastn 속성의 값 중에서 "10"의 의미는, 한 페이지 내에 몇개의 엔트리를 표시할 것이냐를 정하는 것입니다.
<$MTCategoryPager$> 태그가 바로 실질적인 페이징 링크를 나타내주는 것입니다. 이 태그의 속성 how_many_pagers는 페이징 링크에 나타낼 연속된 페이지 링크의 갯수를 나타냅니다. 예를 들어 이 값이 3이면 아래처럼 링크가 표시될 겁니다.
<div id="...">1 | 2 | 3 | ... » 8</div> OR
<div id="...">1 ... « 5 | 6 | 7 » ... 12</div>
4.
이제 MT의 "Edit Weblog Configuration" 메뉴에서 "Publishing" 탭으로 갑니다.
5.
여기서 "Create New Archive Mapping"을 눌러서 "category" 아카이브 타입에 조금전 만든 "Dynamic Category Pager" 템플릿을 연결 시킨후 "Add" 버튼을 눌러 줍니다.
6. Archive Mapping 섹션의 카테고리 부분에서 "Dynamic Category Pager"를 "Preferred"로 선택하고, Archive Types의 Category 부분의 선택을 해제합니다.
조금 전 적용은, 내부적으로는 Dynamic Category Pager라는 이름의 템플릿이 카테고리 아카이브에 할당된 주 템플릿으로 설정함과 동시에, 카테고리 아카이브로의 퍼블리싱을 실제로 하진 않겠다는 의미를 나타냅니다. 결론적으로 MT는 어떠한 가시적인 카테고리 아카이브를 생성하지 않습니다.
7.
이제 Main Index 템플릿(일반적으로 메인 인덱스 페이지에서 카테고리 아카이브 링크를 삽입한다는 가정하에)을 열고 카테고리 아카이브를 나타내는 태그 부분을 적당히 수정해 줄 것입니다. 아래 내용은 MT 3.2의 디폴트 메인 인덱스 템플릿의 카테고리 아카이브 부분입니다.
<div class="module-categories module">
<h2 class="module-header">Categories</h2>
<div class="module-content">
<MTTopLevelCategories>
<MTSubCatIsFirst><ul class="module-list"></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li class="module-list-item">
<a href="mt/mt-view.cgi/<MTBlogID>/category/<MTCategoryID>/"><MTCategoryLabel></a>
<MTElse>
<li class="module-list-item"><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</div>
여기서 주의해야 할 점은, 카테고리 아카이브를 가시적으로 퍼블리싱하지 않기 때문에, 위처럼 디폴트로 박혀 있는 <MTIfArchiveTypeEnabled archive_type="Category"> 부분은 "거짓"을 반환하므로 그 안의 태그는 나타나지 않는 다는 것입니다. 따라서 위처럼 그 컨테이너 태그는 삭제를 해줘야 합니다.
또하나 혼동해선 안되는 것은 우리는 카테고리 "아카이브"만 생성하지 않을 뿐, 카테고리 자체의 기능은 그와 별개로 사용할 수 있다는 점입니다. 이 말은 가령 엔트리에 카테고리를 부여하는 등의 행위는 얼마든지 할 수 있으며, 따라서 카테고리 관련한 태그는 위처럼 사용할 수 있다는 것입니다.
디폴트 탬플릿에서는 개별 카테고리 아카이브를 가리키는 링크 주소를 나타내기 위해 <$MTCategoryArchiveLink$> 같은 태그를 사용했지만, 이제는 이 태그를 사용할 수 없다는 것도 알 것입니다. 왜냐면 카테고리 아카이브를 MT가 생성하지 않으므로 당연 주소도 없습니다.
대신에 우리는 mt-view.cgi가 인식하는 동적인 카테고리 아카이브 주소를 수동적으로 입력해야 합니다. 위의 노란 부분처럼 mt-view.cgi 이하 경로를 사용하면 됩니다. 물론 정확한 mt-view.cgi 까지의 경로는 자신의 환경에 맞게 고쳐줘야 할 것입니다.
주의 : 동적인 카테고리 아카이브 주소의 끝은 반드시 슬래시 ('/')로 끝나야 합니다.
끝입니다.
Notes
- 현재 플러그인은 카테고리 아카이브에서 <MTEntries>에만 적용됩니다. 즉 카테고리 아카이브에서 엔트리를 기준으로한 목록을 페이징한다는 것입니다. 물론 이것이 가장 기본이 되는 것은 사실입니다. 차후에는 카테고리 아카이브를 엔트리 기준 외에 가령 카테고리 트랙백을 페이징하는 것도 계획하고 있습니다.
License
Relased under the Creative Commons License.
Version History
- 3.2.01 : First release.
Post a comment