お知らせ

Movable Type 5.1 Webサイト製作ガイドVolume 22011年7月20日

Movable Type 5.1 Webサイト製作ガイドVolume 2」を発売しました。
前書「Movable Type 5 Webサイト製作ガイド Volume 2」をMovable Type 5.1対応に改訂しました。 「Movable Type 5.1 Webサイト製作ガイドVolume 1」の続編で、変数等の応用的な機能や、ウェブサイトやテーマなどのMovable Type 5の新機能についてしっかり解説した書籍です。
Movable TypeでWeb製作をされている方などにお勧めです。
PDFによる販売で、当サイトでのみ購入できます(書店では購入できません)

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

ページ分割プラグイン(Perl版ダイナミック・パブリッシング専用)・その2

| コメント(31) | トラックバック(0)

先日、Perl版ダイナミック・パブリッシング用のページ分割プラグインを紹介しました。
このプラグインをインストールすると、多数のテンプレートタグが追加されます。
今回は個々のタグの書き方を解説します。

MTDivPagesInitタグ

ページ分割を初期化します。このタグは、テンプレートの先頭に入れてください。
書き方は以下のようになります。

<$MTDivPagesInit per_page="n"$>

「per_page="n"」で、1ページあたりのエントリーの出力件数を指定します。
例えば、1ページあたり5件のエントリーを出力する場合は、「per_page="5"」とします。
なお、「per_page="n"」を省略すると、1ページあたり10件ずつエントリーを出力します。

MTEntriesDivPagesタグ

MTEntriesタグをページ分割用にしたもので、エントリーの一覧を出力するためのコンテナタグです。
書き方は以下のようになります。

<MTEntriesDivPages lastn="x" offset="y">
各エントリーを出力するタグ等
</MTEntries>

「lastn="x"」で、出力するエントリーの件数を指定します。省略した場合は、MTDivPagesInitタグの「per_page」で指定した件数になります。
また、「offset="y"」を指定すると、ページの先頭からy件のエントリーを飛ばして、その次のエントリーから出力することができます。

MTDivPagesCountタグ

分割されたページ数を表す変数タグです。
例えば、エントリーが200件で、1ページあたり10件出力する場合、このタグの出力は20になります。

MTDivPagesIfMultiタグ

ページが分割されているかどうかを判断するための条件タグです。
ページが分割されていれば、<MTDivPagesIfMulti>と</MTDivPagesIfMulti>の間の部分が出力されます。

MTDivPagesEntryCountタグ

全エントリー数を出力する変数タグです。

MTDivPagesCurPageNumber

現在表示中のページ番号を出力する変数タグです。
先頭のページが1ページになります。

MTDivPagesCurPageFirstEntryNumber/MTDivPagesCurPageLastEntryNumberタグ

現在表示中のページでの、先頭/最後のエントリーの番号を出力する変数タグです。
例えば、1ページあたり10ずつ表示するようにした場合で、現在2ページ目が表示されている場合、MTDivPagesCurPageFirstEntryNumber/MTDivPagesCurPageLastEntryNumberタグのそれぞれの出力は、11と20になります。
「100件中11~20件目」のように表示する際に使います。

MTDivPagesLoopタグ

ページ番号の一覧を出力するコンテナタグです。
アトリビュートを何も指定しないか、もしくは「all="1"」のアトリビュートを指定すると、すべてのページ番号を出力します。
また、以下のアトリビュートを指定することで、一部のページ番号だけを出力することもできます。

アトリビュート内容
first="x"先頭からxページ分の番号を出力します
mid="y"現在表示中のページの前後yページ分の番号を出力します
last="z"最後からzページ分の番号を出力します
delimiter="○"ページ番号が飛ぶ際に、その間に表示する文字を指定します
glue="○"ページ番号とページ番号の間に表示する文字を指定します

例えば、以下のようにタグを書くとします。

<MTDivPages first="3" mid="1" last="3" delimiter="-" glue=" | ">
ページ番号等を出力するタグ
</MTDivPages>

この場合で、ページが全部で20ページあって、現在10ページ目が表示されているすると、以下のようにページ番号が出力されます。

1 | 2 | 3 | - | 9 | 10 | 11 | - | 18 | 19 | 20

MTDivPagesNumberタグ

MTDivPagesLoopタグのコンテナの中で使い、個々のページ番号を出力するタグです。
ただし、MTDivPagesLoopタグで「delimiter="○"」のアトリビュートを指定している場合、ページ番号が飛ぶ箇所では、「○」で指定した文字が出力されます。

