ログアウトまたは読者権限のユーザーでログインすると、組み込みJSが動作しない

ログアウトまたは読者権限のユーザーでログイン時に組み込みJSが動作しない場合は、組み込みJS自体が読み込まれていない可能性があります。

公式で配布している「develop」テーマでは投稿者以上でログインしている時のみ組み込みJSを読み込むようになっており、developテーマを元にテーマ開発を行うとログアウトまたは読者権限のユーザーでログインしている状態では組み込みJSが動作しません。

組み込みJSでは、さまざまなJSが含まれており使わない機能も多いので、パフォーマンスを考慮してログアウトまたは読者権限のユーザーでログイン時は組み込みJSを読み込まないようになっております。

修正方法

以下のように変更することで、ユーザーの権限やログイン状態に関わらず、組み込みJSを読み込むことができます。

修正ファイル: themes/ご利用テーマ/include/head/js.html

修正前

<!-- 投稿者以上以上の場合だけ組み込みJSを読み込むようにする -->
<!-- BEGIN_MODULE Touch_SessionWithContribution -->
<script src="%{JS_LIB_JQUERY_DIR}jquery-%{JS_LIB_JQUERY_DIR_VERSION}.min.js" charset="UTF-8"></script><!-- BEGIN_MODULE Js -->
<script src="/acms.js{arguments}" charset="UTF-8" id="acms-js"></script><!-- END_MODULE Js -->
<!-- END_MODULE Touch_SessionWithContribution -->

修正後

<script src="%{JS_LIB_JQUERY_DIR}jquery-%{JS_LIB_JQUERY_DIR_VERSION}.min.js" charset="UTF-8"></script><!-- BEGIN_MODULE Js -->
<script src="/acms.js{arguments}" charset="UTF-8" id="acms-js"></script><!-- END_MODULE Js -->

アップデートしたら管理画面にスタイルが当たらなくなった

アップデートしたら管理画面にスタイルが当たらなくなってしまった場合、以下の原因が考えられます。

  • 管理画面のCSSが適用されていない
  • バージョンが古いテンプレートを使用している

詳しく説明していきます。

管理画面のCSSが適用されていない

a-blog cms の管理画面のCSSは、/themes/system/css/ディレクトリに設置されています。
以下のCSSがなかった場合、正常にページが表示されない可能性があります。

  • normalize.min.css
  • acms-system.min.css
  • acms-admin.min.css

アップデート時にうまくアップロードされていなかった場合、再度アップロードし直すことで解決できます。

CSSがうまくアップロードできていなかった場合は、以下のような特徴があります。

  • 一切管理画面のスタイルが適用されておらず、HTMLのデフォルトのスタイルが適用されている
  • サイドナビゲーション項目がページの上部に表示される


バージョンが古いテンプレートを使用している

古いテンプレートを使用している場合に、正しくスタイルが適用されない可能性があります。

よくあるパターンとしましては、/admin/blog/edit.htmlなどの一部分のファイルを使用しているテーマに設置しており、一部分だけスタイルが適用されていないケースです。
Ver.1系から使用されているサイトでとくにみられるケースです。たとえばブログ管理のページで、Ver.1系の/admin/blog/edit.htmlを適用していると以下の図のような状態になります。



Ver.1系の/admin/blog/edit.htmlを適用している場合は、以下のような特徴があります。

  • ツールチップが四角の画像になっている
  • 保存、戻るボタンがページ内の下部に設置されている
  • 「基本設定」「カスタム設定」「エクスポート・インポート」などのタブがない
  • サイドナビゲーションや、トピックパスにはスタイルが適用されている

この場合の解決策としては、原因となっているテンプレートをリネームまたは削除することで解決できます。
もし何らかの理由でアップロードしている場合は、/themes/system/から新しいテンプレートを複製し、カスタマイズし直してください。

エントリー保存や特定ページで403エラーが出て保存・表示ができない

特定ページ(パスワード変更画面など)や特定の操作(エントリー保存など)で、 403エラー が出て、保存や表示ができない場合、 WAF(Web Application Firewall) が反応している可能性があります。

この場合、一度サーバーのコントロールパネルなどから、WAFを無効にして問題を切り分けてから、WAFの設定を調整していただくか、サーバー管理者にお問合せください。

WAFとは

WAFとはセキュリティ対策の一種で、Web Application Firewall(ウェブ・アプリケーション・ファイアウォール)の略です。 サイトなどのWebアプリケーションの保護に対応します。

今すぐ購入フォームを作成する

このエントリーでは、Shopping Cart 拡張アプリを使用して、今すぐ購入フォームを作成する手順を説明します。

今すぐ購入フォームとは

今すぐ購入フォームとは、カートを経由することなく商品(エントリー)を購入することができるフォームです。商品詳細ページのフォームから必要な情報を入力し、フォームを送信することで特定の商品のみを購入できます。

