memberテーマの使い方

a-blog cms で会員制サイトを制作するための実装が事前にされている機能的かつモダンなテーマです。
特に会員制メディアサイトの構築を想定しています。

テーマ名は member ですが、コンテンツとして kurashi という「暮らし」をテーマにした会員制メディアサイトを想定しております。

目的

  • a-blog cms で会員制サイトをより早く、より安全に提供できること
  • a-blog cms の会員機能のカスタマイズ方法を学習できること

a-blog cms Ver. 3.1 から会員機能が強化されました。member テーマは強化された会員機能のカスタマイズ例としてもご活用いただけます。
会員機能について、Ver. 3.1 のリリース情報は以下をご確認ください。

会員機能を強化 - Ver. 3.1.0 リリース情報

利用用途

カスタマイズの有無に関わらず会員制サイト(特にメディアサイト)の構築を利用目的としています。

サイト構成

カテゴリーとエントリーの構成について説明します。

カテゴリーについて

member テーマは、通常のカテゴリーとシークレットカテゴリーの2種類のカテゴリーで構成されています。

通常のカテゴリーは一般ユーザーに公開するエントリーや、一部を会員限定にしたいエントリーを分類します。  

以下のカテゴリーが該当します。(括弧内はカテゴリーコード)

  • 記事(article)
    • グルメ(gourmet)
    • 文化・カルチャー(culture)
    • インテリア(interior)
    • 旅行・お出かけ(trip)
    • ガーデニング(gardening)
  • 特集(special)
  • ダウンロード(download)
  • お問い合わせ(contact)
  • 動画(video)
  • 会員限定記事(members-only)

シークレットカテゴリーは、会員限定に公開したいエントリーを分類します。ログインしていない状態でシークレットカテゴリーにアクセスすると会員向けサインインページが表示されます。

以下のカテゴリーが該当します。(括弧内はカテゴリーコード)

  • マイページ(mypage)

エントリーについて

member テーマには、ログイン中だけエントリーの続きを閲覧できる会員限定記事機能が既に実装されています。

エントリーの編集画面に移動し、「会員限定記事にする」チェックボックスにチェックをつけて保存することで、エントリーを会員限定記事とすることができます。


「会員限定記事にする」チェックボックスにチェックをつけている画像

「会員限定記事にする」チェックボックス


会員限定記事としたエントリーは、通常「続きを読む」の位置を設定するバーが「以下のユニットが会員限定になります」と表示が変わります。会員限定としたいユニットより上の位置にバーを動かして保存することで、バー以下のユニットを会員限定のコンテンツとすることができます。


「以下のユニットが会員限定になります」のバー

「以下のユニットが会員限定になります」のバー


ユニットについて

テキストユニットやテーブルユニット、メディアユニットなど標準のユニットに加えて以下のカスタムユニットが利用できます。

余白

余白を、3段階から選択できます。


管理画面側の余白ユニット

管理画面側の余白ユニット


罫線

罫線を表示します。上下の余白を3段階から選択できます。


閲覧ページでの罫線ユニットの表示

閲覧ページでの罫線ユニットの表示


価格表

価格表を表示するユニットです。おすすめプランを設定可能です。


閲覧ページでの価格表ユニットの表示

閲覧ページでの価格表ユニットの表示


目次

目次を表示するユニットです。目次ユニットは a-blog cms の組み込みJSを利用して、エントリー内の見出し要素に自動でアンカーリンクを生成、表示します。


閲覧ページでの目次ユニットの表示

閲覧ページでの目次ユニットの表示


ユニットグループ

ユニットグループも豊富に用意されています。


豊富なユニットグループ

豊富なユニットグループ

ユーザーについて

member テーマではユーザーのカスタムフィールドを活用して、会員ユーザーについて以下データを設定することができるようになっています。

プロフィール

マイページから更新可能な会員ユーザーのプロフィール情報です。

管理メモ

管理者用メモ欄です。ユーザーには公開されませんので、管理者ユーザーが会員ユーザーを管理するためのメモとして活用できます。

退会理由

会員ユーザー退会時に、会員ユーザー自身が入力した退会理由を保持することができます。
管理ページ > コンフィグ > ログイン設定の退会機能で削除タイプが「論理削除」に設定されている場合に利用可能なカスタムフィールドになります。

