Movable Typeのコミュニティ機能で投票できない不具合を解消する

Movable Typeのコミュニティ機能で投票できない不具合を解消する

Posted at November 18,2011 1:55 AM
Tag:[Community, MovableType, TroubleShooting]

Movable Typeのコミュニティ機能(コミュニティブログ/コミュニティ掲示板)には、投票機能(スターアイコン★をクリックして投票)がデフォルトで用意されています。

具体的には、次のようにトピック単位に投票用のスターアイコンが表示され、スターアイコンまたは「X票」の部分にマウスをポイントするとクリックで投票できるようになっています。

投票

クリックすると1票が追加され、自分が投票したことが分かるように、スターアイコンにチェックマークがつきます。もう一度クリックすれば投票を取り消します。

投票後

ところが、次のようにマウスをポイントしても投票できないケースがあります。

投票できないケース

本エントリーでは投票できない原因と、問題がある場合の解消方法について紹介します。

1.原因1:コミュニティのユーザーとしてサインインしていない

コミュニティのユーザーとしてサインインしていない場合、投票することができません。ページ右上にある「サインイン」をクリックしてサインインすれば、投票できるようになります。

サインイン

2.原因2:匿名の投票を有効にしていない

コミュニティのユーザーとしてサインインしていなくても、誰でも投票できるようにすることができます。

投票できるようにするには、ブログ管理画面の「設定」→「コミュニティ」をクリックして、「匿名での投票を許可する」をチェックします。

匿名での投票を許可する

3.原因3:クロスドメイン問題

投票機能はAjaxを利用しており、ページ読み込み時にAjaxでコミュニティ用のCGI(mt-cp.cgi)にアクセスして投票情報を取得・表示します。このCGIにアクセスするURLのドメインと、コミュニティサイト自体のドメインが異なっているとクロスドメイン問題により、1項や2項の対処を行っても投票することができません(厳密にはサインインもできないはずです)。

例えば、それぞれのドメインの設定が次のようになっていると、この問題が発生します。

  • コミュニティサイトのドメイン:blog.user-domain
  • mt-cp.cgi実行時のドメイン:user-domain

投票できない問題がクロスドメインであるかどうかは、JavaScriptエラーの有無で切り分けることができます。例えばIE9でF12を押下して開発者モードの画面の「スクリプト」タブで確認すると、次のような「アクセスが拒否されました。」というエラーが表示されているはずです。

エラー

エラーが発生しているmt.jsの558~559行目のコードは次のとおりです。

598: var url = 'http://user-domain/mt/mt-cp.cgi';
599: xh.open('POST', url, true);

変数xhはAjax通信を行うためのXMLHttpRequestオブジェクトで、open()メソッド、つまり指定したURLへのリクエスト送信に失敗していることが分かります。598行目に表示されているドメインとコミュニティサイトのドメインが異なっていることからも判別可能です。

解消するには、コミュニティサイトのドメインとmt-cp.cgiのドメイン(=MTをインストールしているドメイン)を一致させます。言い換えると、コミュニティサイトのドメイン配下にMTをインストールする必要があります。アクセスするドメインが一致すれば良いので、MTをドメインに対応するパス直下にインストールする必要はありません。「mt」など適当なディレクトリを作って、そこにインストールすれば良いでしょう。

例えば次のような配置でMTをインストールします。

  • MTのインストールパス:/home/user/www/mt
  • コミュニティサイトのパス:/home/user/www
  • コミュニティサイトのURL:http://blog.user-domain/
関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)