拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
ユーザーのカスタムフィールドの値でダッシュボードウィジェットの表示を変える
ダッシュボードウィジェットを、ユーザーのカスタムフィールド(チェックボックス)のチェックのあり・なしによって表示・非表示を切り替えたいと思っています。
この質問に答えます。
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.関連記事
ダッシュボードウィジェットの作り方は、以下の記事をご参照ください。