---
title: "管理画面とショップフロントのテンプレートの違い"
description: "アドオンのビューテンプレートで、管理画面とショップフロントの構造が異なる点と、管理画面の HTML の title を設定する言語変数。"
---

> 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.

# 管理画面とショップフロントのテンプレートの違い

アドオンでビューテンプレートを作るとき、管理画面（バックエンド）とショップフロント（顧客画面）でテンプレートの構造が異なります。

## 置き場所

| 種別 | パス |
| --- | --- |
| 管理画面 | `design/backend/templates/addons/<アドオン名>/views/<コントローラー>/<モード>.tpl` |
| ショップフロント | `design/themes/<テーマ名>/templates/addons/<アドオン名>/views/<コントローラー>/<モード>.tpl` |

## 管理画面のテンプレート

`common/mainbox.tpl` をインクルードして、レイアウトを組み立てます。コンテンツやボタンは `{capture}` で取り込みます。

```smarty
{capture name="mainbox"}
    {* コンテンツ *}
{/capture}

{include file="common/mainbox.tpl"
    title=__("page_title")
    content=$smarty.capture.mainbox
    buttons=$smarty.capture.buttons
}
```

## ショップフロントのテンプレート

`common/mainbox.tpl` は使いません。ページ内の見出しを `{capture name="mainbox_title"}` で設定し、コンテンツは HTML で直接書きます。CSS クラスは `ty-` で始まるものを使います。

```smarty
{capture name="mainbox_title"}{__("page_title")}{/capture}

<div class="my-content">
    {* コンテンツを直接書く *}
</div>
```

> **ショップフロントで mainbox.tpl を使わない**
>
> ショップフロントで `{include file="common/mainbox.tpl"}` を使うと、次のエラーになります。
>
> ```text
> Smarty\Exception: Unable to load 'tygh:common/mainbox.tpl'
> ```

ショップフロントのテーマファイルは、`var/themes_repository/` にも置く必要があります。詳しくは [ショップフロントのテンプレートを themes_repository にも置く](/addon-development/tips/themes-repository-sync/) を参照してください。

## 管理画面の HTML の title を設定する

カスタムコントローラーを作ると、ブラウザのタブに表示されるタイトルが、次のようにアンダースコアで始まる名前になることがあります。

```text
_product_requests
```

これは、コントローラー名と同じ名前の言語変数がないためです。コントローラー名と**同じ名前**の言語変数を用意します。

コントローラーが `product_requests.php` の場合：

```po
msgctxt "Languages::product_requests"
msgid "Product Requests"
msgstr "商品申請"
```

管理画面では、タイトルの設定場所が2つあります。

| 設定場所 | 反映先 |
| --- | --- |
| `mainbox.tpl` の `title` パラメーター | ページ内の見出し（h1） |
| `Languages::<コントローラー名>` | HTML の `<title>` タグ |

`mainbox.tpl` の `title` は、ページ内の見出し専用です。HTML の `<title>` には影響しません。HTML の `<title>` は、コントローラー名から `__('<コントローラー名>')` が自動的に呼ばれて決まります。言語変数がないと、`_<コントローラー名>` と表示されます。

これは管理画面とベンダーパネルの話です。ショップフロントの `{capture name="mainbox_title"}` は、ページ内の見出しを設定するもので、ブラウザのタブに表示される `<title>` を直接設定するものではありません。ショップフロントの `<title>` は、`$page_title` やページの情報（パンくずリスト、レイアウトのタイトルなど）から組み立てられます。

## 関連ページ

* [アドオンのディレクトリ構造](/addon-development/addon-directories/)
* [言語ファイル（.po）の msgctxt と間違いやすい点](/addon-development/tips/po-file-msgctxt/)
* [管理画面にメニューを追加する](/addon-development/tips/admin-menu/)

Source: https://docs.cs-cart.jp/addon-development/tips/backend-and-storefront-templates/index.mdx
