スキーマー (scheme)
スキーマー(scheme)は特定のオブジェクト構造を記述した特別なファイルです。
ブロック、設定、プロモーションなどに関するスキームがあります。
全てのスキームは(...app/schemas)ディレクトリに置かれています。
アドオンはそれらを拡張したり、全体または部分的にそれらを無効にすることができます。[さらに詳しく](doc:extending a scheme)
スキーマーとは
スキーマーはデータ構造を含んでおり、スキーマーによって定義されたアクションを処理する際にエンティティ(オブジェクト)によって使用されます。
例えば、特定のアイテム(商品やページなど)のインポートやエクスポートに関する記述は、それらに直接書かれておらず、すべてのインポートやエクスポート用のスキームによって記述されています。
スキーマーの種類
CS-Cartには、3種類のスキーマーがあります:
データ配列、XML構造、関数のセット
これら3種類を組み合わせることはできません。
(例えば、同じスクリプトにデータ配列と関数セットを記述することは出来ません)
データ配列
このスキーマーは配列を返します。
例)
- app/schemas/permissions/admin.php
- app/schemas/clone/objects.php
- app/schemas/sharing/schema.php
<?php
return array(
'layouts' => array(
'checked_by_default' => true,
'function' => 'fn_clone_layouts'
),
'settings' => array(
'checked_by_default' => true,
'tables' => array(
array(
'name' => 'settings_vendor_values',
'key' => '', // Do not needed
),
),
),
// Some other code
);
?>
XML構造
このスキーマーはfn_get_contents
関数によって読み込まれるテキストファイルです。
現在では旧式のものとして扱われ、コアでは使用されていません。
<menu>
<items>
<subitems>
....
<subitems>
</items>
</menu>
関数のセット
関数は以下のようなスキーマーで記述されます。
関数を持つスキーマーのほとんどは、データ配列をスキーマーへ追加します。
このスキーマーを特別に呼び出す必要はありません。
ファイルの先頭にinclude_once()
で使用すれば、それらを利用することが出来ます。
スキーマーが独立したものである場合(例えば、アクションや設定の値等)、標準で含まれています:fn_get_schema("settings", "actions.functions")
- app/schemas/exim/products.functions.php
- app/schemas/last_view/frontend.functions.php
<?php
function fn_some_scheme_func1($params)
{
...
}
function fn_some_scheme_func2()
{
...
}
?>
スキーマーの拡張
拡張には二種類の方法あります - アドオンを使用するか、タグを編集するかです。
アドオンを使って拡張する方法
アドオンを使ってスキームを拡張するためには、アドオンのパッケージ内にコアと同じディレクトリ構造を作成し、ファイル名に.postを加えます。
例えばメインファイルへのパスの場合は以下のようになります。:
app/schemas/permissions/admin.php
このファイルの拡張は:
app/addons/seo/schemas/permissions/admin.post.php
となります。
$schema
変数に拡張スキームを渡します。
$schema
変数は拡張データを含んでおり、最終的に追加された$schema
変数を返します。
例:
<?php
// $schema変数はすでに標準のスキーマーを含んでいます。
$schema['news'] = array(
'modes' => array(
'manage' => array(
'permissions' => 'manage_news'
)
)
);
return $schema;
?>
アドオンによるスキームの拡張方法のより詳しい情報はこちらを確認してください。
タグを編集して拡張する方法
編集されたタグはエディション(スタンダード版かマーケットプレイス版)毎に必要なスキームデータを形成するために使用します。
タグの編集によってスキーマーを拡張するには、
schemeディレクトリにschema_[PRODUCT_EDITION] ファイルを作成します。
例えば、次のファイルのスキーマーを拡張する場合、
- app/schemas/permissions/admin.php
編集するタグのファイルパスは以下となります。:
- app/schemas/permissions/admin_ultimate.php
$schema
変数はここでも使用されます。
$schema
変数は拡張データを含んでいます。このスクリプトは拡張された変数で作動し、最終的に$schema
変数を返します。
スキーマーデータの取得方法
スキームデータを取得するにはfn_get_schema()
関数を使用します。
<?php
function fn_get_schema($schema_dir, $name, $type = 'php', $force_addon_init = false)
{
....
}
引数の解説:
-
$schema_dir
- スキーマーディレクトリの相対パス(パーミッションや設定) -
$name
- 拡張されていないスキーマーファイル名(admin, schema)。スキーマータイプが関数の場合、この引数は次ようになります:actions.functions, variants.functions -
$type
- スキーマーの種類:phpやxml -
$force_addon_init
- この引数がある場合、無効にするアドオンとそのfunc.phpファイルが考慮されなければならないことを示します。
スキーマーをリクエストしているとき、全体のスキーマーは全てのアドオンのスキームを含んでいます。
例:
<?php
$menu = fn_get_schema('menu', 'menu', 'php');
メインスキームファイルの検索: /app/schemas/menu/menu.php
拡張するスキーマーが次のアドオンディレクトリにも置かれている場合:addons/my_addon/app/schemas/xxx/yyy.php
次のような関数を使用してスキーマーを追加します:fn_get_schema('xxx', 'yyy')
スキームを追加するとキャッシュされますので、次回以降すべてのスキーマー・ディレクトリをスキャンする必要はありません。
-
アドオンによってスキーマーが追加されているか確認します:
- app/addons/access_restrictions/schemas/menu/menu.post.php
- app/addons/attachments/schemas/menu/menu.post.php
- app/addons/banners/schemas/menu/menu.post.php
- app/addons/data_feeds/schemas/menu/menu.post.php
- app/addons/news_and_emails/schemas/menu/menu.post.php, ‥
-
CS-Cartはスキーマーファイルを1つずつ読み込みますので、結果として全ての有効なアドオンのスキーマーを含んだスキーマーを持つことになります。
Updated over 3 years ago