MovableTypeの管理画面をカスタマイズする

MovableTypeの管理画面って結構カスタマイズが必要になるときがあります。
たとえば、お客さんのとこに納品するときにシステム部分のものを弄られて、無茶苦茶になってしまわないように、システム管理者以外のアカウントは非表示にしたいメニューとかあるわけです。
投稿記事部分なら、MTAppjQueryプラグインが最高に便利でこれで事足りるんですが、ユーザーの権限をもっと詳細に決めたいとか、システムに関わるような部分のリンクを削除したいとかには、やはり自分でconfig.yaml を作ってカスタマイズするしかない。
ということで、そのやり方を説明。

1. カスタマイズにつかうconfig.yaml を用意する

新規テキストファイルを作成して、名前を config.yaml で保存。それを任意のフォルダ名の中にいれて、MTをインストールしているサーバーの plugins フォルダにアップロードします。

例: mt/plugins/<任意のフォルダ名>/config.yaml

2. config.yaml に実際に書き込んでいく

例えば、MT管理画面のサイドメニューにある「ツール」や「コメント」、「アイテム」「ウェブページ」といったメニューを、システム管理者以外は非表示にしたいといった場合は、config.yamlに以下のように記述します。

name: CustomMenu
version: 1.0

applications:
    cms:
        menus:
            feedback:
                permission: administer
            tools:
                permission: administer
            asset:
                permission: administer
            website:
                permission: administer
            entry:create:
                permission: administer

上記の name: や version: は任意で記述。それぞれの対応箇所は以下のとおり。
feedback: コメント
tools: ツール
asset: アイテム
website: ウェブページ
entry:create:記事新規作成

次に、ユーザーダッシュボードでシステム管理者以外表示する意味ないでしょっていうものを非表示にする。
例えば、以下の例では「MovableTypeニュース」、「サイト情報」、「最近利用したウェブサイト/ブログ」を一般ユーザーには非表示に設定する記述。

widgets:
    mt_news:
        label: Movable Type News
        template: widget/mt_news.tmpl
        singular: 1
        set: sidebar
        handler: $Core::MT::CMS::Dashboard::mt_news_widget
        view: user
        condition: sub { return MT->instance()->user->is_superuser }
        order:
            user: 500
    site_stats:
        label: Site Stats
        template: widget/site_stats.tmpl
        singular: 1
        set: main
        handler: $Core::MT::CMS::Dashboard::site_stats_widget
        view: user
        condition: sub { return MT->instance()->user->is_superuser }
        order:
            user: 200
    favorite_blogs:
        label: Websites and Blogs
        template: widget/favorite_blogs.tmpl
        singular: 1
        set: main
        handler: $Core::MT::CMS::Dashboard::favorite_blogs_widget
        view: user
        condition: sub { return MT->instance()->user->is_superuser }
        order:
            user: 300

それぞれの対応箇所は以下のとおり。
mt_news: MovableTypeニュース
site_stats: サイト情報
favorite_blogs: 最近利用したウェブサイト/ブログ

要するにやっていることは、MTのコアモジュール(/lib/MT/App/CMS.pm)をプラグインを作って上書きしている形になります。 なので、カスタマイズするときはこのコアモジュールを元に修正したい部分をコピーしてきて弄るという感じですね。 もっと詳しい説明は以下のサイトをご覧ください。

管理画面のメニューをカスタマイズする