「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
ページ分割プラグイン(Perl版ダイナミック・パブリッシング専用)・その1
先日、Perlでダイナミック・パブリッシングを行う方法を紹介しましたが、それ用のページ分割プラグインを作りましたので公開します。
エントリーを一定の件数ずつ表示し、前後のページへ移動できるようにするものです。
導入の手順は以下の通りです。
1.プラグインのダウンロードとインストール
まず、以下のリンクをクリックしてプラグインのZipファイルをダウンロードします。
Zipファイルを解凍すると、「DivPages」というフォルダができます。 そのフォルダを、Movable Typeの「plugins」ディレクトリにアップロードします。
2.MTDivPagesInitタグの追加
ページ分割を行いたいテンプレートで、その先頭に<$MTDivPagesInit per_page="n"$>のタグを追加します。
「per_page="n"」の部分で、1ページあたりに表示するエントリーの数を指定します。例えば、1ページあたり5件のエントリーを表示するには、「per_page="5"」にします。
なお、「per_page="n"」を省略すると、1ページあたり10件ずつエントリーを出力します。
3.MTEntriesタグの書き換え
テンプレートの中で、エントリーの一覧を出力する部分を探します。
そして、その先頭の「<MTEntries ・・・>」のタグを「<MTEntriesDivPages ・・・>」に書き換えます。
また、最後の「</MTEntries>」を「</MTEntriesDivPages>」に書き換えます。
4.ページ移動リンクを作る
最後に、ページを移動するためのリンクを作ります。エントリー一覧の直後あたりに入れると良いでしょう。
例えば、以下のようなタグを入れると、先頭/最後/前/次ページへのリンクと、ページ番号で移動先を選ぶリストボックスが表示されます。
<MTDivPagesIfMulti> <form id="page_sel" name="page_sel" action="get"> <div> <MTDivPagesIfPrevPage><a href="<$MTDivPagesFirstPageLink$>">先頭ページ</a>|<a href="<$MTDivPagesPrevPageLink$>">前のページ</a>|</MTDivPagesIfPrevPage> <select name="page_num" onchange="location.href='<$MTDivPagesCurPageLink mode="relative"$>?page=' + document.page_sel.page_num.value;"> <MTDivPagesLoop all="1"> <option value="<$MTDivPagesNumber$>"<MTDivPagesIfCurPage> selected="selected"</MTDivPagesIfCurPage>><$MTDivPagesNumber$></option> </MTDivPagesLoop> </select>ページ/<$MTDivPagesCount$>ページ <MTDivPagesIfNextPage>|<a href="<$MTDivPagesNextPageLink$>">次のページ</a>|<a href="<$MTDivPagesLastPageLink$>">最終ページ</a></MTDivPagesIfNextPage> </div> </form> </MTDivPagesIfMulti>
なお、このプラグインで追加されるタグについては、次回以降のエントリーで解説します。
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください
ぽぽ
便利な機能がたくさん掲載されていて、とても助かっています。
Perl版ダイナミックパブリッシングは、どうにかクリアできました。
その後、ページ分割に挑戦したのですが、上記「4.ページ移動リンクを作る」のタグを記述すると、再構築する途中でエラーになってしまいます。
ちなみに、selectタグ部分を記述しなければ、エラーにはなりません。ただし、その場合でも「次ページ」のリンクが、本来は「http://www.aaa.jp/blog/?page=2」になるはずなのに、「http://www.aaa.jp/?page=2」となってしまいます。
解決方法がわかるととても助かります。よろしくお願いします。
壱からぽぽへの返信
>ぽぽさん
こんにちは。
エラーが出たとのことですが、具体的にどのようなエラーメッセージが表示されたでしょうか。
また、実際に運用されているサイトもお見せいただければと思います。
ぽぽからぽぽへの返信
お返事ありがとうございます!
エラーメッセージは次のとおりです。
テンプレート「メインページ」の再構築に失敗しました: タグでエラーが発生しました:
運用しているサイトは、メールに書いたとおりです。
どうぞよろしくお願いします。
ぽぽからぽぽへの返信
すいません。タグ部分が消えてしまいました。
もう一度、エラーメッセージを書きますね。
テンプレート「メインページ」の再構築に失敗しました: <MTDivPagesIfMulti>タグでエラーが発生しました:
よろしくお願いします。
壱からぽぽへの返信
>ぽぽさん
いただいたエラーメッセージだけでは、原因はちょっと分かりません。
原因を究明するには、そちらのサーバーで実際にデバッグしてみることが必要な感じです。
ぽぽからぽぽへの返信
>壱さん
そうですか…。
サーバーでデバッグするところまでお願いするのは申し訳ないので、もう一度、自分で挑戦してみます。
色々とありがとうございました!
Roppon
Perl版ダイナミック・パブリッシング(正常動作)→ページ分割設定後、アーカイブページにアクセスするといかのエラーが吐き出されてしまいます。どこにミスがありそうなのか検討がつかないのでアドバイスいただければ幸いです。
---------------
Smarty error: [in mt:15 line 1]: syntax error: unrecognized tag 'MTDivPagesInit' (Smarty_Compiler.class.php, line 580)
壱からRopponへの返信
>Ropponさん
こんにちは。
そのエラーは、Perl版ダイナミックパブリッシングではなく、MT標準のダイナミックパブリッシングが出力しているものです。
つまり、Perl版ダイナミックパブリッシングが動作していません。
おそらく、.htaccessファイルの修正を忘れていると思いますので、そこを見直してみてください。
RopponからRopponへの返信
>>壱さん
ご指摘のとおりでした。
時間はかかりましたが、無事導入できとてもうれしいです。
ありがとうございました
maechan
はじめまして。
「MovableTypeスーパーカスタマイズテクニック」を購入し、
そしてこのサイトを知るようになり、
自身のブログをダイナミックパブリッシング化し、
こちらのプラグインを導入してページ分割をしています。
非常に素晴らしいツールで大変重宝しております。
ありがとうございます。
質問をさせていただきたいのですが、
カテゴリーアーカイブをページ分割しているのですが、
1ページ目はちゃんと5つの記事が表示されるのですが、
2ページ目以降は1つの記事しか表示されません。
原因がまったくわからないのですが、
ご教授いただけますでしょうか。
よろしくお願いします。
現在はMT3.3を使っています。
壱からmaechanへの返信
>maechanさん
こんにちは。プラグインご利用ありがとうございます。
ご質問の件ですが、MT3.3自体の不具合です。
昨日リリースされたMT3.31では、この不具合が修正されていますので、MT3.31にバージョンアップしてください。
MELL
懲りずにこれもやってみたのですが
リビルドエラーとなってしまいます
何とか導入できないのかなぁ・・・
MELLからMELLへの返信
何とか自己解決し出来上がりました
ちょっとシンプルにしちゃいましたけど
もうちょっと理解出来たら ましになるかな?w
あやね
こんにちは。ダイナミックパブリッシングと共に、こちらのプラグインを便利に使わせていただいています。どうもありがとうございます。
さて、下記サイトを参考に年別アーカイブを作成したのですが、そのページ(例:2006年アーカイブ)ではページ分割ができないのでお問い合わせです。
MovableType備忘録: MovableTypeに年別アーカイブを追加する
http://bizcaz.com/archives/2006/06/24-200811.php
ページの内容はちゃんとその年のエントリーが全部表示されていますが、ページ分割がされていない状態です。年別なので当然エントリー数も多く、出来ればページ分割させたいのですが・・・プラグインそのものの修正が必要でしょうか?
ちなみに、通常の月別アーカイブやカテゴリーアーカイブでは、ページ分割は機能しています。それではよろしくお願いいたします。
壱からあやねへの返信
>あやねさん
こんにちは。
当方のDivPagesプラグインは、通常のMTEntriesタグの処理が行われることを前提に作ってあります。
年別アーカイブのプラグインとの組み合わせは、申し訳ありませんが対象外とさせてください。
あやねからあやねへの返信
>壱さん
対象外とのこと、了解いたしました。残念ですが仕方ないですね。年別アーカイブを作る機能はMT固有のものではありませんし。
素早い回答ありがとうございました。今後ともよろしくお願いいたします。
footbrain
とすると、を使用して、
「親カテゴリーアーカイブにサブカテゴリーのエントリーを表示する」も対象外ですか?
親カテゴリーにサブカテゴリーを表示すれば、表示するエントリーの数も多くなり、
当然、ページ分割を迫られる事になるのですが…
Perl版ダイナミックパブリッシングを用いたままで、
カテゴリーの分類を見直そうとしているところなのですが、
対策を考えなければいけませんね。
footbrainからfootbrainへの返信
ごめんなさい。またやってしまいました。
「とすると、を使用して、」の部分ですが、
<MTEntriesWithSubCategories>が抜けています。
「とすると、<MTEntriesWithSubCategories>を使用して、」です。
壱からfootbrainへの返信
>footbrainさん
こんにちは。
このプラグインでは、申し訳ありませんが、MTEntriesWithSubCategoriesタグの部分を分割することはできません。
うに
こんばんわ。
Perl版ダイナミックパブリッシング導入させて頂きました。
Perl版ダイナミックパブリッシング、ページ分割共に問題なく導入できたんですが、「ページ番号で移動先を選ぶリストボックス」が横長になってしまい、バランスが悪いんです。
リストボックスの大きさを調整する事はできないんでしょうか?
宜しくお願い致します。
壱からうにへの返信
>うにさん
こんにちは。プラグインご利用ありがとうございます。
ご質問の件ですが、スタイルシートで調整できます。
まず、ページ選択のリストボックスのselectタグに、「id="page_num"」を追加してください。
そして、スタイルシートに以下を追加してください。
select#page_num {
width : auto;
}
うにからうにへの返信
壱さん
返信ありがとうございます。
お蔭様で綺麗に整頓できました^^
そして今更なんですが、「ページ番号で移動先を選ぶリストボックス」というのはリストボックスからページ番号を選ぶ事によって選んだ番号のページへ飛ぶっていう事ですよね?
・・・飛ばないんです・・・
左下にスクリプトエラーが表示され、詳細を見てみると
「エラー'document.page_sel.page_num.value'は Null またはオブジェクトではありません」
というMsgが表示されています。
タグの記載に問題があるんでしょうか?
度々申し訳ございませんが宜しくお願い致します。
(_ _(--;(_ _(--; ペコペコ
壱からうにへの返信
>うにさん
こんにちは。
サンプルのselectタグの記述に間違いがありました。
以下のように変えてください。
<select name="page_num" id="page_num" onchange="location.href='<$MTDivPagesCurPageLink mode="relative"$>?page=' + document.page_sel.page_num.value;">
うにからうにへの返信
>壱さん
早速のご返事ありがとうございます。
タグを
?page=' + document.page_sel.page_num.value;">
に書き換え、再構築をしてサイトを確認しましたがスクリプトエラーが表示され、変わりはありません。。。
うにからうにへの返信
あら?
うまく書き込めない・・・
壱からうにへの返信
>うにさん
こんにちは。
ページ選択のフォームが2箇所あって、フォームのIDが重複しているので、JavaScriptがエラーになっています。
まず、2つ目のformタグを以下のように書き換えてください。
<form id="page_sel2" name="page_sel2" action="get">
また、そのフォームの中にあるselectタグで、onchangeの部分にある「page_sel」を「page_sel2」に変えてください。
うにからうにへの返信
>壱さん
ありがとうございます。
お蔭様でうまくいきました^^
5つのエントリーでページ分割してるんですが、それでも結構な長さになってしまう為ページ上下にページ選択を付けてました^^
ちゃんと説明するべきでした。
メインページで別のスクリプトエラーが出てますが、これはページ分割、ダイナミックパブリッシングとは別物ですね^^
お世話になりました~^^/
でぐ
こんにちは、ダイナミックパブリッシングPerlともども便利に使わせていただいております。
早速質問なんですが、MTEntriesDivPagesのsort_byの仕様はどのようになっていますでしょうか?
現在構築中のページにおいて、titleでソートした場合、そのページ内のエントリーは確かにtitle順に並んでいるのですが、全ページ通してきちんとソートはされてはいないように見えます。
つまり…
1ページ目
・あ・か・さ・た・な
2ページ目
・い・き・し・ち・に
…
というように並んでしまうのです。
(もちろん、上記の例のようにエントリーがきれいに入れ違いに並んでいる訳ではありません)
他のコンテンツにおいてはexcerptにフリガナをいれてソートをしているのですが、そちらは全ページに渡って正常にソートがされていたりします。
ちなみに最初のケースでは通常のMTEntryにした場合は問題なくソートされて表示されます。
もし原因がわかればご教授いただければと思います。
以上、よろしくお願いいたします。
壱からでぐへの返信
>でぐさん
こんにちは。プラグインご利用ありがとうございます。
このプラグインでは、内部的には、MTEntriesタグのoffsetとlastnのアトリビュートを動的に変化させて、エントリーを出力しています。
MTEntriesタグでoffset/lastnとsort_orderやsort_byを併用すると、まずoffset/lastnで出力するエントリーが絞り込まれて、その後にsort_orderやsort_byが適用される仕様になっています。
そのため、ご指摘のように、「各ページでの順序は正しいが、全ページで見ると順序が正しくない」という動作になってしまいます。
申し訳ありませんが、この点は仕様ということにさせてください。
でぐからでぐへの返信
>壱さん
迅速なるご回答、ありがとうございました。
なるほど、よく見るとご指摘いただいた通り、投稿日が新しいものから一定件数を取り出してソートされているようです。
ただ一点腑に落ちないのが、先ほど記入したコメントにもある通り、他のコンテンツにおいては思った通りの動作をしているという事です。
こちらはカテゴリごとのエントリー一覧でのソートということでアーカイブテンプレートにて行っているのですが、うまくいかない今回の場合はインデックステンプレートにて行っています。
違いはその点(とソート項目)しか見受けられないのですが、テンプレートの種類によりこのような動作の違いが起こりうるものなのでしょうか。
壱からでぐへの返信
>でぐさん
こんにちは。
繰り返しになりますが、このプラグインは内部的にはMTEntriesタグの処理を呼び出しているだけで、並べ替えの処理はまったく行っていません。
したがって、起こっている結果は、MTEntriesタグの動作によるものです。プラグイン側では、残念ながら対処することができません。
やま
はじめまして!
昨日、movable type をインストールしたばかりの超初心者で、初歩的なことから試行錯誤しています。
ページ分割は必要なので、このプラグインは是非、使わせていただきたいと思います。(感謝)
気がついた点があるので、報告します。
XREAのサーバで、MT は public_html/mt/mt.cgi におき、
ブログは public_html/www.mydomain.com/blog/ フォルダで運用しようとしています。
で、紹介されているサンプル(水色の枠)をみると
(先頭ページ)
(select)
とありますが、先頭ページではドメインのURLが返ってこなくて、HTTP404になります。
($ENV{SERVER_NAME} の値では、ブログのURLが取得できず、mt.cgiを置いているURLが返ってくるのが原因だと思います)
先頭ページのタグにも mode="relative" を追加してやればうまくいくので、報告します。
Tatsuya
ダイナミック・パブリッシングは成功したいのですが、ページ分割の月別・アーカイブを分割しようとするとどうも上手く機能していないらしく、全件表示されてしまいます。ちなみにカテゴリアーカイブはきちんと分割されています。
壱からやまへの返信
>やまさん
こんにちは。
不具合ご指摘ありがとうございました。
該当の行を以下のように修正すれば良いはずです。
誤:
return 'http://' . $ENV{SERVER_NAME} . $uri;
正:
return 'http://' . $ctx->_hdlr_blog_host($args) . $uri;
壱からTatsuyaへの返信
>Tatsuyaさん
こんにちは。
以下の点を確認してください。
1.月別アーカイブテンプレートの先頭に、MTDivPagesInitタグを入れていること
2.エントリー一覧を出力する部分で、MTEntriesタグをMTEntriesDivPagesタグに変えていること
TatsuyaからTatsuyaへの返信
おはようございます。
月別アーカイブのページ分割についてですが、どうやら日別アーカイブのリンクを見ていたらしく、それで上手く機能していないなかったみたいです。
やまからやまへの返信
>壱さん
return 'http://' . $ctx->_hdlr_blog_host($args) . $uri;
紹介していただいた方法でうまくいきました。ありがとうございました。
reaからやまへの返信
初めまして。
私もブログのURLが取得できていないようなのですが、
>該当の行を以下のように修正すれば良いはずです。
>
>誤:
>return 'http://' . $ENV{SERVER_NAME} . $uri;
>正:
>return 'http://' . $ctx->_hdlr_blog_host($args) . $uri;
というのはどのファイルを修正すれば良いのでしょうか?
自分なりに探してみたのですが見つかりませんでした。
reaからやまへの返信
自己解決しました。
DivPages.plの317行目に記述があったので、修正しました。
問題なく取得出来るようになったみたいです。
ひで
管理人様ご苦労様です。
プラグインを使用させていただきました。ありがとうございます。
3つの異なるレンタルサーバー環境で使用したのですが、1つのレンタルサーバーでの動作がうまくいきません。
問題点は
1.ほかのページにジャンプしても、1ページ目と同じ内容しか表示できなく、ページの移動ができません。
2.リストボックスではジヤンプ先のURLに「www」が付いているのですが、先頭/最後/前/次ページのリンクには「www」が抜けていてページが表示されません。レンタルサーバーの環境によってはwwwが抜けていてもちゃんと表示されるのですが、問題のあるレンタルサーバーでは表示されないようです。
1の問題について思うのですが、レンタルサーバー側に何かインストールされていないプログラムがあるのではないかと考えているのですが、その可能性はあるでしょうか?
余談ですが、レンタルサーバー会社にMovableTybeがインストールができなかったので問い合わせたのですが、第3者の関連なのでそちらに聞いてほしいと言われました。しかしながら問題はDBIがインストールされていなく、それをインストールしてもらったところインストールができました。そんなことがあったのでレンタルサーバーが怪しいと思っているのです。
ご迷惑をおかけいたしますがご意見をいただきたく思います。
どうぞよろしくお願いいたします。
壱からひでへの返信
>ひでさん
こんにちは。プラグインご利用ありがとうございます。
ご質問の件ですが、DivPagesプラグインの以下の箇所を書き換えて、動作を試してみてください。
1.78行目~79行目
書き換え前:
my $query = new CGI;
my $cur_page_no = $query->param('page');
書き換え後:
my $app = MT->instance;
my $cur_page_no = $app->{query}->param('page');
2.317行目
書き換え前:
return 'http://' . $ENV{SERVER_NAME} . $uri;
書き換え後:
return 'http://' . $ctx->_hdlr_blog_host($args) . $uri;
ひでからひでへの返信
管理人様お世話様です。
早速ご回答いただきましてありがとうございます。
DNSを変更しましたら
ダイナミック・パブリッシングエラー
キャッシュファイルのコピーに失敗しました
とのことでPerl版ダイナミック・パブリッシングがちゃんと動かなくなってしいました。
すみません。困りました。
壱からひでへの返信
>ひでさん
こんにちは。
まず、Perl版ダイナミック・パブリッシングのキャッシュをクリアしてください。
また、DNSを変えたということですが、ドメイン名も変わったのであれば、Blog全体を再構築してください。
それから、DivPagesプラグインの書き換えでページ移動がうまくできるようになったかどうかも、ぜひお知らせください。
ひでからひでへの返信
管理人様お手数をおかけいたします。ひでです。
ダイナミック・パブリッシングは今日になったらちゃんと動くようになっていました。
すみません。
結果ですがwwwは表示されるようになりましたが、やはりページ移動ができないようです。
壱からひでへの返信
>ひでさん
こんにちは。
ページ移動がうまくいかない件は、これ以上はこちらでは原因は分かりません。
そちらの環境でデバッグする必要があります。
irori
壱様
こんばんは、Perl版ダイナミックパブリッシングではお世話になりました。
こちらのプラグインも便利に使わせていただいています。
ですが、問題がでてきました。
ブログをひとつ増やし、二個目のブログでもDivePagesを使おうとタグを設置したのですが、まったく機能してくれません。
こちらのプラグインは、ひとつのブログにしか使えないものあのでしょうか?
iroriからiroriへの返信
書き忘れました。
二つ目のブログにタグを追加し、表示されたリンクをクリックすると以下のエラーメッセージがでてきます。
404 Not Found
The requested URL /mt-dynamic.php was not found on this server.
二個目のブログフォルダの中にはmt-dynamic.phpが存在しており、Prel版ダイナミックパブリッシングは成功しています。
よろしくご教授お願いいたします。
壱からiroriへの返信
>iroriさん
こんにちは。
申し訳ありませんが、そちらのサーバーにログインして動作を追って見ないと、解決できないと思います。
iroriからiroriへの返信
壱様
こんばんは、iroriです。
難しい状態のようですね。一つでも機能しているので満足です。ありがとうございました。
tattsun
ひで 様、壱 様
>>> 1.ほかのページにジャンプしても、1ページ目と同じ内容しか表示できなく、ページの移動ができません。
>> 1.78行目~79行目
>> 書き換え前:
>> my $query = new CGI;
>> my $cur_page_no = $query->param('page');
>>
>> 書き換え後:
>> my $app = MT->instance;
>> my $cur_page_no = $app->{query}->param('page');
>結果ですがwwwは表示されるようになりましたが、やはりページ移動ができないようです。
ページジャンプをしても、1 ページ目と同様の内容が表示される件ですが、Apache の httpd.conf にある下記の部分がコメントアウトされ機能していないのではないでしょうか?
コメント外し Apache の再起動を行ったらどうでしょうか?
#LoadModule rewrite_module modules/mod_rewrite.so
↓↓↓
LoadModule rewrite_module modules/mod_rewrite.so
(レンタルサーバーだとちょっと上記対応は無理そうですね。)
# 見当はずれの答えでしたら申し訳ありませんm(_=_)m
壱からtattsunへの返信
>tattsunさん
こんにちは。
Perl版ダイナミック・パブリッシング(およびページ分割)は、mod_rewriteが使えない場合は、404エラー時にエラーページにリダイレクトする機能を利用して動作するようになっています。
したがって、mod_rewriteが使えないことは、ページ移動ができないことの原因ではないはずです。
tattsunからtattsunへの返信
壱 様
確かに、.htaccess にて 404 エラーページにリダイレクトするようになっていました。
私の自宅サーバー環境では同様の現象が mod_rewrite を使用できるようにして解決したので正解かと思ってしまいました。:pp_02.gif:
余計な情報をコメントしてしまい誠に申し訳ありませんでした。
スクラン
初めまして。Perl版ダイナミック大事に使わせてもらっています。
さて僕のページでも分割しているので、このPerl版にあった分割を使わせてもらっているのですが、出力するファイルを静的化できないでしょうか?
たとえばトップページの分割URLをhttp://www.h-fj.com/index2.html、http://www.h-fj.com/index3.htmlのようにできないでしょうか?
たいへん厚かましいお願いなのですがぜひ対処方法を教えていただければ幸いです。よろしくお願いいたします
壱からスクランへの返信
>スクランさん
こんにちは。プラグインご利用ありがとうございます。
申し訳ありませんが、このプラグインではページを静的なファイルに出力する機能はありません。
へま
壱様、いつもお世話になっております。
これまで問題なく、ページ分割を利用させていただいておりましたが、この度、サーバーのディレクトリ構成をいじったりした後から、どうも、ページ繰りがおかしくなってしまいました。ページ繰り部分は、こちらのサイトのものをそのまま利用させていただいています。
ブラウザのURLを見てみると、「前のページ」「次のページ」のリンクが、
[[ムーバブルタイプの管理画面のURL]]/blog.html?page=2
となっていました。
[[サイトのURL]]/blog.html?page=2
を、ブラウザから直接打ち込むと、分割されたページにアクセスできるので、ページ分割自体はうまくいっているようです。
(このたび、サイトのURLとは別に、管理画面のURLとして、サブドメインのURLを使うように変えました。)
この状況を直すにはどうしたらよいでしょうか?
ご教授いただけますと嬉しいです。お願いしますm(_ _)m
壱からへまへの返信
>へまさん
こんにちは。プラグインご利用ありがとうございます。
ご質問の件ですが、34番のコメントを参照して、DivPages.plを書き換えてみてください。
へまからへまへの返信
壱様、ご回答いただきありがとうございましたm(_ _)m
試してみましたところ、私のケースではDivPages.plの修正だけでは直らなかったので、ページ繰りのリンクのタグに mode="relative" を追加する作業もして、うまく動くようになりました。ありがとうございました!
アンインストール
ページ分割プラグイン大事に使わせてもらっています!このような有益なプラグインを提供していただき本当に感謝しています!
ぶしつけな質問なのですが、カテゴリページを分割する際にこのプラグインを使わせてもらっているのですが、
カテゴリページのURL:http://hoge.com/カテゴリ/
の場合分割すると1ページ目は
http://hoge.com/カテゴリ/index.html?page=1
になりますが、同じ内容になってしまいSEO的にもあまりよろしくないので、
# MTDivPagesPrevPagelink tag sub
div_pages_prev_page_link {
my ($ctx, $args) = @_;
my $cur_page_no = $ctx->stash('cur_page_no');
if($cur_page_no != 1){
&div_pages_cur_page_link($ctx, $args) . "?page=" . ($cur_page_no - 1);
}
}
と変更してみてpage=1の場合に限りhttp://hoge.com/カテゴリ/でURLを出力してみようと試みてみたのですが上手くいきません。
大変あつかましいのですが、どうにかそのようにできないものでしょうか? 大変申し訳ないのですがぜひご教授いただければ幸いです・・・。
壱からアンインストールへの返信
>アンインストールさん
こんにちは。
プラグインご利用ありがとうございます。
ご質問の件ですが、以下のようにすれば良いはずです。
div_pages_prev_page_link {
my ($ctx, $args) = @_;
my $cur_page_no = $ctx->stash('cur_page_no');
if($cur_page_no == 1) {
&div_pages_cur_page_link($ctx, $args);
}
else {
&div_pages_cur_page_link($ctx, $args) . "?page=" . ($cur_page_no -
1);
}
}
アンインストールからアンインストールへの返信
こんなにお早いご返答ありがとうございます! 早速やってみたのですが、うまくできませんでした。
page=2でみると前のページのURLがpage=1が付加されたままで出力していました。
元のhttp://hoge.com/カテゴリ/からみるとURLはhttp://hoge.com/カテゴリ/index.htmlとindex.htmlが付加される感じで出力されていました。(前のページは無いはずなのに前のページが出力される。)
もしよろしければもう一度アドバイスをよろしくお願いします。
P.S. カテゴリページでつかっているタグは以下の通りです。
<MTDivPagesIfMulti>
<form id="page_sel" name="page_sel" action="get">
<div class="category-pyonpyon">
<MTDivPagesIfPrevPage><a href="<$MTDivPagesPrevPageLink$>">≪ 前のページ</a> | <MTElse>≪ 前のページ | </MTElse></MTDivPagesIfPrevPage><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$>先頭</a> | <MTDivPagesIfNextPage><a href="<$MTDivPagesNextPageLink$>">次のページ ≫</a></MTDivPagesIfNextPage>
</div>
</form>
</MTDivPagesIfMulti>
壱からアンインストールへの返信
>アンインストールさん
こんにちは。
ifの条件判断の部分が間違っていました。申し訳ありません。
以下のようにしてください。
if($cur_page_no == 2) {
それから、URLからindex.htmlを取りたいのであれば、sub div_pages_cur_page_link {・・・}の部分に、以下の赤字の行を追加してください。
sub div_pages_cur_page_link {
my ($ctx, $args) = @_;
my $mode = $args->{'mode'} || 'absolute';
my $uri = $ctx->stash('cur_page_uri');
$uri =~ s/index\.(html|php)$//;
if ($mode eq 'relative') {
return $uri;
}
else {
return 'http://' . $ctx->_hdlr_blog_host($args) . $uri;
}
}
アンインストールからアンインストールへの返信
壱さんありがとうございましたー!完璧にできました!
もしさしつかえなければでいいのですが、http://hoge.com/カテゴリ/?page=2ならばhttp://hoge.com/カテゴリ/index2.htmlにはできないでしょうか?
重ね重ね申し訳ありませんが、もしよろしければご教授ねがいますでしょうか。
壱からアンインストールへの返信
>アンインストールさん
こんにちは。
http://hoge.com/カテゴリ/?page=2 を http://hoge.com/カテゴリ/index2.html のようにするには、mod_rewriteを使ってURLを置換する方法が考えられます。
RiKiKi
壱様
こんにちは。
いまだに Movable Type 3.35 をつかっている時代遅れのものです。
Perl版ダイナミック・パブリッシング、昨日から愛用させていただいております。
そして本日、DivPages を導入してみましたが、動きません。
<$MTDivPagesInit per_page="n"$> を先頭に加え、
<MTEntries></MTEntries> も
<MTEntriesDivPages></MTEntriesDivPages> に変更しました。
テストしたページは、ダイナミック・ページを指定した
カテゴリー・アーカイブページです。
ところが、ページを表示しようとすると、
テンプレート「カテゴリー・アーカイブ」の再構築に失敗しました: <MTEntryTrackbackData>タグでエラーが発生しました: MTEntryTrackbackDataタグが、エントリーのコンテキスト外で使われた可能性があります。コンテナの外に誤って記述していませんか?
とのメッセージがあらわれます。
MTEntryTrackbackData タグを削除しても、
次の MTEntry 関連タグがコンテキスト外でつかわれた、とのエラーです。
どうも、 を認識してくれないようです。
いろいろ調べたのですが、自分では分からずお手上げです。
お忙しいところ恐縮ですが、なにか解決法をご教授いただければ
大変ありがたく思います。
どうぞよろしくお願いいたします。
RiKiKiからRiKiKiへの返信
すみません、タグが消えてしまいました。
> を先頭に加え、
>も
>に変更しました。
MTDivPagesInit per_page="n" を先頭に加え、
MTEntries, /MTEntries タグも
MTEntriesDivPages, /MTEntriesDivPages タグに変更しました。
>どうも、 を認識してくれないようです。
どうも、 MTEntriesDivPages タグを認識してくれないようです。
すみませんでした。
壱からRiKiKiへの返信
>RiKiKiさん
こんにちは。
ダウンロードいただいたプラグインは、MT4以降用です。
MT3用のプラグインをメールでお送りしましたので、そちらと差し替えてください。
RiKiKiからRiKiKiへの返信
壱様
こんにちは。
メールまでいただき、どうもありがとうございました。
無事、ページ分割できました。
ページナビゲーターが出てこないのですが
たぶん自分のミスだと思うのでなんとかがんばってみます。
今回は、本当にどうもありがとうございました!!!
footbrain
こんにちは。
MT5に更新したいのですが、Perl版ダイナミック・パブリッシングのページ分割でトラブっています。
「build error. : Can't locate object method "_hdlr_blog_host" via package "MT::Template::Context" at /*****/plugins/DivPages/DivPages.pl line 433. 」
と表示されてしまうのですが、どうしてなんでしょうか?
壱
>footbrainさん
こんにちは。
現状公開しているプラグイン(1.11)はMT4用になっています。
1.11のDivPages.plを以下のように書き換えれば、おそらく5.0で動作するようになると思います。
・165行目
書き換え前
書き換え後
・447行目
書き換え前
書き換え後
footbrainから壱への返信
「コメントに返信があったときにメールで通知」にチェックしたはずなのですが、通知を確認できず、返信頂いたことに今まで気付かずにいました。ごめんなさい。
回答ありがとうございます。
さっそく書き換えを行い、5.0で動作確認しました。
ところで、5.0に対応してDivPagesを更新される予定は無いのですか?
壱から壱への返信
>footbrainさん
こんにちは。
もちろん更新する予定です。
といっても、コメントした通りの修正をする程度だと思います。