MT4 でブログ内検索をカテゴリ毎に行なう方法

2009年11月29日 20:41 MT4 でブログ内検索をカテゴリ毎に行なう方法

相変わらず Movable Type 5 がリリースされても気にせず MT4 ネタですよっと。

Movable Type には mt-search.cgi というブログ内検索用の CGI が用意されていますが、この検索フォームを、カテゴリ別に検索できるよう設定する方法です。

基本的には、mt-search.cgi に、category="hogehoge" という形でカテゴリ名を渡せば、検索結果はそのカテゴリ内のブログ記事に限定されます。

なので、例えばプルダウンのリストボックスでカテゴリを選択できるブログ内検索フォームを作りたければ、以下のようなテンプレートになります。

<form method="get" action="<$MTCGIPath$><$MTSearchScript$>">
  <input type="hidden" name="IncludeBlogs"
  value="<$MTBlogID$>" />
  <select name="category">
    <option value=""カテゴリ</option>
    <MTTopLevelCategories>
    <option value="<$MTCategoryLabel$>"><$MTCategoryLabel$></option>
    </MTTopLevelCategories>
  </select><br />
  <input type="text" name="search"
  value="<$MTSearchString encode_html="1"$>" size="20" maxlength="128" />
  <input type="submit" value="ブログ内検索" />
</form>

また、複数カテゴリを条件に含む場合は、

<input type="hidden" name="category"
value="'カテゴリ1' OR 'カテゴリ2'" />

のように「OR」で区切ると良いです。

関連するブログ記事
スポンサード リンク
カテゴリー
Movable Type 4
タグ
form要素 | input要素 | Movable Type | option要素 | select要素 | xhtml | 検索

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

 

MT4 で MTPaginate プラグインを使って各種アーカイブのページ分割をする

Movable Type 5 がリリースされたというのに、相変わらず MT4 ネタで気にせずいきますよ。ええ。

というわけで、各種ブログ記事アーカイブ(月別一覧やカテゴリー別一覧等)のブログ記事数が多くなりすぎて、ひとつのアーカイブが縦長になりすぎてしまう際の解決方法としての、ページ分割です。
MTPaginate というプラグインを使います。

なお、このプラグインを使用する上で、MTから出力される各種ファイルが PHP で動いている必要があります。
なので、「設定」⇒「公開」の「アーカイブオプション」で「ファイルの拡張子」を「php」等にしておくか(下図参照)、あるいは.htaccess で .html 等の拡張子で PHP を実行させる方法さくらのレンタルサーバーで PHP を .html 等の拡張子で実行させる方法等を参考に、元々設定されている拡張子で PHP が動くようにしておかないといけません。

01.JPG

その上で、以下テンプレート内の MTEntries タグ近辺の部分のサンプルです。

<!-- ページ分割するテンプレート全体のコンテナタグ -->
<MTPaginate>

<!-- 分割されたページのナビゲーション部分 -->
  <MTPaginateIfMultiplePages>
  <div>
    <MTPaginateIfLastPage_>
    <a href="<$MTPaginatePreviousPageLink$>"><<前のページへ</a>
    </MTPaginateIfLastPage_>
    <MTPaginateIfMiddlePage_>
    <a href="<$MTPaginatePreviousPageLink$>"><<前のページへ</a>
    </MTPaginateIfMiddlePage_>
    <$MTPaginateNavigator style="links"$>
    <MTPaginateIfMiddlePage_>
    <a href="<$MTPaginateNextPageLink$>">次のページへ>></a>
    </MTPaginateIfMiddlePage_>
    <MTPaginateIfFirstPage_>
    <a href="<$MTPaginateNextPageLink$>">次のページへ>></a>
    </MTPaginateIfFirstPage_>
  </div>
  </MTPaginateIfMultiplePages>

<!-- ブログ記事何件で分割するかを指定(例では10件) -->
  <MTPaginateContent max_sections="10">
  <MTEntries>
  <!-- ここにブログ記事を表示する色々なタグなど -->
  <$MTPaginateSectionBreak$>
  </MTEntries>
  </MTPaginateContent>