会員機能

member テーマでは _memberディレクトリのテンプレートで会員機能に関わるテンプレートをカスタマイズしています。
具体的には以下の機能に対応しています。

  • メールアドレス・パスワードによるサインイン
  • メールリンク認証(パスワードなしでのサインイン)
  • 2段階認証
  • 新規会員登録
  • メールアドレス変更
  • パスワード変更
  • パスワードリセット
  • SNSログイン
  • 退会

メールリンク認証

member テーマではメールリンク認証(パスワードなしでのサインイン)にも対応しています。

コンフィグ > ログイン設定からメール認証でのサインインを有効にすることで、従来のメールアドレスとパスワードによる認証からメールリンクによる認証へサインイン認証方法を変更することができます。


メール認証有効時の会員サインインページ

メール認証有効時の会員サインインページ


メール認証でのサインインを有効にすると、会員サインインページが上記のような表示になります。

パスワードを利用しないことによって、パスワード流出など、パスワードに起因するセキュリティリスクを排除することができる他、ユーザーにとってもパスワードを記憶する必要がないため簡単にサインインすることができます。

SNSログイン

member テーマではSNSログインにも対応しています。  

コンフィグ > ログイン設定からSNSログイン機能を有効にすることで、Google や X(旧Twitter)など、SNSによるログイン認証をすることができます。


SNSログイン有効時の会員サインインページ

SNSログイン有効時の会員サインインページ


SNSログイン機能を有効にし、各SNSでIDやKeyを設定すると、会員サインインページが上記のような表示になります。

SNSログインを導入することで、会員登録やサインインの手順が簡略化され、会員登録フォームの離脱率や新規会員登録率の改善、コンバージョン率の向上、再訪率やリピート率の向上が期待できます。

マイクロページ × 会員限定記事

member テーマは会員限定記事とマイクロページを組み合わせて利用しても動作するように設計されています。

マイクロページ機能を使ってエントリーをページ分割表示する を参考に、改ページユニットを活用してエントリーを作成します。

次に、会員限定記事を有効にして、任意の位置に「以下ユニットが会員限定になります」のバーを設置して保存します。

ログインしていない状態で、詳細ページにアクセスし、「以下ユニットが会員限定になります」のバーを設置したユニットが表示されるページまでページネーションすると以下のように会員限定コンテンツであるという内容が表示されるようになります。


マイクロページ機能と会員限定記事機能を併用した場合の表示

マイクロページ機能と会員限定記事機能を併用する。


このように member テーマはマイクロページ機能と会員限定記事機能を併用することも可能です。

ページキャッシュを利用する

member テーマは、読者ユーザーの場合にページキャッシュを有効にする設定をしていても問題なく動作するように設計されています。

読者ユーザーの場合でもページキャッシュを有効にするためには、コンフィグ > ページキャッシュ設定から読者ユーザーの場合のチェックボックスを有効にする必要があります。


読者ユーザーでもページキャッシュを有効にする場合の設定項目

読者ユーザーでもページキャッシュを有効にする場合の設定項目


読者ユーザーの場合でもページキャッシュを有効にした場合、ログイン状態やユーザー情報がキャッシュされてしまうため、カスタマイズによっては自分以外のユーザーの情報が表示されてしまう危険性がありますので注意してください。

member テーマではログイン状態による制御やユーザー情報をJavaScriptで管理することで、読者ユーザーの場合にページキャッシュを有効にする設定をしていても問題なく動作するようになっています。

これにより、会員制サイトでネックになることの多いのパフォーマンスの問題の改善が期待できます。

キャッシュ機能について、より詳しく知りたい方は以下のドキュメントをご確認ください。


まとめ

これで、member テーマについての説明は以上になります。

member は a-blog cms で会員制サイトを制作するための実装が事前にされているため、会員制サイトをより早く、より安全に提供することができます。会員制サイトを制作する際にはぜひご活用ください。

監査ログの確認

Ver. 3.1.0 から CMSで操作された内容や、CMSで発生したエラーがログとして残り管理画面から確認できるようになりました。 操作した人や、URL、HTTPヘッダーや、送信内容などログ毎に細かく情報が取れますので、何か問題が起きた時の調査に役立ちます。

