concrete5 : オリジナルブロックの作り方

concrete5 という最近話題になっている PHP で動く CMS があります。

concrete5 のブロックはすごく便利

concrete5 の特徴のひとつとして「ブロック」と呼ばれるものがあります。

ブロックとはなにか?

ブロック

ブロックとは、ページ上のエリアに追加する事が出来るコンテンツや機能です。ブロックの種類により、様々な機能を搭載しています。

編集モードにすることにより、ブロックを追加、移動、編集、削除する事が出来るようになります。

ブロックタイプ

ブロックには様々な機能を持ったものがあります。

ブロックの種類には:

  • シンプルなテキストのみの記事ブロック
  • 画像ブロック
  • ページリスト
  • サイトマップ
  • アンケート

などがあり、すべてがブロックとして構成されています。例えば、一般的なサイトにある「お問い合わせ」のページを例にとると、住所や電話番号等は「記事」ブロック、サイト上からお問い合わせを受け付けるときに使用するメールフォームは「フォーム」ブロック、そして、会社の地図を表示させたいのであれば、「グーグルマップ」ブロックを追加して、それらを組み合わせて行きます。

すべてのブロックは、基本的には独立したものです。

http://concrete5-japan.org/help/basic-concepts

オリジナルブロックの作り方

ローカルホストもしくはweb上にある外部ファイルを読み込んでそのまま表示する、「include」というブロックを作ってみたのでメモ。

ブロックを構成する必須ファイルリスト
  • controller.php(必須)
    • オリジナルブロック用のクラスを宣言するファイル
    • ブロックの名前やデータベースのテーブル名などの設定を記述する
  • db.xml(必須)
    • データを保存する必要がある場合に使われるデータベースのテーブルの構造を記述するファイル
    • ADOXMLS フォーマット
  • add.php(必須)
    • CMS上からブロックを追加する時に実行されるファイル
    • 入力フォームをここで用意する
  • view.php (必須)
    • ブロックが表示される時に実行されるファイル
    • 表示したいものを記述する


Basic Block Template というテンプレート一式が下記URLよりダウンロードできます。
http://www.concrete5.org/files/14981212950798basictest.zip

まずはオリジナルブロック用のクラスファイルをつくる

まずは、オリジナルブロック用のクラスを記述するファイルである controller.php をつくる。ここでは基本設定も一緒に記述する。

<?php
	class IncludeController extends BlockController {
		
		var $pobj;
		
		protected $btDescription = "外部ファイルを読み込んで表示します";
		protected $btName = "外部ファイル表示";
		protected $btTable = 'btInclude';
		protected $btInterfaceWidth = "350";
		protected $btInterfaceHeight = "300";

	}
	
?>


BlockController というクラスを継承して独自のブロッククラスを作成。ここでつけるクラス名は他のブロックと重複してはダメ。

  • $btDescription
    • ブロックの説明
  • $btName
    • ブロック名
  • $btTable
    • ブロックで独自に扱うデータを保存するテーブル名
  • $btInterfaceWidth
    • ブロックインターフェースの横幅
  • $btInterfaceHeigh
    • ブロックインターフェースの縦幅

$pobj ってなんだ?

続いてテーブルの設定ファイルをつくる

オリジナルブロックで扱いたいデータを保存しておく為のテーブルの設定を、db.xmlファイルに記述する。

<?xml version="1.0"?>
<schema version="0.3">
	<table name="btInclude">
		<field name="bID" type="I">
			<key />
			<unsigned />
		</field>
		<field name="url" type="C">
		</field>
	</table>
</schema>

ここでは、bIDフィールド(プライマリキー)と、読み込みたいファイルのURLを保存しておくurlフィールドを定義した。

field要素のプロパティ

  • nameプロパティ
    • フィールド名
  • typeプロパティ
    • データタイプ


typeに指定できるもの一覧。

C: Varchar, capped to 255 characters.
X: Larger varchar, capped to 4000 characters (to be compatible with Oracle).
XL: For Oracle, returns CLOB, otherwise the largest varchar size.

C2: Multibyte varchar
X2: Multibyte varchar (largest size)

B: BLOB (binary large object)

D: Date (some databases do not support this, and we return a datetime type)
T: Datetime or Timestamp
L: Integer field suitable for storing booleans (0 or 1)
I: Integer (mapped to I4)
I1: 1-byte integer
I2: 2-byte integer
I4: 4-byte integer
I8: 8-byte integer
F: Floating point number
N: Numeric or decimal number

http://phplens.com/lens/adodb/docs-datadict.htm


詳しい書式は下記を参照
http://phplens.com/lens/adodb/docs-datadict.htm

CMS上でブロックを追加するときに表示される add.php をつくる

データベースの設定が終わったので、ブロックを追加するときに指定したいデータ等を入力する画面である add.php を作成する。

<p>読み込みたいファイルのURLを記入してください。</p>

<?php echo $form->label('url', 'URL');?>
<?php echo $form->text('url', array('style' => 'width: 320px'));?>
ブロックが表示されるときに実行されるファイル view.php を作成する

ブロックがユーザから閲覧されときに実行される view.php ファイルを作成。

<div class="include">
<?php @readfile($url); ?>
</div>

ここでは独自に表示したいものを記述する。concrete5 がデータベースからデータを読み込んでくれるので、db.xmlで設定したテーブル名と同じ変数名で該当のデータが取得できる。

ここではURL 情報を参照したいので、この場合は $url と書くだけでOK。


以上。