</MTPaginate>

なお、この方法でページ分割しても、ひとつのアーカイブファイル内に格納されるブログ記事数はそのままなので、各ファイルの容量を抑える・一ファイルに対してかかる再構築時の負荷を減らす等の目的での導入は無意味ですので悪しからず。

関連するブログ記事
カテゴリー
Movable Type 4
タグ
Movable Type | MTEntries

コメント(12) | トラックバック(1)

 

MT4 でサイトマップを作る際のテンプレート

頻繁に使うのでメモっときます。
基本的にはMT5でもそのまま使えるでしょう。

<!-- フォルダ&ウェブページ -->
<MTTopLevelFolders>
  <MTSubCatIsFirst>
  <dl>
  </MTSubCatIsFirst>
    <dt><$MTFolderLabel$></dt>
    <dd><$MTFolderDescription$>
    <MTIfNonZero tag="MTFolderCount">
      <ul>
      <MTPages>
        <li><a href="<$MTPagePermalink$>"><$MTPageTitle$></a></li>
      </MTPages>
      </ul>
    </MTIfNonZero>
    <$MTSubFolderRecurse$>
    </dd>
  <MTSubCatIsLast>
  </dl>
  </MTSubCatIsLast>
</MTTopLevelFolders>

<!-- カテゴリ&ブログ記事(エントリ) -->
<MTTopLevelCategories>
  <MTSubCatIsFirst>
  <dl>
  </MTSubCatIsFirst>
  <MTIfNonZero tag="MTCategoryCount">
    <dt><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a>
  <MTElse>
    <dt><$MTCategoryLabel$>
  </MTIfNonZero>
    </dt>
    <dd><$MTCategoryDescription$>
    <MTIfNonZero tag="MTCategoryCount">
      <ul>
      <MTEntries>
        <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
      </MTEntries>
      </ul>
    </MTIfNonZero>
    <$MTSubCatsRecurse$>
    </dd>
  <MTSubCatIsLast>
  </dl>
  </MTSubCatIsLast>
</MTTopLevelCategories>

<!-- 月別アーカイブ -->
<ul>
  <MTArchiveList archive_type="Monthly">
  <li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>
  </MTArchiveList>
</ul>

特に変わったことはしてないですが、強いて言えば、 MTTopLevelFolders 等のフォルダ系のブロックタグの中でも MTSubCatIsFirstMTSubCatIsLast といった一部のカテゴリ系ファンクションタグが使える、という点でしょうか。

関連するブログ記事
カテゴリー
Movable Type 4
タグ
Movable Type | xhtml | サイトマップ

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

 

JavaScript で「このページを印刷」ボタンを設置する方法

わざわざエントリー上げるほどのことなのかという気もしますが、備忘録ということで。

ブラウザで表示しているページの印刷は、JavaScipt の、

window.print();

で行なえます。

なので、サイト上に印刷ボタンを設置したければ、

<form method="get" action="#">
  <input type="button" value="印刷する"
  onclick="window.print();" />
</form>

とでも書いておけば以下のようなボタンが表示されます。

関連するブログ記事
カテゴリー
JavaScript
タグ
form要素 | input要素 | JavaScript | xhtml | 印刷

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

 

MT4 でカテゴリやフォルダを好きな順番に並べ替えられる Sort Categories And Folders プラグイン

Movable Type4 では、デフォルトではカテゴリやフォルダは、<MTSubCategories>タグや <MTSubFolders>タグで、名前の昇順や降順で自動的にソートされて表示されます。

なので昔はカテゴリ名等に「001ほげほげ」「002ふがふが」などという名前をつけた上で、カテゴリ名の頭の「001」等を削って表示するような手法が主流だった頃もあったのですが、現在では Sort Categories And Folders という、任意の順番に並べ替えできるプラグインがあるので、非常に便利です。

Sort Categories And Folders プラグインを導入すると、カテゴリやフォルダの一覧画面に、「カテゴリの並び替え」「フォルダの並び替え」というメニューが追加されます。