MTDivPagesLinkタグ

MTDivPagesLoopタグのコンテナの中で使い、個々のページへのURLを出力するタグです。

MTDivPagesLoopHeaderタグ

MTDivPagesLoopタグのコンテナの中で使い、コンテナの先頭のページ番号を出力しているかどうかを判断する条件タグです。

MTDivPagesLoopFooterタグ

MTDivPagesLoopタグのコンテナの中で使い、コンテナの最後のページ番号を出力しているかどうかを判断する条件タグです。

MTDivPagesIfCurPageタグ

MTDivPagesLoopタグのコンテナの中で使い、出力するページ番号が、現在表示中のページ番号と同じかどうかを判断するための条件タグです。
「現在のページ番号だけ色を変えて出力する」といった用途に使います。

MTDivPagesIfDelimiterタグ

MTDivPagesLoopタグのコンテナの中で使い、ページ番号が飛ぶ箇所かどうか(delimterアトリビュートで指定した文字を出力する箇所かどうか)を判断する条件タグです。

MTDivPagesFirstPageLinkタグ

先頭のページのURLを出力する変数タグです。

MTDivPagesLastPageLinkタグ

最後のページのURLを出力する変数タグです。

MTDivPagesNextPageLinkタグ

次のページのURLを出力する変数タグです。

MTDivPagesPrevPageLinkタグ

前のページのURLを出力する変数タグです。

MTDivPagesIfFirstPage

現在表示中のページが先頭のページかどうかを判断する条件タグです。

MTDivPagesIfLastPage

現在表示中のページが最後のページかどうかを判断する条件タグです。

MTDivPagesIfNextPage

現在表示中のページに、次のページがあるかどうかを判断する条件タグです。

MTDivPagesIfPrevPage

現在表示中のページに、前のページがあるかどうかを判断する条件タグです。

MTDivPagesCurPageLink

現在表示中のページのURLを出力する変数タグです。

Facebook連携

当記事について「いいね」や「送信」を行っていただけると幸いです。


この記事についてウォールに投稿

トラックバック(0)

トラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/217.

コメント(スレッド30件,コメント31件)

コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。

No.1 弊社 : (無題)

MTPaginateみたいな表示にはできませんか?
現在表示しているページ番号だけリンクを外したいのです。
あと、ページ番号の間にセパレーターを入れることはできませんか?
少しタグの説明が不親切かと思います。
変数タグは$をつけるなどしたほうがいいのでは。。。

No.2  : (無題)

>弊社さん
こんにちは。

現在表示しているページ番号かどうかは、MTDivPagesIfCurPageタグで判断することができます。
また、ページ番号の間にセパレータを入れるには、MTDivPagesIfLastPageタグで最後のページかどうかを判断し、最後のページ以外ではセパレータの文字を出力するようにします。

No.3 弊社 : (無題)

MTDivPagesLoopと$MTDivPagesNumber$で各ページへのリンクをつくった場合、MTDivPagesIfCurPageで現在のページを判断しても、現在のページ番号の色を変えるとか、サイズを変えるとかは出来たんですが、リンクを外すことができません。
もしかしてタグの記述になにかあるのでしょうか。

<MTDivPagesLoop mid="5" delimiter="-">
<a href="<$MTDivPagesLink$>"><MTDivPagesIfCurPage><b><font size="+1"></MTDivPagesIfCurPage><$MTDivPagesNumber$><MTDivPagesIfCurPage></b></font></MTDivPagesIfCurPage></a>
</MTDivPagesLoop>

とした場合に、現在ページにまでリンクが貼られてしまうというものです。

No.4  : (無題)

>弊社さん
こんにちは。
以下のようにタグを組んで、現在のページならページ番号とb/fontタグを出力し、そうでないならリンクを出力するようにすれば良いです。

<MTDivPagesLoop mid="5" delimiter="-">
<MTDivPagesIfCurPage>
<b><font size="+1"><$MTDivPagesNumber$></font></b>
<MTElse>
<a href="<$MTDivPagesLink$>"><$MTDivPagesNumber$><MTDivPagesIfCurPage></a>
</MTElse>
</MTDivPagesIfCurPage>
</MTDivPagesLoop>

No.5 弊社 : (無題)

アドバイスありがとうございます。
無事できました。

No.6 ノイ : (無題)

perl版ダイナミック・パブリッシングはおかげさまでうまくいったのですが(キャッシュは失敗しました。。。)、
ページ分割プラグインがうまく動いてくれません。