今すぐ購入フォームは GETモジュールである ShoppingForm_Now モジュールと、POST モジュールである ShoppingForm_ConfirmNow, ShoppingForm_SubmitNow モジュールを使用することで実装できます。

基本的には、購入フォームを作成する で作成したフォームのShoppingForm モジュールを ShoppingForm_Now モジュールへ、POSTモジュールをShoppingForm_ConfirmNow, ShoppingForm_SubmitNow モジュールに置き換えるだけで動作します。

<!-- BEGIN_MODULE ShoppingForm_Now -->
<form action="" method="post" class="js-unload_alert" enctype="multipart/form-data">
  <div class="form-btn-wrap">
    <input
      type="submit"
      name="ACMS_POST_ShoppingForm_ConfirmNow"
      value="入力内容の確認へ"
    />
  </div>
  <input type="hidden" name="quantity" value="1" />
  <input type="hidden" name="field[]" value="quantity" />
  <input type="hidden" name="takeover" value="{takeover}" />
  <input type="hidden" name="step" value="confirm" />
  <input type="hidden" name="error" value="reapply" />
  <input type="hidden" name="id" value="shoppingNowForm" />
</form>
<!-- END_MODULE ShoppingForm_Now -->
<!-- BEGIN_MODULE ShoppingForm_Now -->
<form action="" method="post" class="js-unload_alert" enctype="multipart/form-data">
  <div class="form-btn-wrap">
    <input
      type="submit"
      name="ACMS_POST_ShoppingForm_SubmitNow"
      value="注文を確定する"
    />
  </div>
  <input type="hidden" name="quantity" value="1" />
  <input type="hidden" name="field[]" value="quantity" />
  <input type="hidden" name="takeover" value="{takeover}" />
  <input type="hidden" name="step" value="confirm" />
  <input type="hidden" name="error" value="reapply" />
  <input type="hidden" name="id" value="shoppingNowForm" />
</form>
<!-- END_MODULE ShoppingForm_Now -->

今すぐ購入フォームの仕様

今すぐ購入フォームは商品(エントリー)詳細ページでのみ動作します。というのも、商品(エントリー)詳細ページのエントリーIDから注文情報を作成しているためです。購入させたい商品(エントリー)の詳細ページでないページからの購入は出来ませんのでご注意ください。

また、今すぐ購入フォームでは、購入する商品の数量を選択するフォームを作成できます。入力フィールドに name属性が quantity のフィールドをカスタムフィールドの形式で設置することで数量を選択できます。フォームに数量のフィールドを送信しなかった場合、数量はデフォルト値として0となります。

例えば、以下はセレクトタグで実装した例になります。

<select name="quantity">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<input type="hidden" name="field[]" value="quantity" />

今すぐ購入フォームの注文内容の金額情報を表示する

カートから購入する場合、Order_Summary モジュールを利用することで注文内容の金額情報を表示できました。今すぐ購入フォームにおいても、Order_Sumamry モジュールを利用することでその詳細ページのみの注文内容を表示できます。詳しい利用方法については、リファレンスやスニペットを参照してください。

まとめ

ShoppingCart 拡張アプリではカートを経由しない決済フォームも作成できます。カートを経由しないことで必要なステップを減らすことや、他の商品とは一緒に購入されたくないといったことを実現することが出来ます。

Login モジュール【~ Ver. 3.0】

この機能は Ver. 3.1 で廃止されました。新しい会員機能についてのドキュメントは以下をご覧ください。

ログイン・会員機能の基本

a-blog cms では、会員制サイトを作成するための読者登録機能が標準機能として搭載されています。また、SNSログインや2段階認証など、メールアドレス/ユーザーIDとパスワード以外でのログイン認証についても標準機能としてサポートされている他、パスワードポリシー設定などのセキュリティに関する設定も標準機能として提供されています。

主な機能としては以下のようなものがあげられます。

  • メールアドレスとパスワードによるログイン認証
  • SNSアカウントによるログイン認証
  • 2段階認証
  • ユーザー登録の外部申請(サイト閲覧者がアカウント登録をすることができる機能)
  • メールアドレスの有効性チェック
  • パスワード変更機能
  • パスワードポリシー(パスワードのルール)の設定

Login モジュール

a-blog cms では、ログイン認証や、読者登録機能ついては、Login モジュールとして提供しております。ログイン認証や、パスワード変更、外部申請によるユーザー登録などは POST 操作になりますので、POSTモジュールとして提供されています。Login モジュールはログイン認証や、パスワード変更、外部申請によるユーザー登録などでPOSTモジュールを実行した結果を表示するためのモジュールになります。

Login モジュールで利用できるブロック



