---
title: "管理画面にメニューを追加する"
description: "アドオンから管理画面のメニューを追加するスキーマ、パーミッションの書き方、validate_menu の設定。"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.cs-cart.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# 管理画面にメニューを追加する

アドオンから管理画面（`admin.php`）にメニューを追加する方法です。管理画面のメニューは、スキーマファイルだけで追加できます。CS-Cart 4.19.1 以降で確認した内容です。

## 1. メニューのスキーマ

`app/addons/<アドオンID>/schemas/menu/menu.post.php` を作ります。

### 新しいルートメニューを追加する

```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 の設定](#3-validate_menu-の設定) も参照）。

```php
// サイドバー（central）の既存のメニュー（website）に項目を追加する
$schema['central']['website']['items']['my_addon'] = [
    'href'     => 'my_addon.manage',
    'position' => 1100,
];
```

> **top.administration について**
>
> `$schema['top']['administration']` に項目を追加する書き方もありますが、CS-Cart 4.18.1 以降では、`administration` は管理画面のサイドバーの常設のメニューではなく、設定ページに表示されます。サイドバーに追加したい場合は、`central` の既存の項目を使ってください。

### メニューを削除する

```php
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
<?php
defined('BOOTSTRAP') or die('Access denied');

// 管理者は GET / POST の両方を許可する（フルアクセス）
$schema['my_addon'] = [
    'permissions' => ['GET' => true, 'POST' => true],
];

return $schema;
```

> **この例は、権限を限定した管理者にも許可します**
>
> `GET` と `POST` に `true` を指定すると、このコントローラーへのアクセスを、権限の名前で制限できません。権限を限定した管理者にも、閲覧と更新が許可されます。権限で制限したい場合は、アドオン固有の権限を定義し、必要な操作にその権限の名前を指定してください。

### ベンダー向け

`app/addons/<アドオンID>/schemas/permissions/vendor_multivendor.post.php`

```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;
```

> **manage_own は、自社のデータへの制限を保証しません**
>
> `'manage_own'` は権限の名前です。この指定だけでは、更新の対象のデータが、ログイン中のベンダーのものかどうかは検査されません。ベンダーが他社の ID を指定できる更新の処理では、コントローラーで、対象のデータの所有者を必ず検査してください。

## 3. validate_menu の設定

通常は、既存のメニューの下に項目を追加してください（前の「既存のメニューに項目を追加する」を参照）。ルートメニューが必要な場合だけ、この設定を検討します。

> **カスタムアドオンのルートメニューは、既定では削除されます**
>
> CS-Cart 4.19.1 では、`config.php` の `validate_menu` が既定で `true` です。この状態では、コアに含まれるアドオン以外が追加したルートメニューが自動的に削除されます。

ルートメニューを表示するには、`config.local.php` に次の設定を追加します。

```php
$config['tweaks']['validate_menu'] = false;
```

> **影響の範囲**
>
> この設定は、追加したアドオンのメニューだけでなく、管理画面のルートメニュー全体の検証を無効にします。旧バージョンの動作との互換のための設定です。ほかのアドオンが追加したルートメニューにも影響するため、本番の環境に入れる前に、影響を確認してください。

## 注意点

* 管理者のパーミッションは単純な構造です。ベンダーのパーミッションは `controllers` と `modes` で細かく制御します。
* ベンダーパネルのメニューは DB への登録が必要です。管理画面のメニューは登録が不要です。
* `validate_menu` を `false` にし忘れると、追加したルートメニューが表示されません。

## 参考にするコアのファイル

* `app/schemas/menu/menu.php`
* `app/schemas/permissions/admin.php`
* `app/schemas/permissions/vendor_multivendor.php`

## 関連ページ

* [スキーマーの拡張](/addon-development/extending-scheme/)
* [Add-on スキーマー](/addon-development/add-on-scheme/)
* [管理画面とショップフロントのテンプレートの違い](/addon-development/tips/backend-and-storefront-templates/)（`<title>` に使う言語変数）

Source: https://docs.cs-cart.jp/addon-development/tips/admin-menu/index.mdx
