スキーマー (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 - スキーマーの種類:phpxml

  • $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つずつ読み込みますので、結果として全ての有効なアドオンのスキーマーを含んだスキーマーを持つことになります。