mt.cfgの保護。

まったく気づいていなかったんだけれども、 MovableTypeの設定ファイル、mt.cfgって ブラウザでアクセスできてしまう場合があるんですね。 MovableTypeで行こう!: Movable Type の脆弱性について(CHEEBOWさん)経由で、 2xUP:mt.cfgをかくさないと!にたどり着いて、 知りました。 しかも、なんとマニュアルにもあるんじゃん。警告文。

mtinstall – Movable Typeのインストール : mt.cfgの保護
Movable Typeをcgi-binディレクトリから実行していない場合は、Movable Typeのインストール先ディレクトリにある.htaccessファイルに以下の数行を加えて、mt.cfgファイルを保護することを推奨します。
ただしここで、書いてある方法がいまいちってのは、上記、 2xUP:mt.cfgをかくさないと!の続きのエントリである、 2xUP:mt.cfgをかくさないと!おかわり!に書いてあって、 (西武ファンなんでしょうかねぇ…?(笑)) 確かに、その通りだ、と。 そういうわけで、早速対策しました。 要するに、.htaccessで、アクセス制限を掛けるだけなんですけど。 ちなみに、マニュアルには、 『Movable Typeをcgi-binディレクトリから実行していない場合は』 とありましたが、 僕の環境では、cgi-bin以下でも見れてしまっていましたねぇ。 さくらインターネットの仕様なんでしょうか。 ああ、もちろん、MovableTypeのせいではありませんとも。 各個人が意識しておくべきことですね。 (ユーザこそが最大のリスク、という言葉もあるわけだし / 出典忘れた)

続きを読む

Upgrade -> MovableType 3.17

特に深いことを考えずに、アップグレードしてしまいました。 これまでは、まぁいいやと思ってほったらかしだったのに…まぁ所詮こんなもんだよな。 Movable Type Publishing Platform: Movable Type 3.17の提供を開始 例によってさまざまな修正点があるようですが、 まぁその辺は、上のリンク先および、修正履歴から見てくださいな。 個人的には、 エントリ投稿欄のカテゴリ表示で、親カテゴリと、子カテゴリが、 インデントで区別されている点が気に入ってみたり。

続きを読む

コメント入力をプレビューさせる(JavaScript)

友人のblogのコメント入力欄に、プレビュー機能がある。 それも、よくあるような、確認ボタンを押して別画面で確認するのではなくて、 書いた側から、入力フォームの下に表示されるんである。 WYSIWYGなインターフェイス。 …これ、欲しいなぁ… そういうわけで、ドリコムブログをHackしてみました。 (つまり要するにパクリ)

続きを読む

作成日時を更新するプラグイン

先日、「作成日時」を更新するボタン追加というエントリで、 更新ボタンの設置方法を紹介したんですが、 更新時に作成日時を現在時刻に会わせてくれるプラグインがリリースされたので、追加でご紹介。 MT本体をいじるのはちょっと…という人はこれを導入するといいかもしれません。

releasedateプラグイン
作成者: H.Fujimoto(藤本壱) web: Hajime Fujimoto’s Web Site 解説ページ: エントリーの作成日時を公開日時に自動更新するプラグイン DOWNLOAD – releasedate.zip [697byte]
インストール方法::
上記ダウンロードからダウンロードし、ZIPファイルを解凍してください。 出来た releasedate.pl を、MTディレクトリ下の、 pluginsディレクトリにアップデートしてください。 ※なお、このプラグインは、エントリーを保存する前に処理をする 「pre_save」という機能を利用しています。 同じ機能を利用しているプラグインが他にもある場合、 そのプラグインとバッティングして、どちらかのプラグインが動作しない場合があります。 そのときは、リストの15行目(以下)にある「0」を、 「1」?「11」の任意の数に変えて、アップロードしなおしてみてください。
MT::Entry->add_callback("pre_save", 0, $plugin, \&releasedate);
説明::
このプラグインでは、以下の時に作成日時の更新を行います。
1. 下書きのエントリを公開するとき 2. エントリを新規作成して、下書きを経由せずに公開するとき
一度公開したエントリを再保存した場合には、作成日時は更新されません。 (こういう場合は大抵、誤字修正なので更新の必要はなさそうです) 注)MTの一部のバージョンには、確認画面から保存すると、 URIが変わってしまうというバグがあるようです。 その状態だと、一度公開したエントリーの日付も更新されてしまうので注意が必要、とのことです。 (詳しくは作者エントリをご覧下さい)