操作ログはプロフェッショナルライセンス以上になりますが、何かしらエラーが起きた場合のログは、スタンダード版でも確認できるようになっております。

閲覧画面

管理者ルートブログの管理ページにある左側メニューの「監査ログ」から監査ログの閲覧ができます。

監査ログ画面では、ログの一覧が確認でき、ユーザーや期間、ログレベルで絞り込みが行えるようになっています。


監査ログ画面

監査ログ画面


詳細な情報を確認したい場合は、確認したいログの「詳細」ボタンを押すことで確認できます。 この画面では様々な情報が確認でき、右上の「クリップボードにコピー」ボタンを押すことで「JSONデータ」としてコピーすることができます。サポートを受ける際にも非常に有効な手段ですので、ぜひご利用ください。


ログの詳細情報

ログの詳細情報


ログレベル

ログのレベルは全部で以下のものがあります。「INFO(情報)」については、プロフェッショナルライセンス以上でのみ記録されるようになります。ユーザーの操作履歴を残したい場合は、プロフェッショナルライセンス以上をご検討ください。



ログレベル 説明 スタンダード プロ以上
DEBUG(デバッグ) デバッグ情報
INFO(情報) エラーではない正常の操作を記憶します
NOTICE(注意) 特にプログラムを修正する必要はないが、不正操作・不正アクセス(CSRFチェック、アカウントロック時)など
WARNING(警告) 潜在的な問題。不具合や環境に問題がある可能性があるエラーなど
ERROR(エラー) データが壊れているなど、不具合や環境に問題がある可能性があるエラー。処理が継続できない場合など
CRITICAL(重大) 一部機能が使用不能・表示不能になったなどの、ある程度影響範囲が大きいエラーが起きた場合など
ALERT(警報) データベースに接続できないなど、サイトが表示できない状態で緊急で対応が必要な場合など
EMERGENCY(緊急) サイトが表示できない状態。基本的には使用していません。

通知機能とファイルへの保存

エラーが発生した際、問題にすぐに気がつけるように監査ログ機能には通知機能がついており、設定したログレベル以上のログが発生すると、メールで通知してくれます。 また、データベースにログは保存しているのですが、ファイルにも書き出すことが出来るようになっております。

設定方法

a-blog cms設置ディレクトリにある「.envファイル」で設定を行います。

# エラー通知
ALERT_EMAIL_FROM=info@example.com # エラー通知メールの送信元
ALERT_EMAIL_TO= # エラー通知メールの送信先。空の場合「UID」が一番小さい管理者アカウントのメールアドレスに送信します。
ALERT_EMAIL_BCC= # カンマ区切りで指定
ALERT_REPORTING_LEVEL=WARNING # エラー通知をする最低ログレベルを設定します。(DEBUG|INFO|NOTICE|WARNING|ERROR|CRITICAL|ALERT)

# ロガー
LOGGER_ROTATING_MAX_FILES=60 # ログローテーションの日数を設定します。
LOGGER_MODE=development # (development|production) productionに設定すると、ライセンス切れやデバッグモード時なども、ログとして残します


設定項目 説明 デフォルト値
ALERT_EMAIL_FROM エラー通知メールの送信元 info@example.com
ALERT_EMAIL_TO エラー通知メールの送信先。空の場合「UID」が一番小さい管理者アカウントのメールアドレスに送信します
ALERT_EMAIL_BCC エラー通知メールのBCC
ALERT_REPORTING_LEVEL エラー通知をする最低ログレベルを設定します WARNING
LOGGER_ROTATING_MAX_FILES ログローテーションの日数を設定します 60
LOGGER_MODE productionに設定すると、ライセンス切れやデバッグモード時なども、ログとして残します development

モード

LOGGER_MODEはデフォルトだと「development」になっています。この状態だと、ライセンスに問題があった場合などログが残らず通知もしてくれないので、本番環境では必ず「production」に設定しましょう。

また本番環境での「LOGGER_MODE」の変更し忘れを防止するため、「development」に設定されている時はダッシュボードと監査ログページに以下の表示がされるようになっています。


ダッシュボード

ダッシュボード


監査ログページ

監査ログページ


ファイルへの保存

デフォルトで、ログはデータベースに書き出されますが、ファイルに書き出すことも可能です。ログの書き出し先は「config.server.php」で設定します。

