« (続)スタイルシート | メイン | MySQLへの移行..あれこれ »
コメントプレビューの不具合修正について
2004年05月29日

コメント時に「確認」ボタンが押された場合、プレビュー画面の入力域に、前画面で入力された内容が引き継がれないという現象が起きていました。

「これくらいなら簡単に治りそうだなぁ〜」
っと、慣れないperlのソースとにらめっこしていていたのですが、ギブアップしました(恥;

そして今日、こちらのサイトのはじめてのお客様(嬉っ!)、GGさんから教えていただいたtugaaさんのサイトを拝見して、『目からウロコ....』状態な私でした。
MT3DEの日本語版ベータ現在のバグ状況

JavaScriptでオブジェクトの値に代入すればCGIスクリプトなど修正せずにテンプレートの修正だけで済みますものね。
(といいつつ、テンプレートが何なのか!?もまだ理解不完全なのですが...泣。)

モノゴトは視点を変えれば、ぐっとわかりやすくなる...。うーみゅ。

その後、どうやって前回入力値を得るかを知りたくて、"$MTCommentPreview"をキーワードネット検索しているうちに、ogawaさんのサイトがヒットしました。
Movable Type 3.0のMTCommentFields tag

何か調べたくてもリファレンスのリンクが切れてしまっていてわからない...などの状況の今、
このような情報いっぱいのサイトはとても助かります。
初心者の私は本当に本当に感謝です。


それで....
名前、メールアドレス、URLも消えてしまうので、同様に下記のようにセットするようにしました。

<script language="javascript" type="text/javascript">
<!--
    //author
    if (document.comments_form.author){
        document.comments_form.author.value = 
            '<$MTCommentPreviewAuthor encode_js="1"$>';
    }
    //email
    if (document.comments_form.email){
        document.comments_form.email.value = 
            '<$MTCommentPreviewEmail encode_js="1"$>';
    }
    //url
    if (document.comments_form.url){
        document.comments_form.url.value = 
            '<$MTCommentPreviewURL encode_js="1"$>';
    }
    //text
    if (document.comments_form.text){
        document.comments_form.text.value = 
            '<$MTCommentPreviewBody convert_breaks="0" encode_js="1"$>';
    }

-->
</script>

結果は予想通り代入できて、入力欄に内容が引き継がれ表示されました。

実はあまりわかっていないんです。$MTCommentPreviewURLなどの変数名はネットサーチした結果から予想、convert_breaksやencode_jsは何をする属性なのか?
ドキュメントを探せばわかるのでしょうね。

まったくもって何も調べないで、こんなコト書いているのがいけないのはわかっているんですが。
まだMTと出会ってから1週間も経っていないということでご容赦くださいまし。
わかりましたら、ボチボチアップいたします。

その後、ネット検索していてリファレンスを日本語に訳してくださっているサイトを見つけました。
Movable Type 取説

投稿者 megu : 2004年05月29日 22:13

コメント

はじめまして、tugaa blogのtuggaと申します。
TBありがとうございます。私もMTを2.661を3月から始めたばかりです。
私も、ogawaさんのサイトをかなり参考にさせていただいています。
というか、あのエントリもほぼ全部、NT3.0DEj-aのバグ報告や
それ以前の、βテストの時のバグ報告を参照してて、
実際自分では何もしてません…。スイマセン。

上記スクリプトだと完璧ですね、勉強になります。
TB頂いたサイトに追記してよろしいでしょうか?

βが取れたら直って欲しいです、というか、直ってるはず(期待)。

前日のstyles-site.cssが上書きされてしまうと言う件ですが、
メインメニュー > blog名 > テンプレート > Stylesheet
の、テンプレートの編集で
『インデックス・テンプレートを再構築するときにこのテンプレートを自動的に再構築する』のチェックを
はずせば、変更しても、自分で再構築する時以外変更されないと思います。
他も『自動で再構築』がON(はい)になっていると、
コメント保存時に自動で再構築されてしまいます
(多分、下書き時には、されないと思います)。
ただ、更新日付で判断してないようで、管理画面優先っぽいです。

MTのテンプレートに関しては上記のサイトは便利ですね。
あと、古いのでよければ、いくつか本も出ていますが、
MT3.0から結構変更・追加されているので、役に立たないかもしれません。

再構築時には、各htmlファイル、RSS,ATOMファイル等
各種ファイルの書き出しや、それに関するDBへのアクセスが行われるので、重いですね…。
再構築はエントリが増えるとレンタルサーバでは厳しいです。
特にDBにMySQL等が使えないと厳しすぎます…。

あと、DSAがインストールされていないサーバを借りているので、
サインインした後も、サインインして下さいとでるので、
リロードしなければいけないという、変な感じです。

長々と失礼しました、では、失礼いたします。

投稿者 tugaa [TypeKey Profile Page] : 2004年05月30日 00:26

こんばんわ、(o)です。トラックバックありがとうございます。

encode_js="1"はTemplate Tag展開後の文字列をJavaScriptの文字列として使えるように変換します。例:「'」→「\'」

convert_breaks="0"はコメントの設定で「URLを自動的にリンクにする」などがセットされているとプレビューに<a href="...">...</a>と表示されてしまい、煩わしいのでそれを抑制するためにつけてあります。まあ、なくても動作に支障はありません。

http://hassaku.main.jp/blog/archives/000863.html
では、name, email, authorに関してはクッキーから読み込んで設定する方法を採っています。というのも、「個別」のアーカイブがそういう方法になっているためです。

投稿者 (o) [TypeKey Profile Page] : 2004年05月30日 02:21

tugaaさん、こんにちは。
リンクさせていただき、ありがとうございました:-)。

