Concrete5で、パッケージとともに設定画面を追加したい時があります。(ブロックの共通データ画面など)
情報が非常に少ないうえに、そのものズバリが見つけられませんでした。とりあえず成功したのでまとめてみます。
前提
まずは使用するさまざまな名称を再確認をします。(ちなみに自分の中でつけた名称ですので、Concrete5の標準的な名称がありましたらTwitterとかで教えて下さい。)
- シングルページ:機能の操作ページ(php)
- パッケージディレクトリ:パッケージのルートディレクトリ
- ダッシュボード名:ダッシュボードに表示される大枠の名称(コンポーザーやワークフローなど)
- 機能名:ダッシュボードの細かな機能(フルサイトマップ、ファイルマネージャなど)
今回は
- パッケージ名 = test_pkg
- ダッシュボード名 = test
- 機能名 = setting
- 機能表示名=テスト
として話を進めます。
ディレクトリ構成
次にディレクトリ構成です。
図で示すと以下の様な構成が基本となります。
Concrete5のメインディレクトリにシングルページを追加する構成と、全く同じ構成をパッケージ内に作ります。
インストール方法
パッケージインストール時にシングルページをインストールするコードです。
これはパッケージのcontroller.phpに記入します。
public function install() { $pkg = parent::install(); // install single page Loader::model('single_page'); $single_page = SinglePage::add('/dashboard/test/setting', $pkg); $single_page->update(array('cName' => 'テスト'));
SinglePage::addのパスには パッケージ名、controllers や single_pages は含めません。/dashboard/ダッシュボード名/機能名 となります。
引数のcNameは機能の表示名です。ここでは日本語をベタ打ちしていますが、なるべく t() などを使用してマルチ言語に対応するとよいでしょう。
またコードを単純化するためにエラー処理はしていません。運用時は、$single_pageが生成できなかった場合などのエラー処理は必要です。
エラー処理の一例:
if ( is_object($single_page) && $single_page->isError() !== false ){ ・・・ }
機能のcontroller.php
機能のコントローラを書きます。書き方は concrete5で管理画面に独自ページ(シングルページ)を追加する | notnil creation weblog のページを参考に(というか丸写し)しています。(詳しい解説は上記ページヘ! < 説明も丸投げという・・・)
コントローラの名前は Dashboard[ダッシュボード名][機能名]Controller となります。必ずディレクトリ名と合わせ、キャメルケースで書きます。
<?php defined('C5_EXECUTE') or die("Access Denied."); class DashboardTestSettingController extends DashboardBaseController { public function view() { $my_setting = Config::get('my_setting'); $this->set('my_setting', $my_setting); } public function settings_saved() { $this->set('message', t("Your settings saved successfully.")); $this->view(); } public function save_settings() { if ( $this->token->validate("save_settings") ) { if ( $this->isPost() ) { Config::save('my_setting', $this->post('my_setting')); $this->redirect('/dashboard/test/setting', 'settings_saved'); } } else { $this->set('error', array($this->token->getErrorMessage())); } } }
機能のview.php
続いて設定画面のview.phpです。これもまた上記ページから引用させていただきます。
<?php defined('C5_EXECUTE') or die("Access Denied."); ?> <?php echo Loader::helper('concrete/dashboard')->getDashboardPaneHeaderWrapper(t('Single Page Name'), false, false, false) ?> <form method="post" class="form-horizontal" action="<?php echo $this->action('save_settings') ?>"> <?php // print access token echo $this->controller->token->output('save_settings') ?> <div class="ccm-pane-body"> <fieldset> <legend><?php echo t('My Settings'); ?></legend> <div class="control-group"> <?php echo $form->label('my_setting', t('My Setting Label')) ?> <div class="controls"> <?php echo $form->text('my_setting', $my_setting) ?> </div> </div> </fieldset> </div> <div class="ccm-pane-footer"> <?php echo $interface->submit(t('Save'), 'site-form', 'right', 'primary') ?> </div> </form> <?php echo Loader::helper('concrete/dashboard')->getDashboardPaneFooterWrapper(false) ?>
インストールとテスト
ではパッケージをインストールしてみましょう。
- パッケージディレクトリを Concrete5 > packages に入れます。
- [インストール]から作ったパッケージをインストール。
管理画面に戻ると右下に追加されています!
機能を使う
「テスト」を開いてみましょう。
設定画面が表示されました!これで共通データの設定などが行えます。
「あああ」と打って保存してみます。
保存されました!
上記のコードではDBのconfigテーブルに保存されます。
WTS的まとめ
まとめれば非常にカンタンに使える機能ですが、いかんせん情報が少ないですね。(-_-;
ここまでたどり着くのに2日ぐらいかかりました。
Concrete5のユーザー層が拡大するように、これからも機能のまとめを作っていきたいと思います。