01.JPG

実際の並び替え画面は、以下のような感じ。

02.JPG

この画面で、好きなように表示順を変更できます。

あとは、テンプレートの MTSubCategories ・ MTTopLevelCategories ・ MTSubFolders ・ MTTopLevelFoldersの各タグを使っている箇所に、

<MTSubCategories sort_method="SortCatFld::Sort">

という風に、sort_method="SortCatFld::Sort" という属性をつければOKです。

関連するブログ記事
カテゴリー
Movable Type 4
タグ
Movable Type | MTSubCategories | MTSubFolders | MTTopLevelCategories | MTTopLevelFolders | Sort Categories And Folders

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

 

perl や PHP で Cookie(クッキー)を読み書きする方法

Cookie の出力

Cookie は HTTPヘッダに出力することで、アクセスしたユーザーのブラウザ毎に書き込むことができます。

Cookie を書き込む際の書式は、

name=value; expires=Sun, 15-Nov-2009 23:59:59 GMT; domain=www.abe-tatsuya.com; path=/cgi-bin/; secure

という感じです。

name
必須。任意の「name」に対する値「value」を指定します。
例) loginid=abetatsuya
expires
Cookie の有効期限を指定します。省略するとブラウザを閉じるまでの間が有効期限になります。
また、過去の時刻を指定すると、該当 Cookie を削除します。
domain
Cookie を有効にするドメイン名を指定します。省略可。
path
Cookie を有効にするパスを指定します。省略すると、Cookie を書き込んだファイルのあるパスとなります。
secure
指定すると、SSL での通信時のみ Cookie をやり取りします。

この情報を、Set-Cookieヘッダとして出力すれば良いので、 perl の CGI の場合には、

print qq|Set-Cookie: loginid=abetatsuya; |;
print qq|expires=Sun, 15-Nov-2009 23:59:59 GMT; |;
print qq|domain=www.abe-tatsuya.com; path=/cgi-bin/; secure\n|;
print qq|Content-type: text/html; chearset=UTF-8\n|;
print qq|\n|;
#-- 以下、ページを出力

という感じにすれば良いわけです。

PHP の場合は、その名の通り setcookie っていう関数が用意されてるので、非常に楽チンですね。

setcookie("loginid","abetatsuya",time,"/cgi-bin",
 "www.abe-tatsuya.com",true);

こんな感じで書けばOKです。
詳細はPHP: setcookie - Manual等を参照。

複数の Cookie を書き込みたい場合は、複数回 Set-Cookie ヘッダを出力すれば大丈夫です。

Cookie の読み込み

書き込んだ Cookie を読み込みたい場合は、環境変数 HTTP_COOKIE を参照します。

perl であれば $ENV{'HTTP_COOKIE'} 内に「name=value」という形式で入っています。
複数の値が指定されている場合は「; 」区切りで「name1=value1; name2=value2」のように入ります。

「; 」で split した後にさらに「=」で split して、$COOKIE{'name'} = value のような連想配列に入れると使い易いかと思います。

PHP の場合は、$_COOKIE['name'] という変数内に、そのまま指定した値が入ってきます。

関連するブログ記事
カテゴリー
PHP | perl/CGI
タグ
CGI | Cookie | HTTPヘッダ | perl | PHP | Set-Cookie | setcookie | 環境変数

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

 

MT4 で TagSupplementals プラグインを利用して関連ブログ記事(エントリー)一覧を表示する方法

もうMT5のリリースも近いのに今更MT4関連の記事ばっかり書いてるのもアレな感じですが、気にせずいきます。

このブログでもやってるような、各ブログ記事の下部に「関連するブログ記事」の一覧を表示する方法の紹介です。

TagSupplementalsという、タグ(テンプレートタグではなくブログ記事やウェブページにつけるタグ)関連の機能拡張プラグインを利用するので、各ブログ記事にそれぞれ任意のタグがつけられている必要があります。