Build Error
ご指定のアドレスのページは見つかりませんでした。
uri = /blog/index.php?page=2

というメッセージが出てしまいます。。。

MTDivPagesInitタグで表示件数は指定出来るので、プラグインは動作しているようです。
なにか心当たりがありましたらヒントでも構いませんので、教えて頂ければ助かります。
ちなみに、サーバーはロリポップです。
よろしくお願いいたします。

No.7 ノイ : (無題)

すみません。
ブログのURLを記述し忘れていました。
プラグインはメインページに使用しています。

No.8  : (無題)

>ノイ さん
こんにちは。プラグインご利用ありがとうございます。

そちらのBlogを拝見しましたが、エラーの原因はちょっと分からないです。申し訳ありません。

No.9 ノイ : (無題)

>壱さん
早速レスありがとうございます。

>そちらのBlogを拝見しましたが、エラーの原因はちょっと分からないです。申し訳ありません。

そうですか。。。
了解しました。ありがとうございます。
素人はあまり手を出さない方がよさそうですね。。。
もう少し勉強してからページ分割に再度挑戦したいと思います。
それまでは個別エントリーのみダイナミックパブリッシングを有効にしておきます。

ちなみに、今更なんですが、mt-dynamic.cgiを入れた上で動的にページが生成されていればperl版ダイナミックパブリッシングは実現出来ていると判断していいんでしょうか?
そこが少し気になっています。

それと、今後挑戦される方へのメモとして少しご報告を。
●mt-dynamic.phpの40行目あたりのpreg_match関数?で下記のエラーが出たので、
if (preg_match('/(.*)\?.*/', $uri, $matches))と
if (preg_match('/\/$/', $uri))の2行を
if (preg_match("{(.*)\?.*}", $uri, $matches))と
if (preg_match("{\/$}", $uri))
に変更させて頂いたところエラーがなくなりました。

エラー:
Warning: preg_match(): Unknown modifier '$' in
サイトパス/mt-dynamic.php on line 40

●ロリポップでsqlsub_mysql.phpからMySQLに接続出来ず以下のようなエラーが出てました。
これは解決していません。
(記述する設定に問題はありませんでした。)

エラー:
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in
サイトのパス/sqlsub_mysql.php on line 7
SQLに接続することができませんでした。


以上です。

No.10 へま : (無題)

エントリーアーカイブのページ分割はできないのでしょうか?
PHP版のダイナミックパブリッシングで使える、タグをつかってページ分割したく考えているのですが。よろしくお願い致します。

No.11 へま : (無題)

↑ページ分割したいのは、エントリーアーカイブではなくて、「エントリーの内容」でした。すみません。よろしくお願い致します。

No.12  : (無題)

>へまさん
こんにちは。

このプラグインでは、申し訳ありませんが、エントリーアーカイブページの分割はできません。

No.13 へま : (無題)

ご回答いただき、ありがとうございました。

No.14 スプリング・エフェメラル : (無題)

上記の説明からして、エントリー数の指定で分割が可能ですが
日付ごとの分割は可能にはならないでしょうか?
例えば
1ページごとに5日分のエントリーを表示する

といった感じです。
よろしくお願いします。

No.15  : (無題)

>スプリング・エフェメラルさん
こんにちは。

このプラグインでは、内部的には「~」タグの「offset="○○"」の部分を動的に変化させて、ページを分割しています。
日付単位で分割しようとすると、このような手法ではなく、複雑なロジックを組むことが必要になり、プラグインの作りを大きく変える必要があります。

No.16 海月 : (無題)

perl版ダイナミック・パブリッシングとともに
こちらの分割プラグインを利用させていただきました。
perl版ダイナミック・パブリッシングはうまく動作しているのですが、
分割プラグインがうまく動作しません。
表示的にはきちんと分割されているようなのですが、
リンクをクリックしても1ページ目から飛ばないのです。
これは何かタグが足りないのでしょうか。
MTDivPagesInitタグをテンプレートの最初に入れるとありますが
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ~>の上に
表記すればいいんですよね。
リンク先を見るときちんと「?page=2」と言った風に表示されてはいます。
なぜリンク先に飛ばないのか・・・・・・ご教授いただければ嬉しいです。

No.17  : (無題)

>海月さん
こんにちは。プラグインご利用ありがとうございます。

ご質問の件ですが、申し訳ありませんが、そちらのサーバーにログインして調べてみないと、原因をつかめそうにありません。

No.18 茶。 : (無題)

このプラグインではコメントを分割することはできるのでしょうか。

