エンジニアブログ

エンジニアブログ
Movable Type プラグイン

静的ページ用ページ分割プラグイン:PageBute

森山 2007年02月01日

2023.04.20 PageButeを更新しました。
PageBute の詳細は以下のページをご確認ください。
https://mtp.skyarc.co.jp/free-plugin/pagebute.html

MT7以前のバージョンは未検証となっております。旧環境をご利用の方は本ページより対応したバージョンをご利用ください。

2018.6.22 PageButeを更新しました。

  • Pagebute3.5.8のMT7動作確認を行いました。
    従来のテンプレートの他、コンテンツタイプテンプレートでも利用可能です。
  • 公開キューを設定したテンプレート内でPageButeの機能が使われている場合に、定期タスクの実行時に大量のワーニングが発生する現象を改善しました。

2013.10.23 PageButeを更新しました。

ページ分割プラグインPageBute3.5.7を公開しました。

 

こんにちは。

PageButeプラグインは、Movable Typeで生成するhtmlをページ分割してくれるプラグインです。静的ページを生成しますのでPHP処理なども考えなくてもよいので、かなり便利なプラグインです。

※なお、検索テンプレートでは使用することが出来ません。ご注意ください。

pagebute.png

プラグインのダウンロード

プラグインのインストール

インストール方法:解凍後、「PageBute」フォルダが生成されますので、生成されたフォルダごとMovable Typeの「plugins」ディレクトリにアップロードします。

プラグインの利用方法

エントリー数が多い場合、自動的にナビゲーションを追加してページを分割してくれます。