続きを読む

エントリーのランダム表示【詳細】

前回、メモ代わりにランダム表示を紹介したのですが、 わかりにくいというご意見をいただいたので解説用に書き直してみます。 基本的には、全エントリーの中から、一定数をアクセス毎に表示するということをやっています。 サンプルはトップページの “RAMDOM 5 MUTTERS” にあります。 全体の手順としては以下の通りです。

  1. MTRandomEntriesプラグインのインストール / 設定
  2. アクセス毎に表示させるプログラムの作成 / 導入
ランダムに選択するタイミングを、『再構築』でよい、という方は1まででOKです。 PHPを利用して、『アクセス時に』ランダム選択したいという方は、2を参考にしてください。

続きを読む

mt4i 2.0b5 → b6

MovableType 携帯閲覧・管理用アプリケーション『mt4i』が、b6にバージョンアップしています。 トラックバックいただいたので早速ダウンロード&導入。 talk to oneself 2: MT4i v2.0β6仮公開 主な変更点は、 ・画像処理に関する部分(PerlMagickのバージョンによる不具合の修正と、Vodafone端末への対応) ・管理用プログラムの変更 ・その他修正 管理用プログラムの目次は、ちょっとしたことですが嬉しいですね。 正常に動いている限り、そう頻繁に設定を変えるということはないけれども、 設定を変えつつ様子を見ているときなんかは、 設定変更→目的箇所までスクロールってのが意外にだるいので… INPUTボックス内にカーソルがあるとき、Enterで保存できると、もっと楽だけど まぁそこは自分でやれ、ということで。 データ構造を新しくするのは意外に面倒だと思うんですが、 旧形式も読み込める、保存すれば新形式で書き出す、っていう作り方が ユーザに優しくて少し感動してみたり。 よくよく設定を眺めてみると、 自分はPC用サイトの補助というだけで、 携帯用にはあんまり使い込んでないなぁ、というのが実感。 もう少し使い込んでみようかなぁ。 何にせよ、ご苦労様です。 いつもありがとうございます。

続きを読む

「作成日時」を更新するボタン追加

お知らせ: MovableType3.2および、BigPAPIに対応したプラグインとして、ボタン追加のためのプラグイン[ UpdateAuthoredOn ]を紹介しています。下記情報と全く同じになる、カスタマイズ版も載せてありますので、よろしければどうぞ。 NOBODY:PLACE – MUTTER: 「作成日時」を更新するボタンを追加するプラグイン(UpdateAuthoredOn改造編)
『自分だけの編集ボタン』でお世話になった alectropeさんのところで、 以下のようなエントリーを発見して驚愕。目鱗。キャー。 「作成日時」を更新するボタン追加 | alectrope 上記記事内でもおっしゃってますが、エントリ作成時間てのは意外と融通が利かないもの。 新規エントリ作成してから書き上げるのに時間が掛かったり、 下書きにしておいたネタを整形することがあったり、 この時間を現在時刻に直す作業ってのは、日常、結構頻繁に行う。 それを、JavaScriptを使ってボタンひとつで実装しようじゃないか、というのがこのアイディア。 そうなんですよ、まったく。 いちいち、時とか分とか、チマチマ直してらんないんです。 詳細は上記記事を参考に…といいたいところなんですが、 alectropeさんはMT2.661を使用されていて、MT3xとは該当テンプレが微妙に違う。 なので、若干変更を加えつつ(でも本線は同じ)、実装してみました。 [1] まず、/tmpl/cms/edit_entry.tmpl を開く。 基本ですが、バックアップは取っておいてください。『名前を変えてダウンロード』でもしておけば可。 [2] ボタンを作成する。 テキストエディタで開いて、created_on_manualで検索を掛けると、276行目辺りがヒットします。 ここはどこか、というと、エントリー投稿画面の、作成日時、の部分。 ここに、
<input name=”created_on_manual” id=”created_on_manual” tabindex=”8″ value=”<TMPL_VAR NAME=CREATED_ON_FORMATTED ESCAPE=HTML>” />
という記述があるので、これを、
<input name=”created_on_manual” size=25 id=”created_on_manual” tabindex=”8″ value=”<TMPL_VAR NAME=CREATED_ON_FORMATTED ESCAPE=HTML>” /><br /> <input onClick=”nowDate()” type=”button” value=”Now” />
に変更します。 (XHTMLなので、inputタグ終わりの/を忘れないように) [3] 次に、JavaScriptを追加する。 同ファイルの上部、<script>~</script>のどこかに、以下の記述を追加します。
<!– 更新時刻を現在の時刻にするボタン –> function nowDate() { dat=new Date(); yea=dat.getFullYear(); mon=dat.getMonth() + 1; day=dat.getDate(); hou=dat.getHours(); min=dat.getMinutes(); sec=dat.getSeconds(); if(mon<10){mon=”0″+mon;} if(day<10){day=”0″+day;} if(hou<10){hou=”0″+hou;} if(min<10){min=”0″+min;} if(sec<10){sec=”0″+sec;} document.entry_form.created_on_manual.value=yea + “-” + mon + “-” + day + ” ” + hou + “:” + min + “:” + sec; }
以上で準備OK。 エントリー投稿画面にアクセスして、以下のように表示されていれば完成。 NOWを押してやれば、現在時間が、テキストフィールドに入力されます。 いやー便利。