スタイルシートの件、ありがとうございます。早速、設定を変えました。
とりあえずはスタイルシートだけです。
じっくり見ればもっと良い設定にできそうですが、これから少しずつ習得していけたらと思います。

重たいのは再構築だけではないのですが、やはりMySQLやPostgreSQLが必要でしょうか。
SQLエンジンはサーバの要領やスペックを気にしてサーバ上にインストールしていないので、今はdbフォルダで運用しています。
たいした件数ではないので大丈夫かと鷹をくくっていたのですが..
これも今後の検討課題です。(コンバージョンが、また面倒そうですね。簡単だといいです。Export→Importみたいなのですめば....)

サインイン後、リロードしないと...というのはここも同じですよね?(笑)
#ブラウザのキャッシュの問題かと思っていました。
具体的にどう対応したらいいのか、わかりません。
TypeKeyで認証された結果、クッキーをいただいてきてそれを見ているのかと思っていました。
blogが存在するサーバ上の認証と何か関わりがあるのですね?
ごめんなさい。こちらも研究いたします。

文字通り、なにもかもはじめてでアップアップ状態です....。
管理画面の使い方もまだわかっておらず、カテゴリの整理もできていませんが、徐々に疑問点、解決策など整理できたらと思います。

どうぞよろしくお願いいたします!

投稿者 megu [TypeKey Profile Page] : 2004年05月30日 16:09

(o)さん、こんにちは。
りんくさせていただき、ありがとうございました。

それから、属性の件もありがとうございます。
わかりやすく説明していただけて、助かります。

http://hassaku.main.jp/blog/archives/000863.html
拝見させていただきました。

Comment.jsの下記部分のことですね?
function doLoaded () {
if (!document.comments_form) return;
if (document.comments_form.email != undefined)
document.comments_form.email.value = getCookie("mtcmtmail");
if (document.comments_form.author != undefined)
document.comments_form.author.value = getCookie("mtcmtauth");
if (document.comments_form.url != undefined)
document.comments_form.url.value = getCookie("mtcmthome");
if (getCookie("mtcmtauth") || getCookie("mtcmthome")) {
document.comments_form.bakecookie[0].checked = true;
} else {
document.comments_form.bakecookie[1].checked = true;
}
}
onload = doLoaded;

なるほど!プレビュー画面だけ特殊な処理を入れるのではなく、他の処理と同様の方法を取るわけですね?
(あっていますか?)

#こうしてみてみると、内容はクッキーを介して引き継がれるものが多いのでしょうか。

もうひとつ、ついでに質問させてください...(本件とは関係ないのですが...)
おそらく、↑の引用させていただいたスクリプトは、左詰でインデンテーションなしに表示されてしまうと思います。
本文の登録時に最初preタグを使ってみたのですが、改行が活きてしまい、1行おきになってしまったので結局preタグをはずしました。
でも(o)さんのサイトでは、きれいに表示されているではないですか!!(尊敬....)
これにもなにか裏ワザ(?)があるのですか??

#質問ばかりですみません。無視してくださってもかまいませんので。。。。私の勉強不足です。少しずつ、テンプレートについても調べてみます。

投稿者 megu [TypeKey Profile Page] : 2004年05月30日 16:28

レスありがとうございます、tugaaでございます。

DSAは多分、関係ないかも…、(o)氏が指摘されたWindows+MSIE固有の問題かも…。
というのも、実はMac+IEだと問題なかった事と、(o)氏も同じレンタルサーバだったからです。

あと、TypeKeyからCookie取得して参照してるようです。
嘘いってゴメンナサイ。頭が悪いだけなので許してやってください。

> サインイン後、リロードしないと...というのはここも同じですよね?