<MTPageContents>~</MTPageContents>
区切りたい部分(Entriesなど)を囲むタグです。
このタグに囲まれた部分は、countで指定した件数ごとに区切られて表示されます。
count="*"
MTPageContentsのアトリビュートです。*部分に任意の数字を入れることで、区切る単位を指定します。
指定しない場合は、10件で区切られます。
navi_count="11" 3.xxにて実装
MTPageListsで出力されるページリンク数を変更する為のアトリビュートになります。
指定しなかった場合は11が初期値となります。
abs2rel="1" (3.5.5-)
MTPageContentsの属性として指定します。 PageButeが出力するリンクをすべて相対にします。
<$MTPageSeparator$>
MTPageContents内に記述します。分割する位置を指定します。
<$MTPageLists$>
各ページへのリンクを指定します。
delim="*"
MTPageListsのアトリビュートです。ページ番号とページ番号の間の区切りの指定が可能です。指定しない場合は &nbsp; が入ります。
link_start="<li>"
各ページへのリンクや現在のページ番号を表示する前に指定された文字列を挿入します。通常はlink_closeと併せて利用します。指定されなかった場合には何の文字も挿入されません。MT4.x でのみ動作確認済み
link_close="</li>"
各ページへのリンクや現在のページ番号を表示する前に指定された文字列を挿入します。通常はlink_startと併せて利用します。指定されなかった場合には何の文字も挿入されません。MT4.x でのみ動作確認済み
show_always="0"
0 を指定すると、分割されたページが 1 つにしかならなかった場合、ページリストの 1 を表示しません。デフォルト設定は従来と同じ動作のため 1 が指定されたものとします。
<MTIfPageFirst>~</MTIfPageFirst>
2ページ以降の場合、1ページへ戻るためのリンクが出力されます。
<MTIfPageBefore>~</MTIfPageBefore>
前のページが存在する時に、本タグ内に書かれた内容が出力されます。
<MTIfPageNext>~</MTIfPageNext> (-3.5.6) Update!
次のページが存在する時に、本タグ内に書かれた内容が出力されます。
<MTIfPageAfter>~</MTIfPageAfter> (3.5.7-) New!
次のページが存在する時に、本タグ内に書かれた内容が出力されます。(3.5.7以降、MTIfPageNextと差し替わります)
<MTIfPageLast>~</MTIfPageLast>
2ページ以上ある場合、最後のへ戻るためのリンクが出力されます。
<$MTPageFirst$>
最初のページへのリンクを出力します。
<$MTPageBefore$>
前のページへのリンクを出力します。
delim="*"
前のリンクへの表示部分を指定可能です。指定しない場合は &lt;&lt が入ります。
<$MTPageNext$> (-3.5.6) Update!
次のページへのリンクを出力します。
delim="*"
次のリンクへの表示部分を指定可能です。指定しない場合は &gt;&gt; が入ります。
<$MTPageAfter$> (3.5.7-) New!
次のページへのリンクを出力します。(3.5.7以降、MTPageNextと差し替わります)
delim="*"
次のリンクへの表示部分を指定可能です。指定しない場合は &gt;&gt; が入ります。
<$MTPageLast$>
最後のページへのリンクを出力します。
<$MTPageCount$> (3.4.0-)
現在のページ番号(1以上)を出力します。
<$MTPageMaxCount$> (3.4.0-)
最大のページ番号(1以上)を出力します。
<MTPageContentsHeader>〜</MTPageContentsHeader> (3.5.0-)
ページ分割後の各ページ内で最初のコンテンツの場合に有効になるブロックです。
※MTPageSeparatorより前に記述してください。また、MTPageContents内のMTEntries等のブロック内に指定してください。
<MTPageContentsFooter>〜</MTPageContentsFooter> (3.5.0-)
ページ分割後の各ページ内で最後のコンテンツの場合に有効になるブロックです。
※MTPageSeparatorより前に記述してください。また、MTPageContents内のMTEntries等のブロック内に指定してください。
<MTPageEmpty>〜</MTPageEmpty> (3.5.0-)
MTPageContents内の記事、コメントなどが一件も無い場合、MTPageEmptyで指定された内容をMTPageContentsの場所で表示します。
<MTIfPageNoEmpty>〜</MTIfPageNoEmpty> (3.5.0-)
MTPageContents 内の記事、コメントが一件でもある場合に有効になるブロックです。逆に一件も無い場合はブロック内は表示されません。MTPageContentsや MTPageEmptyの外で利用してください。また、この条件タグは複数指定できますが、入れ子指定は出来ません。
<MTPagination>〜</MTPagination> (3.5.4-)
従来のナビゲーションリンクを出力していたMTPageListsの代わりに使用する事で、ナビゲーションにテンプレートを割り当て、自由に編集できるようにします。
従来では、ある程度固定的な出力となっていたナビゲーションリンクを、テンプレートを割り当てる事で、構造や出力を自由に指定し易く行えるブロックタグです。
<MTPaginationHeader>〜</MTPaginationHeader> (3.5.4-)
MTPaginationで有効なブロックタグです。 MTPaginationのヘッダーとして利用できます。
<MTPaginationFooter>〜</MTPaginationFooter> (3.5.4-)
MTPaginationで有効なブロックタグです。 MTPaginationのフッターとして利用できます。
<MTIfPaginationCurrent>〜</MTIfPaginationCurrent> (3.5.4-)
MTPaginationで有効なブロックタグです。 現在のページを判定します。
<MTIfPaginationFirst>〜</MTIfPaginationFirst> (3.5.4-)
MTPaginationで有効なブロックタグです。 カレントページ番号が最初のページ以外のときに有効となります(ただし最初のループのみ有効)
<MTIfPaginationLast>〜</MTIfPaginationLast> (3.5.4-)
MTPaginationで有効なブロックタグです。 カレントページ番号が最後のページ以外のときに有効となります(ただし最後のループのみ有効)
<MTIfPaginationNext>〜</MTIfPaginationNext> (3.5.4-)
MTPaginationで有効なブロックタグです。 カレントページ番号の次のページが存在する場合有効となります(ただし最後のループのみ有効)
<MTIfPaginationPrev>〜</MTIfPaginationPrev> (3.5.4-)
MTPaginationで有効なブロックタグです。 カレントページ番号の前のページが存在する場合有効となります(ただし最初のループのみ有効)
<$MTPaginationLink$> (3.5.4-)
MTPaginationで有効なファンクションタグです。 プロトコルからページのファイル名までのURLを出力します。
element="number"
対象ページへのリンクから番号のみを取り出します。
element="base"
対象のページへのリンクからファイル名までを取り出します。
element="suffix"
対象のページへのリンクから拡張子のみを取り出します。
<$MTPaginationFirst$> (3.5.4-)
MTPaginationで有効なファンクションタグです。 最初のページへのURLを出力します。
element="number"
対象ページへのリンクから番号のみを取り出します。
element="base"
対象のページへのリンクからファイル名までを取り出します。
element="suffix"
対象のページへのリンクから拡張子のみを取り出します。
<$MTPaginationLast$> (3.5.4-)
MTPaginationで有効なファンクションタグです。 最後のページへのURLを出力します。
element="number"
対象ページへのリンクから番号を取り出します。
element="base"
対象のページへのリンクからファイル名までを取り出します。
element="suffix"
対象のページへのリンクから拡張子のみを取り出します。
<$MTPaginationNext$> (3.5.4-)
MTPaginationで有効なファンクションタグです。 次のページへのURLを出力します。
element="number"
対象ページへのリンクから番号のみを取り出します。
element="base"
対象のページへのリンクからファイル名までを取り出します。
element="suffix"
対象のページへのリンクから拡張子のみを取り出します。
<$MTPaginationPrev$> (3.5.4-)
MTPaginationで有効なファンクションタグです。 前のページへのURLを出力します。
element="number"
対象ページへのリンクから番号のみを取り出します。
element="base"
対象のページへのリンクからファイル名までを取り出します。
element="suffix"
対象のページへのリンクから拡張子のみを取り出します。

