CMS の設定をユーザー毎に変更したい

CMSに限らず、ソフトウェアでは、様々な設定ができます。全ユーザーで同じ設定、が便利なケースもあります。しかし、必ずしもそうとは限りません。

「画面に詳しいヘルプメッセージを表示してほしい」というユーザーと「画面にヘルプメッセージが表示されると、操作の邪魔だ」というユーザーがいた場合、どちらかに統一すれば、満足する人もいれば、不満に思う人も出てくるでしょう。

このような場合、ユーザー毎に設定を保存するようにしておけば、解決しますね。concrete5では、ユーザーに属性を設定することができます。ユーザーが自分の属性を設定するようにすれば、各々の好みに合わせて設定できます。

ユーザー属性を追加する方法

concrete5では、Concrete\Core\Attribute\Key\UserKey.phpで、ユーザー属性に関するクラスUserKeyが定義されています。コードを読んでいくと、addメソッドが用意されていますね。このメソッドを使うことで、ユーザー属性を追加することができます。

Accessibility per Userアドオンでは、以下のように記述しています。

    $type = AttributeType::getByHandle('boolean');
    $args = array(
        'akHandle' => 'ounziw_toolbar_titles',
        'akName' => t('Enable Toolbar Titles'),
        'uakRegisterEdit' => 1,
        'uakProfileEdit' => 1,
    );
    UserAttributeKey::add($type,$args);

UserAttributeKeyは、Concrete\Core\Attribute\Key\UserKeyの別名です。addメソッドには、「属性の種別(ここではboolean)」と「詳細な設定」を引数に渡しています。

こうすることで、ユーザー毎に、「ツールバーのフォントサイズを大きくするかどうか」を設定するチェックボックスが作成できました。

ユーザー属性を取得する方法

続いて、concrete5の処理途中でユーザー属性を取得するようにします。手順としては、次のようになります。

    $u = new User();
    if (is_object($u) && $u->checkLogin()) {
        $uinfo = UserInfo::getByID($u->uID);
        if ($uinfo->getAttribute('ounziw_toolbar_titles')) {
            // true だった場合の処理を書く
        }
    }

まず、$u = new User(); で、現在のユーザーを取得します。つぎに、if (is_object($u) && $u->checkLogin()) { で、「オブジェクトが取得できた&ログインしている」をチェックしています。このチェックを通ったら、UserInfo::getByIDでユーザー情報を取得します。

ユーザー情報$uinfoのメソッドgetAttributeで、ユーザー属性の値を取得できます。こうすることで、ユーザーが設定した属性値を取得できます。

どうやったら調べられるのか?

さて、上のように記述すれば、ユーザー毎に属性を設定し、ユーザーが各自設定する、ということができます。では、どうやったら、UserAttributeKeyを使えばよい、ということが分かるのでしょうか。

それには、concrete5 の管理画面のURLがヒントになります。concrete5 では、管理画面からユーザー属性を追加することができます。そのページのURLを確認してみます。URLは、dashboard/users/attributes となっていますね。ここから、concrete5本体の concrete\controllers\single_page\dashboard\users\attributes.php を読みに行くと、処理が書いてありそうだ、と分かります。

実際に読んでいくと、addメソッドが用意されています。さらにaddメソッドの中を見ていくと、UserAttributeKey::addという記述が見つかります。

このように読んでいけば、ユーザー属性を追加したい場合のコードを効率よく調べることができます。

お知らせ - concrete5 導入活用セミナー

concrete5導入活用セミナーが11月18日(水)に開催されます。concrete5は、ウェブサイトを構築するだけにとどまらず、企業のウェブ戦略を大きく変えるポテンシャルを持っています。既に東京や大阪では開催されていますが、名古屋では初開催となります。

私の担当部分では、外部サービスとの連携、管理画面カスタマイズといった、ウェブサイト運用を効率化する方法をお話します。ホームページを作ったけど活用できていない、という企業のウェブ担当者様にお勧めです。

記事公開日: 2015年10月26日
#

concrete5では、品質を審査済みのテーマ・アドオンを公式サイ... 詳細はこちら

concrete5の設定ファイルのコメントを日本語訳しました。 詳細はこちら

concrete5 のユーザーIDに使える文字列を調査。ver5.7.4.2。... 詳細はこちら