テンプレートの挿入

拡張アプリで様々な拡張をする場合、プログラムだけではなく管理ページを拡張したい場合があると思います。例えば、モジュールID化したいため、モジュール選択肢のテンプレートを拡張したい、拡張アプリ用の管理画面ページ(コンフィグページ)を作りたいなどです。

テンプレートの挿入方法

テンプレートを挿入するためには、ServiceProviderの initメソッド で 挿入処理を書く必要があります。

例: extension/plugins/SamplePlugin/ServiceProvider.php

<?php

namespace Acms\Plugins\SamplePlugin;

use ACMS_App;
use Acms\Services\Common\InjectTemplate;

class ServiceProvider extends ACMS_App
{
    /* 省略... */

    /**
     * サービスの初期処理
     */
    public function init()
    {
        $inject = InjectTemplate::singleton();
        $inject->add('admin-module-select', PLUGIN_DIR . 'SamplePlugin/template/module-select.html');
    }

    /* 省略... */
}

ポイント

Acms\Services\Common\InjectTemplate のオブジェクトを

$inject = InjectTemplate::singleton();

で取得して addメソッド でテンプレートを挿入します。

$inject->add('挿入先', 'テンプレートのパス');
  • 第一引数: 挿入先の識別子
  • 第2引数: 挿入するテンプレートパス(PLUGIN_DIR定数 を使うと便利です)

挿入先の仕込み

テンプレートはどこでも挿入できるわけではなく、挿入先に仕込みがされています。

例えば、モジュールIDのセレクトの選択肢のテンプレート(themes/system/admin/module/select.html)を見ると以下のような記述があります。

<!-- BEGIN_MODULE Admin_InjectTemplate id="admin-module-select" --><!-- END_MODULE Admin_InjectTemplate -->

この Admin_InjectTemplateモジュールid に指定されている識別子が、テンプレートを挿入するときに使う Acms\Services\Common\InjectTemplateaddメソッド の第一引数に指定されます。

挿入先一覧


識別子 挿入先パス 説明
admin-main themes/system/admin.html 管理ページのメインHTMLを追加
admin-action themes/system/admin/action.html アクションボックスに追加
admin-topicpath themes/system/admin/topicpath-list.html 管理画面のトピックパスを追加
admin-module-select themes/system/admin/module/select.html モジュールIDの選択肢を追加
admin-module-config-%{MODULE_NAME} themes/system/admin/module/edit.html モジュール編集ページに追加。%{MODULE_NAME} はモジュール名に変更する。
例: Sampleモジュール -> admin-module-config-Sample
admin-form themes/system/admin/form/edit.html フォームID編集ページに追加
admin-entry-field themes/system/admin/entry/edit.html エントリーのカスタムフィールドを追加
admin-entry-field-foot themes/system/admin/entry/edit.html エントリーのカスタムフィールドを追加
admin-category-field themes/system/admin/category/edit.html カテゴリーのカスタムフィールドを追加
admin-blog-field themes/system/admin/blog/edit.html ブログのカスタムフィールドを追加
admin-user-field themes/system/admin/user/edit.html ユーザーのカスタムフィールドを追加