concrete5.7内蔵のFORMブロックをパッケージにしてみた
concrete5.7のパッケージを作る際に、新しく導入されたnamespaceなどの書き方を確認するために、同梱されている「FORM」ブロックをパッケージにしてみました。
簡単に言えば、namespaceを変更し、パッケージインストール用の "controller.php" を作ればいいわけです。ただ、同じ機能が同居することになるので、データベース名やハンドル名の変更が単純置換でいいのですが多数発生します。
(1) パッケージのフォルダを作って、formブロックのソースを全部コピーする
パッケージ名を、"tomoac57_bset" としました。好きな名前でいいです。
"/packages/tomoac57_bset" を作り、その下に、"blocks" フォルダを作ります。
/packages/tomoac57_bset/blocks ができたことになります。
そして、"/concrete/blocks/form" のフォルダを、"/packages/tomoac57_bset/blocks" にコピーし、フォルダ名の"form" を "form57" に変更します。
/packages/tomoac57_bset/blocks/form57 ができ、その下に同梱のformのファイルが入ります。
(2) パッケージ用の "controller.php" を作る
以下の内容で作りました。
注意すべきところは
- namespaceのところにパッケージ名を指定します
- $pkgHandleは、パッケージのフォルダ名、"tomoac57_bset" にします。
- install()では、インストールするブロックの名前、"form57" を指定します。
<?php
namespace Concrete\Package\Tomoac57Bset;
use Package;
use BlockType;
use Loader;
use SinglePage;
use User;
use Page;
use UserInfo;
use Exception;
use \Concrete\Core\Block\BlockController;
defined('C5_EXECUTE') or die(_("Access Denied."));
class controller extends Package {
protected $pkgHandle = 'tomoac57_bset';
protected $appVersionRequired = '5.7.2';
protected $pkgVersion = '0.1';
public function getPackageName() {
return t('Tomoac57 Bset');
}
public function getPackageDescription() {
return t('B Set for tomoac on 5.7');
}
public function install() {
$pkg = parent::install();
BlockType::installBlockTypeFromPackage('form57', $pkg);
}
public function uninstall() {
parent::uninstall();
$db = Loader::db();
$db->Execute('DROP TABLE btForm57');
}
}
(3) ブロック内のファイルのnamespaceを変更
まず、ブロック配下の以下のファイルの "namespace" を変更します。
- controller.php
- mini_survey.php
- statistics.php
元のnamespaceは以下です。
namespace Concrete\Block\Form;
以下のように変更しました。
namespace Concrete\Package\Tomoac57Bset\Block\Form57;
パッケージ名は、"Tomoac57Bset"、ブロック名は、"Form57" です。
(4) 使うクラスの指定である use を変更
次に、以下のファイルのuseを変更します。
- edit.php
- view.php
- tools/service.php
元のuseは以下です。
use \Concrete\Block\Form\MiniSurvey;
以下のように変更しました。
use \Concrete\Package\Tomoac57Bset\Block\Form57\MiniSurvey;
※ これらのファイル内のデータベース名の変更も必要です。(後述)
(5) 全体に変更すべきところ
データベーステーブルが重なるので、テーブル名を変更しました。元のブロックは以下の3つのテーブルを持っています。
btForm
btFormQuestions
btFormAnswers
btFormAnswerSet
以下のように変更します。
btForm57
btForm57Questions
btForm57Answers
btForm57AnswerSet
"db.xml" も変更します。
ファイル内にハンドル名の参照があれば変更します。元のハンドル名のコードは、以下です。
BlockType::getByHandle('form');
以下のように変更します。
BlockType::getByHandle('form57');
※ "form_setup_html.php"内にありました。
(6) 変更しなくていいファイル
以下のファイルはっ変更不要です
- add.php
- auto.js
- styles_include.php
- view.css
ホーム Concrete CMS の使い方・ヘルプ tomoacの勝手なconcrete5 concrete5.7の実験 concrete5.7内蔵のFormブロックをパッケージにしてみた