WorkToolSmith

Concrete5でパッケージからDashBoard項目を追加する(singlepage)

太田アベル

・ 更新 ・ 4分で読めます

当サイトの記事には一部に広告リンクが含まれる場合があります。

目次

Concrete5で、パッケージとともに設定画面を追加したい時があります。(ブロックの共通データ画面など)

情報が非常に少ないうえに、そのものズバリが見つけられませんでした。とりあえず成功したのでまとめてみます。

前提

まずは使用するさまざまな名称を再確認をします。(ちなみに自分の中でつけた名称ですので、Concrete5の標準的な名称がありましたらTwitterとかで教えて下さい。)

  • シングルページ:機能の操作ページ(php)
  • パッケージディレクトリ:パッケージのルートディレクトリ
  • ダッシュボード名:ダッシュボードに表示される大枠の名称(コンポーザーやワークフローなど)
  • 機能名:ダッシュボードの細かな機能(フルサイトマップ、ファイルマネージャなど)

今回は

  • パッケージ名 = test_pkg
  • ダッシュボード名 = test
  • 機能名 = setting
  • 機能表示名=テスト

として話を進めます。

ディレクトリ構成

次にディレクトリ構成です。
図で示すと以下の様な構成が基本となります。

Concrete5 シングルページの構成 (1)

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) ?>

インストールとテスト

ではパッケージをインストールしてみましょう。

  1. パッケージディレクトリを Concrete5 > packages に入れます。
  2. [インストール]から作ったパッケージをインストール。

管理画面に戻ると右下に追加されています!

image

機能を使う

「テスト」を開いてみましょう。

image

設定画面が表示されました!これで共通データの設定などが行えます。

「あああ」と打って保存してみます。

screenshot_0119

保存されました!

screenshot_0120

上記のコードではDBのconfigテーブルに保存されます。

image

WTS的まとめ

まとめれば非常にカンタンに使える機能ですが、いかんせん情報が少ないですね。(-_-;
ここまでたどり着くのに2日ぐらいかかりました。

Concrete5のユーザー層が拡大するように、これからも機能のまとめを作っていきたいと思います。

参考ページ

concrete5で管理画面に独自ページ(シングルページ)を追加する | notnil creation weblog

concrete5 :: Working with Dashboard Single Pages

太田アベル

太田アベル

パソコンを7歳からいじり始めて40年。とにかくパソコンが好きです。気になった商品をほぼ自腹で買いまくってレビュー中!良かった点、悪かった点をズバズバ書きます。

𝕏 でフォロー プロフィールを見る

こちらもおすすめ