とのことですが、こちらは問題なくサイン・インできます。
今、悩み中です。頭が良ければ…と(o)氏並みに知識があれば…。
一応、MT3.0DE-jaは

http://2gaa.net/mt3d/

と言うところに設置してます。

MySQLに移行するのは(多分)比較的簡単です、
mt.cfgの変更とmt-db2sql.cgi等を実行するぐらいです。
現在使っているlolopopに説明があったので、参考までにURL貼らしていただきます。

こちらこそ、よろしくお願いいたします。
では、失礼いたします。

http://lolipop.jp/?mode=manual&state1=other&state2=movable2&PHPSESSID=9de5aa406055cef9d83c2c0dd7d25cb0

投稿者 tugaa [TypeKey Profile Page] : 2004年05月30日 17:09

エントリの編集画面の下の方に「テキストフォーマット」というのがあって「Convert Line Breaks」が選択されていると思います。これを「なし」に変更すると<p></p><br />が自動的に挿入されなくなります。その代わり改行させたいところに自分で挿入しなくてはなりません。

また、テキストフォーマットの既定値は「ウェブログの設定」の「新規エントリーのデフォルトのテキストフォーマット」で指定することができます。

私は「新規エントリーのデフォルトのテキストフォーマット」は「Convert Line Breaks」に指定しておき、自分でタグを挿入したいときだけ、各エントリの編集画面のテキストフォーマットを「なし」に変更するというやり方をしています。

投稿者 (o) [TypeKey Profile Page] : 2004年05月31日 15:04

tugaaさん、ありがとうございます。

MySQLへの移行、mt-db2sql.cgiですべてやってくれるのですね。
面倒でなくてよかったです。
#lolipopさんって、親切ですね。

まずはSQLエンジンのインストール、ユーザー作成からはじめなくてはなりません。

移行できたあかつきにはこのサイトでいきさつを説明いたしますので。

果たして軽くなるでしょうか?
CGIなので、DBとの接続は毎度確立するのだと思いますがそれに対する負荷はどうなんでしょうね?
でもその後のUpdateやSelectが早くなると軽くなるかもしれません。
すべてはやってみないとわかりませんが...。
#うーん、がんばらなくては。

ところでコメントプレビューの件は、Cookieのこともあって、まだまだ考え中です。
(o)さんが日本語版のテンプレートを作成してくださったので、それに置き換えて、しばらくはその上に上記スクリプトを入れようと思います。

投稿者 megu [TypeKey Profile Page] : 2004年06月01日 22:41

Fedora + Mozilla 1.4.1 できてみました。
リロードなしにサインインされました。
やはりブラウザのキャッシュの問題のように思われます。
IEの場合、metaタグを入れてもダメなんですよね....

投稿者 megu [TypeKey Profile Page] : 2004年06月01日 23:17

(o)さん、こんばんは。

ありました、テキストフォーマット!!
すみません、ちゃんと見ていなくて...。

これは使える機能ですね。
テーブルタグなど、途中でゴミが入ってしまうと困るので....。
ペタペタペタとくっつけて入力しなければならないところですが、これならきれいに入力できます

ありがとうございました。

投稿者 megu [TypeKey Profile Page] : 2004年06月01日 23:33

MySqlへの移行をやってみました。
#このコメントはMySQL上に登録されるのでしょうか?

予想とおり一筋縄ではいかず、すったもんだしたのですが、
後日エントリーさせていただきます:-)。
軽くなるといいのですが....
試しにJMeterでテストしてみようかしら?

投稿者 megu [TypeKey Profile Page] : 2004年06月09日 02:40

うまくいったみたいです。
MySQL上のmt_comment テーブル上の更新日付(comment_modified_onフィールド)が上の日付になっていました。
MySQLですが、普段EUCを使うことを考えて文字コードはEUCで設定してあるのですが、MT自体はUTF-8を設定しています。
そこが不安だったのですが、変換されず、ただのデータとして扱われているので大丈夫みたいです。
(なので、mysqlコマンドから見るとばけばけで内容がわかりません。)
ORACLEのNLS_LANGみたいな設定はどこかであるのでしょうかね?
MySQL詳しくなくてすみません。

投稿者 megu [TypeKey Profile Page] : 2004年06月09日 02:45

はじめまして、GotanyのEVと申します。
先日、こちらのエントリーを拝見させていただき、コメントプレビューのバグを無事解消できました。
ありがとうございます。
こちらへのリンクとともに、ソースもご紹介させていただきました。
事後報告になり、申し訳ございませんでした。

これからも色々と勉強させていただきたいと思っています。

投稿者 EV [TypeKey Profile Page] : 2004年07月03日 05:53