アドオンから管理画面(admin.php)にメニューを追加する方法です。管理画面のメニューは、スキーマファイルだけで追加できます。CS-Cart 4.19.1 以降で確認した内容です。
1. メニューのスキーマ
app/addons/<アドオンID>/schemas/menu/menu.post.php を作ります。
新しいルートメニューを追加する
<?php
defined('BOOTSTRAP') or die('Access denied');
/** @var array $schema */
// サイドバーに新しいルートメニューを追加する
$schema['central']['my_addon'] = [
'title' => __('my_addon.menu_title'),
'position' => 550, // website(500) と administration(600) の間
'icon' => 'file', // Glyph アイコン名
'items' => [
'my_addon_manage' => [
'title' => __('my_addon.list'),
'href' => 'my_addon.manage', // コントローラー.モード
'position' => 100,
],
],
];
return $schema;既存のメニューに項目を追加する
まずは、既存のメニューの下に項目を追加する方法を検討してください。ルートメニューを増やす必要がない場合は、こちらが簡単です(3. validate_menu の設定 も参照)。
// サイドバー(central)の既存のメニュー(website)に項目を追加する
$schema['central']['website']['items']['my_addon'] = [
'href' => 'my_addon.manage',
'position' => 1100,
];メニューを削除する
unset($schema['central']['marketing']);
unset($schema['central']['orders']['items']['shipments']);central セクションの position の目安
| メニュー | position |
|---|---|
| orders | 100 |
| products | 200 |
| customers | 300 |
| marketing | 400 |
| website | 500 |
| administration | 600 |
2. パーミッションのスキーマ
管理者向け
app/addons/<アドオンID>/schemas/permissions/admin.post.php
<?php
defined('BOOTSTRAP') or die('Access denied');
// 管理者は GET / POST の両方を許可する(フルアクセス)
$schema['my_addon'] = [
'permissions' => ['GET' => true, 'POST' => true],
];
return $schema;ベンダー向け
app/addons/<アドオンID>/schemas/permissions/vendor_multivendor.post.php
<?php
defined('BOOTSTRAP') or die('Access denied');
// モードごとに細かく制御する
$schema['controllers']['my_addon'] = [
'modes' => [
'list' => [
'permissions' => true, // 許可
],
'view' => [
'permissions' => true,
],
'update' => [
'permissions' => 'manage_own', // 権限の名前
],
],
];
return $schema;3. validate_menu の設定
通常は、既存のメニューの下に項目を追加してください(前の「既存のメニューに項目を追加する」を参照)。ルートメニューが必要な場合だけ、この設定を検討します。
ルートメニューを表示するには、config.local.php に次の設定を追加します。
$config['tweaks']['validate_menu'] = false;注意点
- 管理者のパーミッションは単純な構造です。ベンダーのパーミッションは
controllersとmodesで細かく制御します。 - ベンダーパネルのメニューは DB への登録が必要です。管理画面のメニューは登録が不要です。
validate_menuをfalseにし忘れると、追加したルートメニューが表示されません。
参考にするコアのファイル
app/schemas/menu/menu.phpapp/schemas/permissions/admin.phpapp/schemas/permissions/vendor_multivendor.php
関連ページ
- スキーマーの拡張
- Add-on スキーマー
- 管理画面とショップフロントのテンプレートの違い(
<title>に使う言語変数)