前回途中まで作った「検索結果」テンプレートにJavaScriptを追加して、20件ごとにページ分割する方法を紹介します。
ほげ山くん:先輩!また今回もアップデート情報が出てるらしいじゃないですか!
くれま先輩:だね。2009年3月18日に、前回も触れた4.25が出荷されたのよ!
ほげ山くん:今回はあっという間でしたねぇ。前にも話題に出たMotionが使えるようになったんですよね?
くれま先輩:そうそう!TwitterなどのWebサービスでの活動を集める「アクションストリーム」機能も使えるようになってるから、触ってみたらどうでしょう?蒲生さんのサイトで「アクションストリーム」の活用方法が記事にされていたので、興味のある方は、ぜひチェックしてみてくださいね。
- 【参考ページ】
- 【Movable Type 4.25公開】Action Streamをブログに追加して楽しもう: 世界中の1%の人々へ
http://www.dakiny.com/archives/mt42/movable_type_425action_stream/
- Movable Type 4.25 出荷開始 | MovableType.jp
http://www.movabletype.jp/blog/movable_type_425.html
ページを分割するために必要な手順を確認
くれま先輩:っじゃ、前回の続きをやっていきましょ。今日はいつもと違って、ちょっと複雑なことをするので、よーく説明を聞いてね。まず、今日やることは大まかに分けて次の4ステップになるよ。
- 「検索結果」テンプレート内に、必要な記述を追加する
- デフォルトのテンプレートセットからmt.jsを持ってくる
- デフォルトの「検索結果」テンプレートから、必要なJavaScriptをとってくる
- ヘッダ領域の検索フォームにCGIに渡す引数を足す
ほげ山くん:了解です!
「検索結果」テンプレート内に、必要な記述を追加する
ほげ山くん:では、最初に、「検索結果」テンプレートの編集画面を開きますね。上部メニューの[デザイン→テンプレート]を選択して、「ステムテンプレート」のセクションにある「検索結果」をクリックしましたー。
くれま先輩:足す部分が多いので、一ヶ所づつ説明していくね。最初はhead要素内の<mt:Include module="head要素" />のすぐ後ろに、こういう風に足してね。
ほげ山くん:あれ?「mt.js」って第4回で削除したんじゃなかったでしたっけ?
くれま先輩:ごめんね…。あの時は、「検索結果」テンプレートにAjaxを使う説明をする計画がなかったの…。だけどそれをするには、必要な関数が記述されている「mt.js」が必要だから、あとでデフォルトのテンプレートセットから持ってくるようにさせてね。
ほげ山くん:ふーん。分りました。あと、「ページ分割用JavaScript」っていうテンプレートモジュールも作ってないですよね?
くれま先輩:うん。それはこれから作るからね。次は、<mt:SearchResults>~</mt:SearchResults>までを、次のようにまるっと書き換えてね。
ほげ山くん:長いですね!!!ちょっと解説してくださいよ!
くれま先輩:<div id="search-results">はJavaScriptのソースからDOM要素を取得するために必要なので足しているんだよ。<span id="current-page" class="hidden"><mt:CurrentPage /></span>も記述しないとAjaxによる動作ができないので、足してね。
ほげ山くん:後は、<mt:SearchResultsFooter>のところが物凄く追加されましたねぇ。
くれま先輩:mt:SearchResultsFooterの中身は、ページ分割されるときに表示されるこんなナビゲーションを作っている部分なのよ。
ほげ山くん:なるほど、ページ数が多いとき「ページ番号」「< 前」「次 >」などを出して、前後ページに移動させるアレですね。
くれま先輩:<mt:IfPreviousResults>は、いま見ているページよりも前のページがある場合に中身を処理するんだよ。つまり、「< 前」を出力してる。mt:PagerBlockの中身は、検索結果ページの総ページ分繰り返し処理されるの。
ほげ山くん:1 2 3 4…っていう数字が出されてる部分ですか?
くれま先輩:そうよ。その数字を出力するのは、<mt:Var name="__value__" />の部分だね。「__value__」を使って、繰り返した数を出力しているんだよ。
ほげ山くん:<mt:Unless name="__last__">の部分っていうのは、「~でないとき」に実行されるんですよね?
くれま先輩:そうだね。「__last__」は、繰り返しの最後を表しているから、繰り返しの最後で無い場合は「 」が数字の間に挟まるってことね。
ほげ山くん:なるほど、長いけど少しづつ見ていくと、理解できそうですね。
くれま先輩:うんうん。後は「< 前」「次 >」を囲っているa要素の中に「onclick」があるけれど、この部分でJavaScriptを動作させているわけだ。
ほげ山くん:はーい。
くれま先輩:最後に、<!-- end div#primary --></div>の直前にこれを書いてね。
ほげ山くん:できましたー。
くれま先輩:はい、じゃあここまで書けたら、「保存」をクリックしておいてね。
デフォルトのテンプレートセットからmt.jsを持ってくる
ほげ山くん:次は「mt.js」ですよね?
くれま先輩:うん、そう。さっきも話したけど、これを削除してしまったので、新規のブログを作って、そこからコピーして持ってきましょ。
ほげ山くん:新規のブログを作る…。えーっと、右上の[システムメニュー→ブログ]を選択するんですよね。で、「ブログを作成する」をクリック、と。
くれま先輩:ブログの名前とサイトURL+サイトパスのディレクトリ名は、は、いままでのものと被らないように何か入力してみてね。試しに「test」とかでいいよ。
ほげ山くん:はいー。テンプレートセットは「プロフェッショナルウェブサイト」にしときます。で、「ブログを作成する」をクリック。
くれま先輩:そうしたら、上部メニューの[デザイン→テンプレート]を選択して、「インデックステンプレート」のセクションの「JavaScript」をクリックしてね。
ほげ山くん:すごく長いソースが入ってますね…。
くれま先輩:ここは詳しく解説しないので、全部のソースをコピーしておいてね。で、左上のプルダウンメニューから「絵本出版のリブリート」のブログの方に戻ろう。
ほげ山くん:戻りました。
くれま先輩:そうしたら、上部メニューの[デザイン→テンプレート]を選択して、「インデックステンプレートを作成」をクリックして。名前を「JavaScript」、出力ファイル名を「mt.js」にして、他はとくに触らずに「保存」をクリックしてね。
デフォルトの「検索結果」テンプレートから、必要なJavaScriptをとってくる
ほげ山くん:デフォルトの「検索結果」テンプレートを使うということは、またさっき作った「test」ブログに移動すればいいんですね?
くれま先輩:うん。「test」ブログの「検索結果」テンプレート編集画面を開いてね。デフォルトのソースが記述されているけど、その中で次の2つの部分を使うので、コピーしておいてね。
ほげ山くん:あぁ、じーっと見てたら、発見できましたw これって、テンプレートモジュールにすればいいんですよね?
くれま先輩:うん、それぞれ名前をつけて、新規テンプレートモジュールにしておいてね!
ヘッダ領域の検索フォームにCGIに渡す引数を足す
くれま先輩:最後に、検索結果1ページに表示させる結果の数をコントロールするために、ヘッダ領域に入ってる検索フォームのところに要素を追加するよ。上部メニューの[デザイン→テンプレート]を選択して、テンプレートモジュールのセクションにある「ヘッダ領域」をクリック。
ほげ山くん:しましたー。
くれま先輩:そうしたら、<input type="hidden" name="IncludeBlogs" value="<mt:BlogID />" />っていう行を書いたと思うので、その直後にこの一行を追加してね。
ほげ山くん:mt:SearchMaxResultsって、なんでしたっけ?
くれま先輩:検索で返される結果の最大数を出力するタグなのよ。
ほげ山くん:なるほど。その最大値って、どこかで設定するんですか?
くれま先輩:環境設定ファイル(mt-config.cgi)で設定できるんだけど、今回はデフォルトの値「20件」のままで行こうと思うので、設定はこれにて終了!今回はちょっと長くなってしまったので、この辺で。
ほげ山くん:今日の作業で、ページ分割ってできるようになったんですか?
くれま先輩:うん、なってるよ!次回は必ず、検索用テンプレートを完成させて、動作の確認をしようね!
次回予告