ブロック名 概要
auth https://a-blogcmsの設置場所/config.server.php で LOGIN_SEGMENT に指定した文字列/ のURLにアクセスした時に表示されるブロックです。メールアドレスとパスワードによるログインやSNSログインの認証フォームを表示します。
reset Login_Remindモジュールで発行されたパスワード変更URLからアクセスした場合に表示されるブロックです。パスワード変更フォームを表示します。
tfa メールアドレスとパスワードによるログイン認証時、2段階認証が有効になっている場合に表示されるブロックです。2段階認証コードを入力して2段階認証を行うフォームを表示します。
recovery alt のURLコンテキストに recovery が指定されている場合に表示されるブロックです。2段階認証を無効にするフォームを表示します。
subscribe alt のURLコンテキストに subscribe が指定されているかつ、コンフィグ > ログイン設定 > 読者登録機能の ユーザー登録の外部申請が有効になっている場合に表示されるブロックです。ユーザーを外部から登録するためのフォームを表示します。
remind alt のURLコンテキストに remind が指定されている場合に表示されるブロックです。パスワード変更メールを送信するフォームを表示します。
<!-- BEGIN_MODULE Login -->
<section>
  <form action="" method="post" class="h-adr js-validator">

    <!-- BEGIN auth -->
    <!-- ログイン -->
    <!-- END auth -->

    <!-- BEGIN reset -->
    <!-- パスワード変更 -->
    <!-- END reset -->

    <!-- BEGIN subscribe -->
    <!-- 新規ユーザー登録 -->
    <!-- END subscribe -->

    <!-- BEGIN remind -->
    <!-- パスワード変更メールの送信 -->
    <!-- END remind -->

    <!-- BEGIN tfa -->
    <!-- 2段階認証 -->
    <!-- END tfa -->

    <!-- BEGIN recovery -->
    <!-- 2段階認証の無効化 -->
    <!-- END recovery -->
  </form>
</section>
<!-- END_MODULE Login -->

以下のブロックは、上記のブロックの中で使用することができるブロックです。



ブロック名 概要
submit GETによるアクセス(初回アクセス)や POSTモジュールの処理が失敗してエラーが発生した場合に表示されます。POSTモジュールの処理が成功した場合に非表示にしたいテンプレートに活用します。
sendMsg#before GETによるアクセス(初回アクセス)の場合に表示されるブロックです。初回アクセス時のみ表示したいテンプレートで活用します。
sendMsg#after POST によるアクセスかつ、POSTモジュールの処理が成功した場合に表示されるブロックです。POST モジュールの処理(パスワード変更やユーザー登録)が成功した場合に表示したいテンプレートに活用します。
subscribeLink コンフィグ > ログイン設定 > 読者登録機能の ユーザー登録の外部申請が有効になっている場合に表示されるブロックです。読者登録機能が有効になっている場合のみ表示したいテンプレートに活用します。
<!-- BEGIN_MODULE Login -->
<section>
  <form action="" method="post" class="h-adr js-validator">
    <!-- BEGIN subscribe -->
    <!-- BEGIN sendMsg#before -->
    <p>登録いただくと指定されたメールアドレスに確認メールが送信されます。メールの内容に従って登録を完了してください。</p>
    <!-- END sendMsg#before -->
    <!-- BEGIN sendMsg#after -->
    <p class="acms-alert acms-alert-info alert">入力されたメールアドレス宛に、確認用メールを送信しました。</p>
    <!-- END sendMsg#after -->

    <!-- BEGIN submit -->
    <button type="submit" class="btn" name="ACMS_POST_Login_Subscribe">会員登録</button>
    <!-- END submit -->
    <!-- END subscribe -->
  </form>
</section>
<!-- END_MODULE Login -->

Login モジュールで利用できる変数



変数名 概要
step GETによるアクセス(初回アクセス)では 'step' 、POSTモジュール実行後かつ、POSTモジュールの処理が成功した場合は 'result' 、POSTモジュール実行後かつ、POSTモジュールの処理が失敗した場合は 'reapply' が表示されます。IFブロックと組み合わせて利用します。
trialTime コンフィグ > ログイン設定 > セキュリティのアカウントロックで設定した、パスワード認証の再試行制限の時間(分)
trialNumber コンフィグ > ログイン設定 > セキュリティのアカウントロックで設定した、パスワード認証の再試行制限の回数
lockTime コンフィグ > ログイン設定 > セキュリティのアカウントロック時間で設定したアカウントがロックされた場合の時間(分)
passwordPolicyMessage コンフィグ > ログイン設定 > パスワードポリシーで設定したメッセージ

また、Form モジュール と同じく送信した値は変数として表示できます。また、バリデーターやコンバーターも Form モジュールと同じ形式で利用できます。