で、TagSupplementals プラグインを入れることで追加されるテンプレートタグ MTRelatedEntries を使うことで、設定されたタグの一致度によるブログ記事一覧が表示されます。
一つの記事に複数のタグを設定しておけば、同じタグが設定されている率が高い記事ほど優先的に表示される一覧が作れるわけです。

関連ブログ記事一覧を表示するテンプレートのサンプルソースは以下のような感じ。

<ul>
<MTRelatedEntries lastn="10">
  <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>
  [<$MTEntryDate$>]</li>
</MTRelatedEntries>
</ul>
関連するブログ記事
カテゴリー
Movable Type 4
タグ
Movable Type | MTRelatedEntries | TagSupplementals | プラグイン

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

 

2009年10月の読了本まとめ

2009年11月13日 23:59 2009年10月の読了本まとめ
諸王の冠
諸王の冠
スティーブ・ジャクソン著。
二十数年ぶりに再読。
ゲームブックの金字塔『ソーサリー』の最終巻。
圧倒的な難易度と、緻密なゲームデザインは正に名作。
怒涛のパラグラフジャンプをはじめ、読者の思考を逆手に取った数々の罠には舌を巻きました。
1~3巻で登場した人達との思わぬ再会なんかもあって、最終巻に相応しいボリュームの大作。
ほんとに面白かった。
10月6日読了。
利己的な遺伝子
利己的な遺伝子
リチャード・ドーキンス著。
数年ぶりの再読。
以前読んだときよりも、読んでてしっかり頭に入ってきた感じ。
自然淘汰を遺伝子単位で考えることが主題。
血縁淘汰とそれに付随する社会性昆虫の話や、延長された表現型、ESSの話なんかが興味深かった。
囚人のジレンマに関するプログラミングコンテストは、なんか楽しそう。
初読時の感想はこちら
10月11日読了。
バック・トウ・ザ・フューチャー 安田 均、TTG著。
二十数年ぶりの再読。
あの超有名映画『バック・トゥ・ザ・フューチャー』のゲームブック版。
映画のストーリー通りに「正しい」ルートを進んでエンディングを迎えることもできるし、映画では主人公のマーティがとらなかった行動をとって、その結果を楽しむ、という遊び方もできる。
今から思うとゲームブック入門としては非常にできの良い作品だったように思う。
ついつい母親といくところまでいってしまって罪悪感に浸るのはお約束(笑)。
10月13日読了。
月曜日の水玉模様
月曜日の水玉模様
加納朋子著。
数年ぶりの再読。
加納さんお得意の連作短編集。
人も死なないし、全体的にほのぼのとした雰囲気が漂っているんだけど、実は起こっている事件はどれも非常にドロドロしていて人間の汚い部分が浮き彫りになってるあたり、なにげに黒くて好き。
「日常の謎」っていうけど、横領とか強盗とか子捨てとか、充分過ぎるほど非日常だろう(笑)。
これだけドロドロしているのに読後感が妙に爽やかなのが不思議。
都合よく偶然が起こりすぎる節はあるけど、そのおかげで綺麗にまとまってるともいえるかな。
初読時より深読みできて楽しかった。
10月14日読了。
蟻の自然誌
蟻の自然誌
バート・ヘルドブラー、エドワード・O・ ウィルソン著。
数年前に『利己的な遺伝子』を読んで以来、漠然と「社会性昆虫の生態の進化について詳しく分かり易く書かれた本が読みたいなー」と思ってたんですが、この本が正にそういう本だった。
ずっと読みたかったのはこの本だったんだなー。
めちゃくちゃ面白かった。
ある程度、血縁淘汰等に関する前提知識が要るけど、非常に細かくわかりやすく、様々な蟻の生態を解説してくれる良書でした。
写真やイラストも豊富なので、本書で紹介される色んなアリ達をイメージし易かったのも良かった。
10月17日読了。
ネバーランドのリンゴ 林友彦著。
数年ぶりに何度目かの再読。
和製ゲームブックの傑作のひとつ。
「ですます」調で綴られる童話風のメルヘンな世界観と、緻密に設計された双方向のシステムが気に入ってます。
サドンデスが多い代わりに、主人公が二回まで復活できるようになっているあたりのバランスも絶妙。
フィールドをくまなく歩かないと必須アイテムが見つからないあたりの難易度の高さも良い感じ。
ただし、ラストダンジョンの無駄なパラグラフの多さと無味乾燥さはやっぱりどうかと思う(笑)。
10月18日読了。
レインレイン・ボウ
レインレイン・ボウ
加納朋子著。
加納さんお得意の連作短編集。
『月曜日の水玉模様』の登場人物が再登場して嬉しい。
一人の女性の死という大きな軸を中心に、高校時代に部活で一緒だった女性達の、自分の社会的な立場に対する葛藤を描いている、というのがベースか。
そこにいわゆる「日常の謎」が絡んでくるわけですが、ミステリー要素はかなり薄め。
各篇の主人公の心理描写がメインと感じた。
とは言え、篇を追うにつれて徐々に浮き彫りになる大きな謎とその解決、という構成はさすが。
10月19日読了。
少年少女飛行倶楽部
少年少女飛行倶楽部
加納朋子著。
正に青春!って感じの爽やかな学園物。
加納さんの作品でここまでミステリ要素のない作品も珍しいですね。
個性豊かな登場人物達がみんな魅力的で良かった。
DQNネーム(ルナルナには笑った)にもちゃんと作品としての意味があって、「名前の風変わりさは親の支配の現れ」的な一文が印象的だった。
若さというか青さというか、なんかそんなものが眩しく感じられた良作。
10月20日読了。
アルゴリズムの絵本
アルゴリズムの絵本
(株)アンク著。
タイトルや表紙がとんでもなく初心者向けに易しくプログラミングを教えてくれる感満載だったので、今後自分が人に教える時の参考になればと思って読んでみたけど、内容は普通のC言語入門書だった。
このご時世、言語の選択の時点で初心者向けじゃないよなー。
10月21日読了。