続きを読む

自分だけの編集ボタン。

自分のサイトの記事をチェックしているときに、 誤字を見つけたり、どこか修正したい、と思うときが頻繁にある…のだけど、 mtにログインし、目当ての記事を見つけだし、編集画面に行くという過程は結構、面倒くさい。 特に古い記事の場合は、それを見つけだすまでにも時間が掛かる。 (特にmutterは記事の数も多いし) というわけで、エントリーページから、直接編集画面へと飛ぶリンクを設置できるプラグイン、 AdminLinks_plugin を導入してみた。 参考サイト: 自分にしか見えない [編集] リンクを作る | alectrope brain-dump.com – Frontend Editing for MovableType 『直接編集画面へとブリンク』というものを設置すること自体は非常に簡単。 MTにログインさえしていれば、そのエントリのIDのURIを入力するだけだから。 このプラグインは、このプラグイン用のCookieがある時のみ表示させる、となっているところがミソ。 プラグインにクッキー生成用のPHPプログラムが同梱されていて、 編集者はまずそこにアクセスして、Cookieをあらかじめ作っておくわけである。 そうすると、MTタグに従って、編集ボタンが表示されるというわけ。 実際の導入に関しては、上記リンクで挙げた、 alectropeさんのページに飛べば詳しく書いてあるので、 それを読んでいただきたいかと。すぐに導入できます。 マジ便利。 エントリ後半には、これを応用した、管理メニューの作成、というアイディアがあって、 これはまた凄い。 このエントリを書いてる時点ではまだ実装していないけど、 自分のサイトを見ていて、思いついて新規エントリ、なんてのができるわけだ。 あー…便利だなぁ…ありがとうございます。 あとでやってみよう。 alectropeさんに感謝。 (トラックバックを受け付けてらっしゃらないようなので、とりあえず紹介と謝辞まで) --

続きを読む

[メモ] コメント入力時のクッキー保存。

このサイトでは、デザイン的な煩わしさを避けるために、 コメント入力時にクッキーを保存するかどうかのチェックを省略しています。 シンプルにしたかったんですね。 が、当たり前ですが、自分でレスするときには面倒…。 というわけで、 セキュリティ的には微妙ということを自覚しながらも、 常にCookieを利用するように個別テンプレートを作ってみました。 変更点は以下の通り。 コメント入力の<form>タグを変更。 デフォルトでは、チェックボックスをクリックすると、値が送られるようになっているので、 条件文を削除して、常に覚えるという値を送ることにする。