注意点として、Login 系の POST モジュールでは、プログラム側で強制的にバリデーションを設定しているため、テンプレートにバリデーターを設定していなくても、バリデータのエラーが表示されます。

例えば、Login_Auth モジュールでは、コンフィグ > ログイン設定 > アカウントロックで設定した、パスワード認証の再試行制限に引っかかった場合、mail というフィールドの lock というオプションでエラーが表示されます。

<p class="validator-result-{mail:validator#lock} acms-admin-alert acms-admin-alert-danger">{trialNumber}回ログインに失敗したため、アカウントがロックされました。{lockTime}分後にもう一度試してください。</p>

POSTモジュールで設定しているバリデーターはモジュールごとに異なるため、各種POSTモジュールのページを参照してください。

メールアドレス認証URLからアクセスした場合に利用できるブロック

コンフィグ > ログイン設定 > 読者登録機能で、メールアドレスの有効性確認が行われる設定になっている場合、Login_Subscribe モジュールでユーザー登録を行った場合、自動返信メールに記載されているメールアドレスの有効性認証のためのURLにアクセスして初めてユーザーがログインできるようになります。

Login モジュールでは、メールアドレスの有効性認証のためのURLからアクセスした場合に、ユーザーのメールアドレス認証が成功したかどうかの結果を表示するために以下のブロックが使用できるようになります。



ブロック名 概要
subscribe.enableAccount メールアドレスの有効性認証が成功した場合に表示されるブロックです。
subscribe.badRequest メールアドレスの有効性認証のためのURLの形式が不正であるために、メールアドレスの有効性認証が失敗した場合に表示されるブロックです。
subscribe.expired メールアドレスの有効性認証のためのURLの有効期限切れが原因で、メールアドレスの有効性認証が失敗した場合に表示されるブロックです。有効期限は コンフィグ > ログイン設定 > 読者登録機能の確認メールの有効時間で設定可能です。
subscribe.notFound メールアドレスの有効性認証を行う対象となるユーザーが見つからなかったために、メールアドレスの有効性認証が失敗した場合に表示されるブロックです。既にメールアドレスの有効性を認証済みかユーザーが削除されている場合などに表示されます。
<!-- BEGIN subscribe.enableAccount -->
<p class="acms-admin-alert acms-admin-alert-info">アカウントを有効化しました。メールアドレスとパスワードを入力してログインください。</p>
<!-- END subscribe.enableAccount -->
<!-- BEGIN subscribe.badRequest -->
<p class="acms-admin-alert acms-admin-alert-danger">不正なアクセスです。</p>
<!-- END subscribe.badRequest -->
<!-- BEGIN subscribe.expired -->
<p class="acms-admin-alert acms-admin-alert-danger">有効期限切れのURLです。再度申請ください。</p>
<!-- END subscribe.expired -->
<!-- BEGIN subscribe.notFound -->
<p class="acms-admin-alert acms-admin-alert-danger">すでに有効済みか無効なURLです。</p>
<!-- END subscribe.notFound -->

パスワード変更URLからアクセスした場合に利用できるブロック

Login_Remind モジュールで発行したパスワード変更URLにアクセスした場合に、そのアクセスが有効かどうかの検証を行っています。その検証結果を表示するために以下のブロックが使用できるようになります。



ブロック名 概要
reset.success 2段階認証有効時にパスワード変更を行った場合に表示されます。2段階認証が無効の場合は、パスワード変更後、ブログのトップページへリダイレクトされるため基本は利用しません。
reset.badRequest パスワード変更URLの形式が不正であるために、パスワード変更URLの有効性検証が失敗した場合に表示されるブロックです。
reset.expired パスワード変更URLの有効期限切れが原因で、パスワード変更URLの有効性検証が失敗した場合に表示されるブロックです。有効期限は コンフィグ > ログイン設定 > セキュリティのパスワード変更の有効時間で設定可能です。
reset.notFound パスワード変更URLの有効性検証を行う対象となるユーザーが見つからなかったために、パスワード変更URLの有効性検証が失敗した場合に表示されるブロックです。既にパスワード変更URLの有効性を認証済みかユーザーが削除されている場合などに表示されます。
<!-- BEGIN reset.success -->
<p class="acms-admin-alert acms-admin-alert-info">パスワードを変更しました。</p>
<!-- END reset.success -->
<!-- BEGIN reset.badRequest -->
<p class="acms-admin-alert acms-admin-alert-danger">不正なアクセスです。</p>
<!-- END reset.badRequest -->
<!-- BEGIN reset.expired -->
<p class="acms-admin-alert acms-admin-alert-danger">有効期限切れのURLです。再度申請ください。</p>
<!-- END reset.expired -->
<!-- BEGIN reset.notFound -->
<p class="acms-admin-alert acms-admin-alert-danger">不正なアクセスです。</p>
<!-- END reset.notFound -->