[OpenPNE3]管理画面付きプラグイン(opFreepagePlugin)#2 管理画面の作成
前回はopFreepagePluginの初期設定として、ディレクトリの作成とDBスキーマの作成を行いました。今回は管理画面内のプラグイン独自の設定画面を開発方法を学びます。開発を行う前に、OpenPNE3のプラグイン設定画面の仕組みを説明します。
OpenPNE3では、プラグインごとに設定画面が持てるような仕組みを持っていて、設定画面がある場合はプラグイン一覧からリンクが張られています。
プラグイン独自の設定画面を作成するには、プラグイン内にpc_backendアプリケーション用のディレクトリを用意し、そこにプラグインと同名のモジュールを追加します。つまり、プラグインと同名のモジュールがあるかないかで設定画面の有無を判断しています。例えば、opFreepagePluginであれば、/plugins/opFreepagePlugin/apps/pc_backend/modules/opFreepagePlugin/actionsディレクトリを持っていれば「設定画面あり」とみなされます。
では具体的にopFreepagePluginに設定画面を追加してみます。まずはターミナルで
-
./symfony opGenerate:app opFreepagePlugin pc_backend
を実行し、/plugins/opFreepagePlugin/apps/pc_backend/modulesディレクトリを作成します。続いて
-
./symfony opGenerate:module opFreepagePlugin pc_backend opFreepagePlugin
を実行し、pc_backendアプリケーション用のopFreepagePluginモジュールを追加します。デフォルトでactions.class.phpとindexSuccess.phpも作られます。また、この時点で既にプラグイン一覧にはopFreepagePluginの設定画面へのリンクが表示されています。
/actions/actions.class.phpにはexecuteIndex()メソッドが最初から記述されています。これを下記のように書き換え、さらにexecuteList()メソッドを追加します。
-
public function executeIndex($request)
-
{
-
$this->redirect('opFreepagePlugin/list');
-
}
-
-
/**
-
* Executes list action
-
*
-
* @param sfRequest $request A request object
-
*/
-
public function executeList($request)
-
{
-
$this->freepage_list = FreepagePeer::doSelect(new Criteria());
-
return sfView::SUCCESS;
-
}
上記記述で追加したlistアクションはフリーページの一覧を表示するアクションで、opFreepagePluginの設定画面を開くと最初に表示されることを想定しています。このlistアクションに対応するビューとして、/templates/listSuccess.phpを作成します。
-
<?php slot('submenu') ?>
-
<?php include_partial('submenu') ?>
-
<?php end_slot() ?>
-
-
<h2><?php echo __('一覧') ?></h2>
-
-
<table>
-
<thead>
-
<tr>
-
<th>ID</th>
-
<th><?php echo __('Title') ?></th>
-
<th><?php echo __('Body') ?></th>
-
<th><?php echo __('AppType') ?></th>
-
<th><?php echo __('Auth') ?></th>
-
<th><?php echo __('Created At') ?></th>
-
<th><?php echo __('Updated At') ?></th>
-
</tr>
-
</thead>
-
<tbody>
-
<?php foreach ($freepage_list as $freepage): ?>
-
<tr>
-
<td><?php echo link_to($freepage->getId(), 'opFreepagePlugin/edit?id='.$freepage->getId()) ?></td>
-
<td><?php echo $freepage->getTitle() ?></td>
-
<td><?php echo $freepage->getAppType() ?></td>
-
<td><?php echo ($freepage->getAuth() ? 'あり' : 'なし') ?></td>
-
<td><?php echo $freepage->getCreatedAt() ?></td>
-
<td><?php echo $freepage->getUpdatedAt() ?></td>
-
</tr>
-
<?php endforeach; ?>
-
</tbody>
-
</table>
-
<?php echo link_to(__('新規追加'), 'opFreepagePlugin/new') ?>
listSuccess.phpの冒頭でsubmenuという名前の部分テンプレートをスロットとして読み込んでいます。この冒頭3行は管理画面のビューの典型的なパターンですので覚えて損はないです。そのほかの部分はfreepageテーブルの内容を表形式に出力し、編集や新規作成へのリンクを加えています。
最後に先ほど触れたsubmenuという名前の部分テンプレートを/templates/_submenu.phpに作成します。
-
<li><strong><?php echo __('フリーページ') . __('プラグイン') ?></strong></li>
-
<li><?php echo link_to(__('一覧'), 'opFreepagePlugin/list') ?></li>
-
<li><?php echo link_to(__('新規追加'), 'opFreepagePlugin/new') ?></li>
とりあえずこれでフリーページの一覧は表示できるようになりました。まだ新規作成や編集のリンクは動いていませんが、試しにフリーページをデータベースに直接登録してみると、以下のような画面になります。
今回はここまでです。おさらいですが、管理画面にプラグイン独自の設定画面を追加するには、プラグイン名と同名のモジュールを作成すればよいということを忘れないでください。
次回は管理画面の残りの機能として、新規作成・編集・削除画面を作ります。フォームの使い方勉強にもなりそうです。

