baserCMS 5系 ダッシュボードマネージャー プラグインを作ってみました。
- 2026/7/17 追記
「baserCMSニュース」ブログ(サイト)がメンテナンスされたようで、現状のデータ取得はそれなりの速度が出ているため、ボトルネックは解消されているようです。最近、ユーザーズフォーラムに上がっていた5系管理画面のダッシュボードの既存パネルを削除したいという要望。 じつは4系の頃から「baserCMSニュース」パネルの読み込みがすごく重くて、管理画面のトップ画面であるダッシュボードの描画がなかなか完了しないという状況にずっとイライラしてきた私も然り。4系の場合は、利用してるテーマフォルダ内/Elements/admin/dashboard 配下にサクッと空の同名ファイルを設置すれば簡単にパネル(通信諸共に)をなきものにできたのですが、5系は何やら事情が違って、一筋縄ではいかないなぁーと思っていたところ。
ダッシュボードのデータ処理、コンテンツ表示用データの集計・加工、描画サービスコンポーネントの/vendor/baserproject/baser-core/src/Service/Admin/DashboardAdminService.phpをみてみると、
public function getViewVarsForIndex(int $logNum): array
{
return [
'panels' => $this->getPanels(),
'dblogs' => $this->getService(DblogsServiceInterface::class)->getDblogs($logNum),
'contentsInfo' => $this->getService(ContentsServiceInterface::class)->getContentsInfo(),
// パネルの有無に関わらず、この行が「単独で」実行される
'baserNews' => $this->getService(BcOfficialApiServiceInterface::class)->getRss('baserNewsRss')
];
}
パネル一覧をスキャンして集める処理('panels' => $this->getPanels())と、外部へニュースを読みに行く通信処理('baserNews' => $this->getService()->getRss())は、連想配列の中で独立した別々の処理として記述されています。'baserNews' を取得するコードの周囲に「もし baser_news.php が非表示なら通信をスキップする」というような、$this->getPanels() の結果を参照する条件分岐なども特に見当たりません。
つまり、公式サイトで説明しているようなView層のハック(テンプレートの空ファイル化)で単にパネルを非表示にしたとしても、外部へニュースを読みに行く通信処理は裏側で実行されていることになり、ダッシュボードの描画遅延のボトルネックは解消されないということになりそうです。
ちなみに4系では、baser_news.php ファイルの中に通信コード(Feedプラグインなどのコンポーネントやヘルパーの呼び出し)が直接記述されていたので、View側で代わりの空の baser_news.php ファイルを読み込ませれば、結果として外部への通信処理そのものが発生しなかったんですよね。
ならば、画面が描画されるより手前のService層(+Configureの制御)に割り込んで(DashboardAdminService.php の処理をインターセプト)、画面にデータが渡る直前で、パネル自体を配列から unset で消去してしまおうというのが DashboardManagerプラグイン です。
また、コアのクラスを継承(extends)しているので、ログの取得(dblogs)やコンテンツ情報の取得(contentsInfo)といったコアが持つその他の処理はすべてコア(親クラス)にそのまま任せて(parent::)います。
あと、ついでにせっかく割り込むんだから、ちょっとした便利機能(自作パネルの先頭移動やカスタムソート機能)も付けています。
では、いつものようにreadme.mdの写しです。
DashboardManager for baserCMS 5
baserCMS 5系 管理画面のダッシュボードの既存パネルの消去、外部通信も遮断します。また、新作パネルの表示順を先頭へ移動、並び順の変更などを行えます。
特徴
- ダッシュボード表示速度の改善(ボトルネック解消):
hidePanels設定により、コアシステムによる外部通信(RSSフィード取得等)をリクエスト送信の手前で安全に遮断(スキップ)します。 - パネルを消去:
DashboardAdminServiceの処理をインターセプトし、パネル定義を配列からunsetで削除することで、タイトルやフッターの枠線も含めて画面上から消去します。 - 自作パネルの先頭移動・カスタムソート: 追加した複数の自作パネルをコアパネルよりも上位に移動させ、その表示順も任意に並び替えることができます。
動作環境
- CMS本体: baserCMS 5.x以上(admin-third)
インストール方法
- 本リポジトリをダウンロードし、フォルダ名を DashboardManager に変更します。
- 本プラグインを plugins/DashboardManager/ ディレクトリへ配置します。
- baserCMS 管理画面の「プラグイン管理」を開きます。
- 一覧から「DashboardManager」を選択し、「インストール(有効化)」を実行します。
- 有効化完了後、「システム管理 > ユーティリティ > サーバーキャッシュ削除」 を実行します。
設定・カスタマイズ方法
プラグインフォルダ内の config/setting.php にパネル制御設定を行います。
<?php
return [
'BcApp' => [
'dashboard' => [
// 非表示設定:パネル非表示&通信を遮断したいパネルのファイル名(識別子)を登録する
'hidePanels' => [
'baser_news', // baserCMSニュースパネルを非表示
// 'mail_messages', // 受信メールパネルを非表示
// 'contents_info', // コンテンツ情報パネルを非表示
// 'update_log', // 最近の動きパネルを非表示
],
// 並び替え設定:先頭に配置したい自作パネル名から順に登録する
'sortPanels' => [
'sample_my_panel', // 1番目に表示したい自作パネル名
// 'sample_my_panel2',
]
]
]
];
自作パネルの設置方法
利用されいるテーマ内/templates/Admin/element/Dashboard/ の位置に、例えばsample_my_panel.phpという自作パネルを設置します。 自作パネルは、既存パネルに倣って、PHPやHTMLで自由に作成します。
ライセンス
本プラグインは MIT License のもとで公開されています。個人・商用問わず、自由に変形・再配布していただいて構いません。
HATTANTOCO