No.19  : (無題)

>茶。さん
こんにちは。

このプラグインはMTEntriesタグの分割にのみ対応しています。
その他のものを分割することはできません。

No.20 茶。 : (無題)

壱さま

やはりそうですか。
ありがとうございました。

No.21 上町 : (無題)

こんにちは。
こちらのプラグインを導入しページ分割はうまくいったのですが
「その1」に例文として掲載されている前後リンクをそのままコピペしたところ
うまく働きません。
ご教示いただければ幸いです。

サーバーには

/www/
┣ /mt/ ←mtのシステム部分が入っているフォルダ
┗ /site/
┗ /memo/←ページ分割したいブログ

という構成で置いており
/site/は site.com という感じで独自ドメイン、
/memo/は memo.site.com という感じでサブドメインで運用しています。

プルダウンでページを選ぶ部分は正しく
http://memo.hogehoge.com/index.html?page=n
と出力されるのですが
前後リンクや先頭・末尾ページへのリンクが
http://username.server.ne.jp/memo/index.html?page=n
となってしまい
/memo/は/site/の下にあるのでNot Foundになってしまいます。

こういった構成のとき前後リンクや先頭・末尾リンクを正しく出力するには
どのようにすればよろしいでしょうか。
お手数をおかけいたしますがよろしくお願いします。

No.22 上町 : (無題)

すみません、「その1」でのコメント33~34にて自己解決いたしました。
ご迷惑をおかけいたしました。

No.23 zane : (無題)

こんばんは!
MTDivPagesLoopタグを使っていますが、
delimiterの部分はカレントページにリンクを指しています。いろいろ試していましたが、解除されませんでした。
よろしかったら、教えていただけませんでしょうか。
よろしくお願いいたします。

No.24  : (無題)

>zaneさん
こんにちは。

どのようにタグを組み合わせられたか分からないので何とも言えませんが、DivPagesIfDelimiterタグを使って、delimiterかどうかを判断して、リンクするかしないかを分けるようにすれば良いのではないかと思います。

No.25 MT初心者 : (無題)

いつも大変参考にさせいてただいております。
「再構築を不要にするカスタマイズ(ページキャッシュ機能追加)」でコメントさせていただいたものです。

さっそくこちらのプラグインも導入いたしまして、ページ分割はうまくいったのですが、実はカテゴリごとにページを表示したいと考えております。
現在はカテゴリに関係なく、すべてのエントリーを「<MTDivPagesLoop>」で持ってきているようなのですが、これを「<MTDivPagesLoop glue=" | " category="xxx">」といった形でカテゴリごとにページ分割することは可能でしょうか?

No.26  : (無題)

>MT初心者さん
こんにちは。

「<MTDivPagesLoop glue=" | " category="xxx">」のような書き方はできません。
カテゴリーごとにページを分けたいのであれば、カテゴリーアーカイブをページ分割してください。

No.27 MT初心者 : (無題)

管理人様

早速のご回答ありがとうございました。
アドバイスいただきましたとおり実装いたしまして、無事動作いたしました。

いまひとつMTのカテゴリアーカイブの使い方に慣れていなかったのですが、わざわざインデックステンプレートをカテゴリごとに設置する必要はないですよね。

No.28 kaburk : MTEntriesDivPagesタグについて

MT5にてプラグイン使わせていただきました。

MTEntriesDivPagesタグですが、設定→投稿の公開の既定値:順番の値が反
映されないようですね汗

sort_orderモディファイア等も効かないようなので、
MTEntriesタグでは有効だったモディファイアが使えるような考慮されるとうれしいです。

No.29  : Re:MTEntriesDivPagesタグについて

>kaburkさん
こんにちは。

ご指摘の件は、今後の検討課題にしたいと思います。

No.30 makimaki : (無題)

初めてコメントします!

DivPagesプラグインをブログで有効にするとMTPaginate(こちらはエントリーページの分割で使用しています)プラグインと併用できなくて困っています。

MTPaginateで生成した「次のページ」をクリックすると「ページが見つかりません」となります。生成されたリンクはこのようになっていました: http://hoge.com/blog/post/mt-dynamic.php?page=2

どちらかのプラグインを少しいじれば併用可能な気がするのですが、アイデアありませんでしょうか?

No.31  : (無題)

>makimakiさん
こんにちは。

ご質問の件について記事にまとめました。

http://www.h-fj.com/blog/archives/2010/07/29-112745.php

コメントする


Facebookでコメント

試験的にFacebookのコメントフォームを設置しました。