拙著「個人投資家は低位株で儲けなさい」が発売されました。
株価が安い「低位株」に投資する方法を解説しています。
自由国民社刊で、定価1,512円(消費税込み)です。
ユーザーのカスタムフィールドの値でダッシュボードウィジェットの表示を変える
ダッシュボードウィジェットを、ユーザーのカスタムフィールド(チェックボックス)のチェックのあり・なしによって表示・非表示を切り替えたいと思っています。
この質問に答えます。
1.ユーザーの情報を得る
ダッシュボードウィジェットのテンプレートの中で、ユーザーの情報を得るには、MTAuthorsタグでユーザーの情報をすべて読み込んだ上で、現在ログイン中のユーザーかどうかを調べるようにします。
また、現在ログイン中ユーザーのIDは、変数author_idに代入されています。
なお、MTAuthorsタグでユーザーを読み込む際には、「need_entry="0"」と「role="ロール名"」のモディファイアを指定して、ブログ記事がないユーザーも含み、かつ特定のロールを持つユーザーを読み込むようにします。
たとえば、「ブログ管理者」か「ライター」か「ユーザー」のロールがあるユーザーを読み込み、その中で現在ログイン中のユーザーだけ何かを表示するようにするには、テンプレートに以下のような部分を入れます。
<mt:Authors need_entry="0" role="ブログ管理者 OR ライター OR ユーザー">
<mt:If tag="AuthorID" eq="$author_id">
表示する内容
</mt:If>
</mt:Authors>
2.特定のユーザーだけダッシュボードウィジェットを追加できるようにする
1.で挙げた方法を使うと、ユーザーに応じてダッシュボードウィジェットの表示内容を変えることはできます。
ただ、今のままだと、ダッシュボードウィジェットを選択するドロップダウンで、どのユーザーでもダッシュボードウィジェットを追加することができます。
特定のユーザーだけダッシュボードウィジェットを追加できるようにしたいとなると、1.だけでは不十分です。
ダッシュボードウィジェットを追加できるかどうかを指定するには、テンプレートではなく、config.yamlにPerlのコードを書く必要があります。
質問の例では、チェックボックスのカスタムフィールドのオン/オフで、表示するかどうかを変えたいということでした。
この場合、config.yamlの「widgets:」以下を以下のように書きます。
「カスタムフィールドのベースネーム」の部分は、実際のベースネームに置き換えます。
widgets:
ウィジェット名:
label: ウィジェットの名前
(途中略)
condition: >
sub {
use CustomFields::Util qw( get_meta );
my $app = MT->instance;
my $author = $app->user;
my $meta = get_meta($author);
return $meta->{カスタムフィールドのベースネーム};
}
3.関連記事
ダッシュボードウィジェットの作り方は、以下の記事をご参照ください。