ファイルに書き出されるログは「NOTICE」以上のログになります。

例えば、ドキュメントルートの一階層上の「logs」ディレクトリに「acms.log」という名前で保存する場合は、以下のように指定します。

define('ERROR_LOG_FILE', '../logs/acms.log');

ログファイルは、1日に1ファイル作成され、ログローテーション日数に指定されたファイル数作成されます。 ログローテーション日数を超えた場合は、古いファイルが削除され新しいファイルが作成されます。

LOGGER_ROTATING_MAX_FILES=60 # ログローテーションの日数を設定します。

以下は、ファイル名を「acms.log」とした場合のログファイル作成例になります。

acms-2023-09-28.log
acms-2023-09-29.log
acms-2023-09-30.log
acms-2023-10-01.log
acms-2023-10-02.log
...

開発者向け

専用モジュールやHookなどを使用して、PHPをカスタマイズしている方もいると思います。 そんな方には、以下の方法を使うことで自分のプログラムにログを追加できるようになります。

基本的な使い方

  • 保存したいログレベルのメソッドを呼び出す
  • 第1引数: メッセージ文字列
  • 第2引数: 保存したい情報(連想配列)
AcmsLogger::[ログレベル](string $message, array $info);

// 例
AcmsLogger::info('xxxを作成しました', [
  'hoge' => 'abc',
  'hoge2' => 200,
]);

use して使う場合

use Acms\Services\Facades\Logger;

Logger::info('xxxx');

コード例

メッセージだけ指定

\AcmsLogger::critical('重大な問題により動作を停止しました');

例外をログとして残す

「Common::exceptionArray()」を第2引数に指定すると、例外の詳細な情報を渡してくれます。

try {
...
} catch ( \Exception $e ) {
    \AcmsLogger::warning($e->getMessage(), \Common::exceptionArray($e));
}

このログは通常のログと同じように表示や通知などに利用できますので、PHPでカスタマイズを行っている方はぜひお試しください。

エントリーの排他制御機能(編集ロック機能)

Ver. 3.1.0 以上のプロフェッショナル・エンタープライズライセンスで、エントリーにロックがかけれるようになりました。これにより意図しないエントリーの上書きでのデータ消失のリスクが減ります。

動作の流れ

エントリーを編集していて、保存ボタンを押すまでは、編集中のエントリーにロックが自動でかかります

ロック中は、以下のスクリーンショットのように、エントリー一覧からロックがかかっていることが分かるようになっています。 自分がロックしている場合と、他のユーザーがロックしている場合で、違うアイコンが表示されるようになっています。


自分がロックしている場合の表示

自分がロックしている場合の表示


他のユーザーがロックしている場合の表示

他のユーザーがロックしている場合の表示


自分ではない他のユーザーが、編集中(ロック中)のエントリーの編集画面を開くと、以下のようなスクリーンショットが表示され、ロックしているユーザーや編集日時がわかるようになっています。


ロック中に表示されるアラート

ロック中に表示されるアラート


アラートを閉じれば、この状態でもエントリーの編集は可能になっておりますが、保存をすると以下スクリーンショットのエラーが出て保存できないようになっています。ではなぜ編集できるようになっているかというと、違うバージョンでの保存はロックがかかっていても保存はできるためになります。


ロック中のエントリーを保存した時のアラート

ロック中のエントリーを保存した時のアラート


エントリーの編集中に編集をやめページを離脱した場合はロックが残ってしまいます。このような時は、再度エントリー編集ページを開いて保存をするか、以下スクリーンショットにあるようにエントリー一覧から、ロックアイコンをクリックするこで、ロックを解除することが出来ます。


ロックの解除

ロックの解除


コンフィグ設定

管理ページ > コンフィグ > 機能設定に「エントリー同時編集ロック」のコンフィグがあります。

  • 同時編集ロック機能:チェックをつけると機能が有効になり、外すと機能が無効になります。
  • アラートのみ:チェックをつけると、ロックされている事のアラートは表示されますが、アラートを無視して保存できるようになります
  • ロック有効期限:ロックの有効期限を設定します。この期間を過ぎたロックは自動的に解除されます。

エントリー同時編集ロックのコンフィグ

エントリー同時編集ロックのコンフィグ