今回はかなりニッチな内容のブログ更新です。特殊な用語が色々と出てきますので、まず用語の解説から進めていきます。
レガシーバージョンとモダンバージョン
concrete5 の歴史は、バージョン5.6.xまでのレガシーバージョンと、バージョン5.7移行のモダンバージョンの2つに分かれています。concrete5 は通常バージョンアップがあっても、基本的には管理画面からバージョンアップボタンを押せばバージョンアップが行えるように設計されています。しかし、唯一の例外が、このレガシーバージョンとモダンバージョンの間で、バージョンアップは行えません。それは、concrete5 のモダンバージョンが、新しいPHPのスタンダードやクラウド時代のインフラ環境、急速に普及したモバイルデバイスに対応するため、バックエンドからフロントエンドまでの全ての設計を見直した新しいソフトウェアだからです。
もちろん、基本的な設計は踏襲していますし、用語や操作方法の考え方も同じですので、レガシーバージョンを使用していたユーザーも、すんなりモダンバージョンに移行出来ると思います。しかし、ソフトウェアアーキテクチャの見直しに伴い、データベースはそのまま移行することができません。どうやってモダンバージョンに移行するかというと、専用のマイグレーションツールを使ってレガシーバージョンからXML形式でデータをエクスポートし、モダンバージョンにデータをインポートする、という手順を踏む必要があります。
Designer Content と Block Developer
concrete5 では、ブロックをドラッグ&ドロップで並べることでコンテンツ(ページ)を作ることができます。このブロックは、標準でもWYSIWYGエディタや画像スライダー、問い合わせフォームなど、標準的なWebサイトを構築するには十分な種類が用意されていますが、更新の効率を向上させるため、特定のWebサイトに特化した専用ブロックを開発することがあります。
ブロックの開発には、データベースとPHPプログラミングの基礎知識が必要になるのですが、この開発を簡素化しデザイナーでもブロック開発を可能にするアドオンがあります。レガシーバージョンの時代では、その代表的なアドオンが Jordan Lev 氏が開発した Designer Content でした。Designer Content アドオンは残念ながら開発が中止され、モダンバージョンでは使用できません。代わりに、モダンバージョンでその位置についたのが Ramon Leenders 氏が開発する Block Developer です。Block Developer については、当サイトに紹介記事もあります。
Designer Content を使ったブロック開発の概要
Designer Content アドオンをインストールすると、下図のようなブロック作成画面から、ブロックのハンドル名、表示名、説明文、入力フィールドを設定して「Make The Block!」ボタンをクリックするだけで、設定に従ってブロックに必要なPHPファイル、データベース定義ファイル等が自動的に生成されます。
画面に例示したようなブロックですと、次の画像に示すような構造のテーブルが生成されます。
基本的には、画面上の入力フィールドごとにテーブル上にもフィールドが作られ、フィールドの種類によってVARCHARだったりINTだったりする、というイメージです。
入力画面はこんな感じになります。
Designer Content で生成したブロックのエクスポート時の問題
さて、このように画面上の簡単な操作で独自のデータ構造をもつブロックが生成できるのですが、このアドオンの惜しいところとして、このブロックのデータのエクスポートが少しうまくないのが残念なポイントです。何も対策をしないでMigration Toolでエクスポートすると、下記のようなXMLデータとして出力されます。