カスタマイズの方法
メニューのカスタマイズはプラグインの作成をもって行います。ただ作業の内容はサンプルの config.yaml を書き換えるだけなので、Perl の知識や config.yaml に関する特別な知識は必要ありません。
例1: 特定のメニュー項目を隠す
プラグインによるカスタマイズを行なわなくても、ユーザーの権限を減らすことで利用できないメニューは表示されなくなるのですが、デフォルトの設定だと「記事の作成」権限をを与えるだけで、「ブログ記事」の他に「コメント」と「ツール」のメニュー項目も出てきてしまうので、本当にブログ記事だけを書かせたいユーザー向けに、これらのメニューを消してみます。
config.yaml
name: MenuSample
version: 1.0
applications:
cms:
menus:
feedback:
permission: administer
tools:
permission: administer
例2: カテゴリーを指定した「新規作成」や「一覧」
「新規作成」や「一覧」のメニューをカスタマイズしてみます。
新規作成メニュー項目の追加
「ブログ記事新規作成画面」のURLに「&category_id=3」などを付けるとカテゴリーが選択されている状態で新規作成画面になるのですが(他のフィールドに対しても指定できます)、このようなデフォルト値を指定した新規作成へのリンクをメニューに追加してみます。
entry:create_news:
label: 「ニュース」新規作成
order: 100
mode: view
args:
_type: entry
category_id: 3
permission: create_post
view: blog
「args:」の下に渡したい項目名と値を指定します。
一覧メニュー項目の追加
「ブログ記事一覧画面」のURLに「&filter=category_id」などを付けるとカテゴリーで絞り込みを行うことができるので、新規作成と同様にメニューに追加してみます。
entry:manage_news:
label: 「ニュース」一覧
order: 150
mode: list_entry
args:
filter: category_id
# filter_key本当は必要ないですが、
# 他の絞り込みのリンクと区別するために入れています
filter_key: list_news
filter_val: 3
permit_action: use_entry:manage_menu
view:
- blog
- website
こちらも「args:」の下に渡したい項目名と値を指定します。
新規作成メニューへの追加
「新規作成メニュー」は新しいもののせいか、仕様がちょっと微妙なところがあるのですが、「compose_menus > compose_menus > menus」を書き換えることによりカスタマイズすることができます。
compose_menus:
compose_menus:
menus:
entry_news:
label: ニュース
order: 50
mode: view
args:
_type: entry
category_id: 3
permission: create_post
view: blog
メニュー項目の書き方としては左側のメニューと同じです。
config.yaml
まとめるとこのような「config.yaml」になります。
既知の問題点
上記のように柔軟に初期値を指定できる「新規作成」へのリンクなのですが、これについては実は2つほど問題点があります。
- カテゴリーの違う2つの「新規作成」のメニュー項目を用意した場合(上記の例)、新規作成画面へ進んだ場合に両方のメニューがアクティブになってしまう。
- カスタムフィールドとカテゴリーを関連付けている場合に、「&category_id=x」のようにURLでカテゴリーを指定した場合はカスタムフィールドが表示されない。
例3: ユーザーダッシュボードに表示する
ユーザーのトップページとして用意されている「ユーザーダッシュボード」には、デフォルトではメニューは表示されていないのですが、ここまでの指定と同じように config.yaml でメニューを表示させることができます。
config.yaml
name: MenuSample
version: 1.0
applications:
cms:
menus:
ydb_entry:
label: ブログ記事
ydb_entry:create:
label: ブログAの記事作成
order: 100
mode: view
args:
_type: entry
blog_id: 2
condition: |
sub {
MT->instance->user->permissions(2)->can_create_post
}
view: user
ydb_entry:create_blogb:
label: ブログBの記事作成
order: 200
mode: view
args:
_type: entry
blog_id: 3
condition: |
sub {
MT->instance->user->permissions(3)->can_create_post
}
view: user
「view: user」がポイントです。
各ブログに「ブログ記事作成権限」のあるユーザーにはメニューを表示します。
デフォルトのメニュー
デフォルトのメニューを変更する場合に、メニュー項目の名前を指定する必要がありますので、(MT5rc2時点での)デフォルトのメニューを並べた config.yaml を作りました。
サンプルのダウンロード
この記事で作成した config.yaml をまとめました。
各「config_xxx.yaml」を「config.yaml」に変更するとそのまま利用できます。
番外編
ユーザーダッシュボードに関しては「システム」のメニューを出してしまえばよいのではないかという考え方もあり、Junnamaさんがそのように動作するUserDashboardというプラグインを公開していますので、こちらも参照して頂くとよいかもしれません。
ただJunnamaさんもブログで触れられていますが、「いずれ動かなくなるだろうな」という要素もあるようなので、その点は若干気をつけた方がよいと思います。
初心者の私でも簡単に設定できました。
複数のブログを管理する時、ブログ別にメニューを変更できないのでしょうか。