サンプル

例1. 以下は、エントリーの一覧を5件ごとに区切った例です。
(※3.5.7以降のバージョンでは、こちらになります。)

<MTPageContents count="5">
<MTEntries>
<MTEntriesHeader><dl></MTEntriesHeader>
     <dt><$MTEntryTitle$></dt>
     <dd><$MTEntryExcerpt$></dd>
<$MTPageSeparator$>
<MTEntriesFooter></dl></MTEntriesFooter>
</MTEntries>
</MTPageContents>
<MTIfPageBefore>
<span><$MTPageBefore delim="前の5件"$></span>
</MTIfPageBefore>
<$MTPageLists$>
<MTIfPageAfter>
<span><$MTPageAfter delim="次の5件"$></span>
</MTIfPageAfter>

 

例2. 以下は、エントリーの一覧を5件ごとに区切った例です。
(※3.5.6までのバージョンで動作します。)

<MTPageContents count="5">
<MTEntries>
<MTEntriesHeader><dl></MTEntriesHeader>
     <dt><$MTEntryTitle$></dt>
     <dd><$MTEntryExcerpt$></dd>
<$MTPageSeparator$>
<MTEntriesFooter></dl></MTEntriesFooter>
</MTEntries>
</MTPageContents>
<MTIfPageBefore>
<span><$MTPageBefore delim="前の5件"$></span>
</MTIfPageBefore>
<$MTPageLists$>
<MTIfPageNext>
<span><$MTPageNext delim="次の5件"$></span>
</MTIfPageNext>

 

例3. 以下は、PageBute3.5.0の場合でエントリーの一覧を5件ごとに区切った例です。
(※3.5.0以下のバージョンでは動作しません。)

<MTPageContents count="5">
<MTEntries lastn="999">
<MTPageContentsHeader><dl></MTPageContentsHeader>
    <dt><$MTEntryTitle$></dt>
    <dd><$MTEntryExcerpt$></dd>
    <MTPageContentsFooter></dl></MTPageContentsFooter>
    <$MTPageSeparator$>
</MTEntries>
</MTPageContents>
<MTPageEmpty><p>記事は未登録です</p></MTPageEmpty>
<div class="pagenate">
    <ul>
        <MTIfPageBefore>
        <$MTPageBefore delim="前の5件"$>
        </MTIfPageBefore>
        <$MTPageLists link_start="<li>" link_close="</li>"$>
        <MTIfPageNext>
        <$MTPageNext delim="次の5件"$>
        </MTIfPageNext>
    </ul>
</div>

このサンプルを「ブログ記事」テンプレートに貼り付け、出力した結果は以下のようになります。

PageContent_ExistEntries2.jpg

もし、同じテンプレートに貼り付けて、1件も該当記事が存在しなかった場合は、
以下のようになります。
(上記サンプルの「<MTPageEmpty>〜</MTPageEmpty>」で出力)

PageExist_NoEntry2.jpg

 

例3. 以下は、PageBute3.5.3以降の場合でアーカイブページに対し、MTPaginationを使ってエントリーの一覧を5件ごとに区切るナビゲーションを表示する例です。
キャプチャ画像は、ブログ記事アーカイブページテンプレートに対し、MTPageLinksタグで書かれたナビゲーションリンクをMTPaginationタグを使った以下のサンプルと置き換えたものです。
(※3.5.3以下のバージョンでは動作しません。)
MTPagenation_sample.jpg