2009年10月の読了本は、9冊でした。
月間10冊の目標が相変わらず達成できず......。

関連するブログ記事
カテゴリー
読書
タグ
(株)アンク | TTG | アルゴリズムの絵本 | エドワード・O・ ウィルソン | スティーブ・ジャクソン | ソーサリー | ネバーランドのリンゴ | バック・トゥ・ザ・フューチャー | バート・ヘルドブラー | リチャード・ドーキンス | レインレイン・ボウ | 利己的な遺伝子 | 加納朋子 | 安田均 | 少年少女飛行倶楽部 | 月曜日の水玉模様 | 林友彦 | 蟻の自然誌 | 諸王の冠

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

 

MT4 のブログ記事(エントリ)やウェブページを複製できる MT Duplicate プラグイン

Movable Type でサイトを作成する際に、カスタムフィールドを大量に使ったりして、ある特定のフォーマットでブログ記事やウェブページを量産する(カタログ的なサイト等)場合、とりあえず一つページを作ったら、それをコピーしてあとは細かい部分を修正すればページの量産が簡単になる、というようなケースがあったりします。

そういう時に非常に便利なのが、MT Duplicate プラグインです。

このプラグインを導入すると、ブログ記事一覧やウェブページ一覧に「複製」というメニューが表示されて、新規作成時に複製元のブログ記事(あるいはウェブページ)の中身が最初からフォームに入力された状態で開くことができます。

01.JPG

また、ブログ記事の編集フォームにも「複製」ボタンが表示されるので、そこから複製することも可能。

02.JPG

「大体同じだけど微妙に内容が違うページ」を沢山作らないといけない時などは、非常に重宝するプラグインです。

関連するブログ記事
カテゴリー
Movable Type 4
タグ
Movable Type | プラグイン

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

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

阿部辰也へのお仕事のご依頼・問合せはこちらからどうぞ。

Twitter: @t_abe
読書メーター: ID:Tatsuya

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 5.02

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム