エントリー本文
サインイン後のページ遷移でコメント投稿フォームを表示する
Movable Type のブログ記事ページやウェブページでの認証コメントでは、コメントフォームにサインインした後、ブログ記事ページのトップに戻ってしまいます。
例として、Movable Type のあるブログ記事にサインインします。

サインイン後は、サインインしたページの先頭に戻ってしまいます。

ファイルサイズが小さいページであれば、少しスクロールすればコメントフォームを表示できますが、大量のコメントの下にコメントフォームがある場合など、再びコメントフォームに移動するのは結構面倒です。
本エントリーでは、サインイン後に表示されるブログ記事ページ(またはウェブページ)でコメントフォームの位置までスクロールして表示するカスタマイズを紹介します。
このカスタマイズを行えば、サインイン後に、次のようにコメントフォームの位置までスクロールした状態で表示します。

このブログでも少し前からこのカスタマイズを適用していますので、動作を知りたい方はとりあえずコメントフォームにサインインしてみてください。
1.Movable Type 4.2 デフォルトテンプレート「既定のブログ」の場合
「コメント」テンプレートモジュールの h2 要素に id 属性「_login」を追加します。
変更前
...前略...
<mt:IfCommentsAccepted>
<div class="comments-open" id="comments-open">
<h2 class="comments-open-header">コメントする</h2>
<div class="comments-open-content">
...後略...
変更後
...前略...
<mt:IfCommentsAccepted>
<div class="comments-open" id="comments-open">
<h2 id="_login" class="comments-open-header">コメントする</h2>
<div class="comments-open-content">
...後略...
2.当ブログの Movable Type 4.2 配布テンプレートの場合
「コメント入力フォーム」テンプレートモジュールの h2 要素に id 属性「_login」を追加します。
変更前
<mt:entryIfCommentsOpen>
<div class="comments-open" id="comments-open">
<h2 class="comments-open-header">コメントする</h2>
<div class="comments-open-content">
..後略...
変更後
<mt:entryIfCommentsOpen>
<div class="comments-open" id="comments-open">
<h2 id="_login" class="comments-open-header">コメントする</h2>
<div class="comments-open-content">
..後略...
3.スクロール表示できる仕組み
大体お分かりだと思いますが、サインイン後にリダイレクトされた URL の末尾に「#_login」が付与されます。これをフラグメントとして利用している訳です。
なお、ブログ管理者がブログ管理画面などにログインしているブラウザと同じブラウザで、ブログ記事のコメントフォームにサインインしても、このカスタマイズのようなスクロールは行われません。
4.マークアップの妥当性について
XHTML では id 属性値が "_" で開始しても問題ありません。ただし、HTML4.01 では違反ですので気をつけてください。
5.name 属性によるフラグメントについて
4項では id 属性を用いたフラグメント方法を紹介しましたが、name 属性を用いたフラグメント、例えば、
<a name="_login"></a>
という方法については、
- XHTML では id 属性によるフラグメントに変更(name 属性自体が XHTML 1.1 で廃止)
- Movable Type デフォルトテンプレート・配布テンプレートはXHTML
という理由で紹介をしておりません。ただし、HTML4.01 でマークアップをしている場合は name 属性によるフラグメントを行ってください。
なお、XHTML 1.0 で、id 属性によるフラグメントをサポートしていないブラウザに対応させたい場合は、1項または2項の変更で id 属性と name 属性を併記してください。
<h2 id="_login" name="_login" class="comments-open-header">コメントする</h2>
最近の主なブラウザ(IE/Firefox/Opera/Safari/Google Chrome)では id 属性によるフラグメントが可能です。
2008.10.24
5項を追加しました。
- CSS ネガティブマージンで重なった要素のリンクをクリックできるようにする
- たどり着いた
- IE7 の CSS ハック
- CSS の after 擬似要素で回り込みを解除する
- Movable Type プラグイン一覧(MT4対応)
- Movable Type(MT)テンプレート
- 枠線(border)の指定
- リストマークの画像のずれを修正する
- CSS のフォントサイズ指定が table に反映されない問題
- Tag Cloud のページを作る
- コメント出力数に応じてコメント番号を制御する
- コメント番号を降順で表示する
- Movable Type のコメント投稿で「コメントを投稿できませんでした。エラー: 短い期間にコメントを大量に送りすぎです。しばらくたってからやり直してください。」というエラー処理について
- MovableType 4.25 のコメント投稿でJavaScript イベント属性(onclick等)を有効にする
- 「最近のコメント」をネイティブタグのみで適正に表示する
- コメント投稿者の表示を valid にする
- JavaScript を無効にしてコメント投稿を可能にする
- コメントのフラグメントを動的に切り替える
- 他人の Movable Type 4 へのコメント投稿で Movable Type 認証を利用する方法
- コメント投稿フォームの「情報を保存する」のチェックを外した時の振る舞いを変更する
- コメント投稿フォームをデフォルトで表示する&「匿名でコメントすることもできます。」の文言を修正する
- Simply Threaded プラグイン(MT4版)でコメントフォームに返信機能を追加する
- Movable Type 4 で返信コメントをスレッド形式で表示する
- コメント投稿者欄が無記名の時に代替名を表示する
- コメントを新着順に並べ替える
- Authen::Captcha をインストールして Captcha Plugin を利用する(CPAN による perl モジュールのインストール)
- SCode プラグインでコメントスパムを制限する(その2:Typekeyサイン・インとの競合制御)
- SCode プラグインでコメントスパムを制限する(その1:基本設定)
- TypeKey サイン・インのメッセージを変更する
- コメントにHTMLタグ挿入ボタンをつける(改)
こんにちは、いつも参考にさせていただいてます。
今回の対策で、素直に(?)<a name="_login">を使う事に何か不都合はあるのでしょうか?
>まにてんさん
こんにちは。
ご質問の件につきまして、5項を追記致しましたので、そちらを参照頂ければ幸いです。
それではよろしくお願い致します。