<form method=”post” action=”<$MTCGIPath$><$MTCommentScript$>” name=”comments_form” onsubmit=”
if (this.bakecookie[0].checked)
rememberMe(this)”>  ↓ <form method=”post” action=”<$MTCGIPath$><$MTCommentScript$>” name=”comments_form” onsubmit=”rememberMe(this)”>
チェックボックスの方は削除してもOK。問題なし。 まぁ、正直、別に役に立つ情報ではありませんが。 とりあえずメモということで。

続きを読む

エントリーのランダム表示

MUTTERの右メニューに、エントリのランダム表示を追加してみました。 一応、過去ログからランダムにピックアップされたエントリーが5件表示されています。 この導入に関してメモ。 基本的には、MovableType用のプラグイン、MTRandomEntriesを使用しています。 これをプラグインとして導入することで、ランダムにエントリをピックアップするタグを追加できます。 導入は非常に簡単で、上記サイトからプログラムをダウンロードし、 pluginsディレクトリに入れるだけ。 実際のタグの表記に関してもシンプルで、

<MTRandomEntries lastn=”5″> <a href=”<$MTEntryPermalink$>”><$MTEntryTitle$></a> </MTRandomEntries>
と、MTEntries タグの代わりに使うことで、 lastnで指定された数の分だけ、ランダムにエントリが表示できます。 つまり、indexテンプレートに追加するか、 新たにテンプレートを作成し、このタグを入力して保存することで完成です。簡単。 ここまでは初級編。 しかし、このプラグインには、仕様上どうしようもない欠点があります。 というのは、テンプレートに記入すると言うことは、ランダムにピックアップされるのは、 『再構築』を行ったタイミング、ということ。 僕はユーザがアクセスするたびに違うエントリを参照させたかったので、これでは不十分です。 と言うわけで、僕が使ったのは、PHPプログラムを使う方法。 例えば、上で設定したテンプレートの出力ファイル名を、 random.datのように指定します。 そしてある一定数書き出しておいて、それをデータベースのように使います。 実際にテンプレートとして使うのは、このテンプレートではなく、 たとえば以下のような処理を行うプログラム。
$RamdomEntries = array(); $fh = fopen(“/www/ramdom.dat”,”r”); flock($fh, LOCK_EX); while(!feof($fh)){ $buf = trim(fgets($fh)); if($buf){ array_push($RamdomEntries,$buf); } } flock($fh, LOCK_UN); fclose($fh); for($i = 0;$i < 5;$i++){ $start = $i * 40; $end = $start + 39; $rid = rand($start,$end); print $RamdomEntries[$rid]; }
これはどのような処理をしているかというと… 簡単に言えば、前述のデータファイルの中から、 任意の5つのエントリを書き出している、ということ。 そのために、データファイルの全要素を5つに分け、それぞれから任意のアイテムをピックアップしています。 元のデータファイルのエントリ数が多ければ多いほど、 ランダム性は増すわけで、そのためにこのサイトのデータファイルには、 任意の200エントリが登録されています。 その中から、5つをピックアップして表示しているわけです。 つまり、疑似ランダム表示、ですね。 以上のような手順を踏むことにより、 ランダムの部分を、疑似動的に作成しています。 もしかしたら、MTの動的表示をしているサイトでは、もう少し違った方法で実現できるかもしれませんが… とりあえず静的表示のサイトではこんなもんではないでしょうか。 追記。【2005-02-11】 ランダムにアイテムをピックアップするプログラムをもう少し短くしてみました。
$RamdomEntries = 0; $fh = fopen(“/www/mutter/ramdom.dat”,”r”); flock($fh, LOCK_EX); while(!feof($fh)){ $buf = trim(fgets($fh)); if($buf){ if((rand(0,200) % 10) == 0){ $RamdomEntries++; print $buf; } if($RamdomEntries >= 5){break;} } } flock($fh, LOCK_UN); fclose($fh);
ファイルを開いて得たデータ処理の時点で乱数を発生させ、 それがある条件に当てはまっていたら(この場合は10で割り切れたら)表示。 一定数に達したらプログラム終了。 条件が厳しいと、一定数に満たないこともありますが。 まぁ、気持ち、こっちのがシンプルかな、と言うことで。 多分、気分の問題だけど。

続きを読む