簡単なダッシュボードウィジェットを作る(その4)

昨日に続いて、簡単なダッシュボードウィジェットを作る方法を解説します。
今日は、ブログ毎の/システムのダッシュボード専用のウィジェットを作る方法を紹介します。

1.config.yamlファイルに記述を追加

ブログ毎/システム専用のダッシュボードウィジェットを作るには、config.yamlファイルに、「condition」の部分を追加します(以下のリストの赤字部分)。

name: プラグインの名前
id: プラグインのID
description: プラグインの概要
version: プラグインのバージョン
widgets:
  ダッシュボードウィジェットのID:
    label: ラベル
    plugin: $プラグインのID
    template: ファイル名
    singular: true
    set: mainまたはsidebar
    condition: >
      sub { ブログ毎/システムの条件判断 }

「ブログ/システムの条件判断」の箇所には、正規表現を使って、ブログ毎かシステムかを判断する条件判断の文を書きます。
書き方は以下の通りです。

システムのダッシュボード専用にする場合

sub { $_[1] =~ /system$/; }

ブログ毎のダッシュボード専用にする場合(すべてのブログで有効)

sub { $_[1] =~ /blog:\d+$/; }

ブログ毎のダッシュボード専用にする場合(一部のブログで有効)

sub { $_[1] =~ /blog:(ブログのID|ブログのID|...|ブログのID)$/; }

「ブログのID」の箇所に、ダッシュボードウィジェットを有効にしたいブログのIDを指定します。
例えば、IDが1番/3番/5番のブログでだけダッシュボードウィジェットを有効にするには、以下のように書きます。

sub { $_[1] =~ /blog:(1|3|5)$/; }

2.config.yamlファイルの例

昨日ご紹介したサンプルを、IDが1番のブログでのみ有効にするには、config.yamlファイルを以下のように書きます。

name: Dashboard Widget Sample 2
id: DashboardWidgetSample2
description: ダッシュボードウィジェットの例2
version: 1.0
widgets:
  sample_widget2:
    label: 作業メニュー2
    plugin: $DashboardWidgetSample2
    template: sample_widget2.mtml
    singular: true
    set: main
    condition: >
      sub { $_[1] =~ /blog:(1)$/; }

3.テンプレート内でシステム/ブログを判断する

複数のブログにダッシュボードウィジェットを対応させる場合、「ウィジェットの大半の部分は共通で、一部がブログごとに異なる」といったことも出てきます。
その場合、ウィジェットのテンプレートの中で、MTIfタグを使ってブログのIDを判断し、ブログごとに出力する内容を変える、といった方法を取ることができます。

例えば、IDが1番のブログのときだけ、「サイトを確認」というリンクを追加したいとします。
また、そのリンクをクリックしたときに、ブログのメインページが表示されるようにしたいとします。
その場合、ウィジェットのテンプレートに以下のような部分を追加します。
なお、「blog_url」はMT内部で定義されている変数で、ブログのアドレスを表します。

<mt:if name="blog_id" eq="1">
    <a href="<$mt:var name="blog_url" escape="html"$>" target="_blank">サイトの確認</a>
</mt:if>