<MTPagination>
    <MTPaginationHeader>
        <div class="pagenate"><ul>
        <MTIfPaginationFirst><li><a class="link_before" href="<$MTPaginationFirst$>">&lt;&lt;</a></li></MTIfPaginationFirst>
        <MTIfPaginationPrev><li><a class="link_before" href="<$MTPaginationPrev$>">前の5件</a></li>< /MTIfPaginationPrev>
    </MTPaginationHeader>
    <MTIfPaginationCurrent>
        <mt:ignore>現在のページ</mt:ignore>
        <li><span><MTPaginationLink element="number"></span></li>
    <MTElse>
        <mt:ignore>それ以外(遷移用のリンクあり)</mt:ignore>
        <li><a href="<$MTPaginationLink$>"><$MTPaginationLink element="number"$></a></li>
    </MTIfPaginationCurrent>
    <MTPaginationFooter>
        <MTIfPaginationNext><li><a class="link_next" href="<$MTPaginationNext$>">次の5件</a></li>< /MTIfPaginationNext>
        <MTIfPaginationLast><li><a class="link_next" href="<$MTPaginationLast$>">&gt;&gt;</a></li></MTIfPaginationLast>
        </ul></div>
    </MTPaginationFooter>
</MTPagination>

 

例4. 以下は、例3のMTPaginationを使ってエントリーの一覧を5件ごとに区切るナビゲーションを表示する例と、前述のPageContentsを組 み合わせた例です。更に、現在表示中の記事が属しているカテゴリの記事だけを取得し、他にも同じカテゴリに所属する記事があるときだけ、文言を追加してい ます(<MTIfPageNoEmpty>〜</MTIfPageNoEmpty>の内容)。
(※3.5.3以下のバージョンでは動作しません。)

<MTIfPageNoEmpty>
    <p>同じカテゴリに属する(<$MTEntryCategory$>)記事一覧:</p>
    <MTSetVars>
        current_category=<$MTEntryCategory$>
    </MTSetVars>
</MTIfPageNoEmpty>

<MTPageContents count="5">
    <MTEntries lastn="999" category=$current_category>
        <MTPageContentsHeader><dl></MTPageContentsHeader>
            <dt><$MTEntryTitle$></dt>
            <dd><$MTEntryExcerpt$></dd>
        <MTPageContentsFooter></dl></MTPageContentsFooter>
        <$MTPageSeparator$>
    </MTEntries>
</MTPageContents>

<MTPageEmpty><p>記事は未登録です</p></MTPageEmpty>

<MTPagination>
    <MTPaginationHeader>
        <div class="pagenate"><ul>
        <MTIfPaginationFirst>
            <li><a class="link_before" href="<$MTPaginationFirst$>">&lt;&lt;</a></li>
        </MTIfPaginationFirst>
        <MTIfPaginationPrev>
            <li><a class="link_before" href="<$MTPaginationPrev$>">前の5件</a></li>
        </MTIfPaginationPrev>
    </MTPaginationHeader>
    <MTIfPaginationCurrent>
        <mt:ignore>現在のページ</mt:ignore>
        <li><span><MTPaginationLink element="number"></span></li>
    <MTElse>
        <mt:ignore>それ以外(遷移用のリンクあり)</mt:ignore>
        <li><a href="<$MTPaginationLink$>"><$MTPaginationLink element="number"$></a></li>
    </MTIfPaginationCurrent>
    <MTPaginationFooter>
        <MTIfPaginationNext>
            <li><a class="link_next" href="<$MTPaginationNext$>">次の5件</a></li>
        </MTIfPaginationNext>
        <MTIfPaginationLast>
            <li><a class="link_next" href="<$MTPaginationLast$>">&gt;&gt;</a></li>
        </MTIfPaginationLast>
        </ul></div>
    </MTPaginationFooter>
</MTPagination>

このサンプルを出力させると、以下のようになります。

PageContent_ExistEntries3.jpg

利用用途

エントリー数が多いアーカイブページなど

※検索テンプレートでは使用することが出来ません。ご注意ください。

注意事項

  • 記事が1件も無い場合には埋め込まれたテンプレートタグはコメントとなり機能しません。最低1件の記事を登録してください。
  • ファイルの生成時に動作するため、MTIf などのタグで数値判別するテクニックは使えません
  • 本プラグインをご利用される方は必ず「プラグインご利用の際の注意事項」をお読みください。