concrete5 のシステム基本構造
concrete5 は、ユーザー領域、パッケージ領域、そしてシステムコア領域の3つに別れています。
ここのヘルプページは 5.6.x 以前のドキュメントです。5.7.x 以降をお使いの方はこちらをご覧ください。
concrete5 の優先順位
concrete5をインストールされた方は、concrete5のルート領域に、「concrete」フォルダー内と同じで中身が空っぽのフォルダーがあるのを気がつかれた方がいらっしゃると思います。
concrete5 には優秀な「ローダー(Loader)」機能が搭載されており、システム(コア)のファイルを変更する事なく、システムの拡張を行う事が出来ます。
concrete5 では、1つ1つのファイルを、以下のいずれかの優先順位で読み込む様に設定されています。
ユーザー領域 > パッケージ(packages)領域 > システム(コア)領域
パッケージ (packages) 領域 > ユーザー領域 > システム (コア) 領域
自動アップグレード適用後 (5.4.0.5 以降の新機能)
ユーザー領域 > パッケージ(packages)領域 > Update(コア)領域
パッケージ (packages) 領域 > ユーザー領域 > Update (コア) 領域
ですので、システムのファイルを上書きせずに、システムファイルを変更、もしくは拡張パッケージの作成が可能です。
また、マーケットプレイスから、拡張ブロックをダウンロードされ、その拡張ブロックを改造したい場合でも、ユーザー領域に、同じディレクトリー名・ファイル名のファイルをコピーし改造することにより、拡張パッケージ内のファイルを上書きする事なく、拡張ブロック・パッケージの改造が可能になります。
また、システム領域全てが「concrete」フォルダーの中にある事により、システムに大幅な処理の変更がない限り、アップグレードも開発者様が行った変更の上書き処理をする事なく可能になります。
システム(コア)領域
「/concrete」 フォルダーの中には、デフォルトブロックやデフォルトテンプレート、そしてシステム等の、システムの核となるファイルが存在します。
【注意】5.4.0.5以降のバージョンで、自動アップグレード適用後は「/updates/concrete5.X.X.ja/concrete/」以下のファイルが読み込まれます。
パッケージ領域
「packages」フォルダーの中に、パッケージのハンドル名をフォルダー名にし、その下に、システム領域と同じ構造のフォルダーを作成して、各ファイルを新規作成、もしくは上書きする事が可能になります。
パッケージの基本的な作成方法については、後日ページを作成致します。
ユーザー領域
concrete5 インストールのルートフォルダーとなる領域です。各フォルダーにシステム領域と同じファイル名のファイルを作成することによって、ここのユーザー領域のファイルが優先されて読み込まれる様になります。
ユーザー領域のみでシステムをカスタマイズする例:
「ページリスト」に日付を加える
例えば、当 concrete5 日本語公式サイトでは、「ページリスト」ブロックタイプに、ページが更新された日付を表示出来る様にカスタマイズしています。
「ページリスト」ブロックは、concrete5 にデフォルトで搭載されているブロックです。
場所は「/concrete/blocks/page_list/」以下に保存されています。
concrete5 の「ページ」は、ブロックのコレクション(collection)ですので、ここで、concrete5 の開発元のAPIドキュメントを参照すると、
という関数を使うことが出来ると分かります。
ということで、
「/blocks/page_list/」フォルダーを作成し、「/concrete/blocks/page_list/view.php」ファイルをそこにコピーします。
そして、
の行を、ページタイトル表示部分とページ説明表示部分を処理している間に挟みます。
変更したファイルのみを、ユーザー領域に保存するだけで大丈夫です。
こうすることにより、concrete5 は、システム領域にある
「/concrete/blocks/page_list/view.php」
のファイルを無視し
「/blocks/page_list/view.php」
のファイルを読み込む様になります。
システム画面での設定は一切必要ありません。ファイルが存在するだけで、システムの上書きが完了します。
また、concrete5のブロックには、「view.php」を細かく変更し、それらを「カスタムテンプレート」として変更出来る機能も持っています。詳しくは
をご覧下さい。
concrete5 フォルダーの説明
ブロック以外にも、他の、「/concrete」フォルダー内にあるファイルと「ルート(/)」内のファイルのほとんど全てで相対性を持っています。以下に各フォルダーの役割を書いておきます。
尚、この説明文は、concrete5 コミュニティーメンバーの1人、 Bill Carone のドキュメントを参考にしました。
「blocks」
ブロックタイプ関連のファイルがここに入ります。詳しい説明は
をご覧下さい。
「config」
システムの設定がここに入ります。このフォルダーは、上書き(override)できません。
バージョン5.3.2時点では、ユーザー領域には「site.php」と「site_theme_paths.php」がここに格納されます。
- /config/site.php
- インストール時に生成されます
- 「/config/site.php」は「/concrete/config/base.php」に相対するものです。base.phpに定義されている設定を、site.phpに先に書いておく事により、site.phpの設定が優先される様になります。
- /config/site_theme_paths.php
- このファイルは、システムのテーマ設定に関わらず、特定のシングルページ( Single Page)などを強制的に、特定のテーマに指定する時等に使用します。
- v5.3.2時点での有効な活用法は、ログインページや、「404ページ」等のシングルページを、指定されたテーマの「view.php」を使用して表示出来る様にします。
- 例文がファイル内に記入されています。
「controllers」
concrete5 シングルページ用 controllerファイルを格納する場所です。concrete5 の「MVC(モデル・ビュー・コントローラー)」のコントローラーの部分です。ここに、プログラムの処理関係のコードが入ったファイルを入れます。
「css」
concrete5のシステムが使用するCSS関連のファイルが格納されています。これらも、
「/concrete/css/」フォルダー内に存在するファイルを
「/css/」フォルダーにコピーして、該当箇所を変更する事により、システムファイルを変更する事なく、css属性を変更することができる様になります。
「elements」
concrete5 内で、何度も使用されるようなphpコードのスニペットを保存しておく場所が「elements」です。ここには、「表示」や、htmlコード出力などに関するよく使われるコードを保存します。
一番の例は、ページタイトルやメタタグ等を処理する、header_required.php などが挙げられます。これらのファイルは、ブロックやシングルページ等で、
$○○ = Loader::elements('ファイル名')
と定義する事により、
/packages/パッケージハンドル/elements/ファイル名
/elements/ファイル名
/concrete/elements/ファイル名
の順にファイルを探し、ファイル内のコードを実行します。
「files」
これは、ユーザー領域(サイトルート)のみに作成されるフォルダーです。
画像や、キャッシュ、縮小画面などが作成されます。5.3.2時点では日本語版の検索用のキャッシュもここの以下に保存されます。
「helpers」
プログラムでのファンクション(function)関連のプログラムを保存する場所です。システムでは、テキスト処理、画像の縮小処理、urlチェック等のが格納されています。
elementsの時と同じ様に
$○○ = Loader::helper('ファイル名')
と定義する事により、
/packages/パッケージハンドル/helpers/ファイル名
/helpers/ファイル名
/concrete/helpers/ファイル名
の優先順にファイルを探し、実行します。
※ helper ファイルを変更する際の注意
v.5.3.3.1 時点では、コアーのヘルパークラスをオーバーライド(Override)する際、クラス名の元々のファイルをフォルダーにコピーしたあと
class ◯◯Helper {
の部分を
class Site◯◯Helper extends ◯◯Helper {
とクラス名の頭に「Site」付け、コアーの元々のクラスにextendすることになっています。
「jobs」
「管理画面」-「メンテナンス」から実行する、バックグランドで行う処理プログラムを格納する場所です。デフォルトでは、サイトマップ作成、と検索用キャッシュ作成機能が含まれます。
ここでは
/jobs/ファイル名
/concrete/jobs/ファイル名
の優先順位があります。jobsは、5.3.2時点、パッケージとしてはまとめる事が出来ません。
「js」
システムで使用するjavascript関連のファイルを格納する場所です。
ここでも、
/js/ファイル名
/packages/パッケージハンドル/js/ファイル名
/concrete/js/ファイル名
の優先順位があります
「libraries」
システムで使用するライブラリーファイルを格納する場所です。
ここでも、
$○○ = Loader::libirary('ファイル名')
と定義する事により、
/packages/パッケージハンドル/libraries/ファイル名
/libraries/ファイル名
/concrete/libraries/ファイル名
の優先順位でファイルを探し、実行します。
「mail」
通知メールのテンプレートを格納する場所です。
ここも同じように「ユーザー」「パッケージ」「コア」の優先順位があります。
「models」
model内のコードは、concrete5 システムのデータベース処理と連動しています。ブロック等既存のデータベース以外にも新たにテーブルを作成し、データベースとデータをやり取りする時に、その処理を書き込むところです。
例えば、システムに「properties」というテーブルを作成されたい場合、「properties.php」というファイルを作成し、処理を組み込んで行きます。
また、concrete5 コアーの Model クラスに extend することにより、ADODB Active Record Syntax を使用出来る様になります。
ここでも、
$○○ = Loader::model('ファイル名')
と定義する事により、
/packages/パッケージハンドル/models/ファイル名
/models/ファイル名
/concrete/models/ファイル名
の優先順位でファイルを探し、実行します。
「packages」
パッケージとは、他のユーザーに再配布しやすい様にというコンセプトで生まれました。マーケットプレイスの基幹機能です。
詳しい説明は別ページで行いますが
「/packages/パッケージハンドル/」に、concrete5 のシステムと全く同じフォルダー構成のファイルを構築する事が出来ます。
マーケットプレイスで配布されているテーマが「/packages」フォルダー内に保存しなくては行けないのはこの為です。
「packages/パッケージハンドル/controller.php」内にパッケージの名前・ハンドル、バージョンなどの基本情報や、新たにページや属性などをインストールする事が出来ます。詳細は「/concrete/controllers/install.php」のファイルを参考にしてください。
「single_pages」
concrete5 サイトの「エリア」- 「ブロック」の構造を持たないページを格納する場所です。例としては、ログインページ、公開プロフィールページ、管理画面があります。
concrete5 システムの「MVC」の View 関連のファイルがここになります。
ここも同じように「ユーザー」「パッケージ」「コア」の優先順位があります。
「themes」
このフォルダーにテーマ関連ファイルが保存されます。
ここも同じように「ユーザー」「パッケージ」「コアー」の優先順位があり、
/themes/テーマハンドル/
/packages/パッケージハンドル/themes/テーマハンドル/
/concrete/themes/テーマハンドル/
の優先順位でファイルを探し、実行します。
「tools」
toolsディレクトリーは、特別なPHPプログラムを格納する時に使われます。
ここに格納されるプログラムは、ユーザーの権限や concrete5 のMVCを完全に無視し、とにかくconcrete5 システムと連動し、データベースへのアクセス権もあります。
concrete5 のポップアップメニュー関連のプログラムを格納するのに使われています。
同じように「ユーザー」「パッケージ」「コア」の優先順位があります。
「updates」
自動アップグレードが、最新のコアーファイルを保存する場所です。concrete5サーバーからZIPをダウンロードし /files/tmp フォルダーに一時保存し、「concrete5.x.x.ja」フォルダを作成し、展開されたコアファイルが保存されます。
自動アップグレード後、/config/site.php に 「DIRNAME_APP_UPDATED」という定数が追加され、最新バージョンが保存された/updates/以下のフォルダ名が格納されます。
この機能を利用することにより、自動アップグレードで何らかの問題が発生したとしても、MySQLのDBを元に戻し、 /config/site.php より「DIRNAME_APP_UPDATED」の行を削除、もしくは以前のバージョン変更することにより、最小限のタイムロスで前バージョンを復活させることが出来ます。
concrete5 コア部分のみに存在するファイル・フォルダー
dispatcher.php
concrete5 が一番最初に処理するスクリプトで、ここを基本に各プログラムに分散処理されて行きます。
「flash」
ファイルのアップローダーや、プロフィール画像の編集用フラッシュファイルが格納されています。
「images」
concrete5 のシステムが使用する画像ファイルが格納されています。
「startup」
dispatcher.php の補助的要素を持つプログラムが格納されたフォルダーです。