2

金属の種類、石の種類、宝石の種類などのカスタム属性を追加するために、Shopware バリアント モデルを拡張する必要があります。これらの属性は、バックエンドとフロントエンドの両方で使用されます。

どうやってやるの?ありがとう

4

1 に答える 1

9

Shopware コア モデル自体を拡張することはまったくできません。拡張しようとしている特定のモデルに応じて、回避策として 2 つの異なる方法があります。

  1. 記事自体を拡張したい場合は、ここで説明されているようにカスタム属性フィールドを使用できます: http://community.shopware.com/Anlegen,-Anpassen-und-Ausgabe-von-Artikel-Attributen_detail_1208.html

  2. もう 1 つの方法は、プラグイン install() のコードで属性フィールドを作成するプラグインを作成することです。これは、エンティティ自体に属する属性テーブルを持つエンティティでのみ可能です。たとえば、s_order と s_order_attributes

2 番目の方法では、次のようにプラグインの Bootstrap.php にメソッドを作成し、プラグインの install() メソッドでメソッドを呼び出します。

public function installOrderAttributes()
{
    Shopware()->Models()->addAttribute(
        's_order_attributes', 
        'ordermod',
        'Random1',
        'DECIMAL(12,4)',
        false,
        0.0000);
    Shopware()->Models()->addAttribute(
        's_order_attributes',
        'ordermod',
        'Random2',
        'DECIMAL(12,4)',
        false,
        0.0000);

    $metaDataCacheDoctrine = Shopware()->Models()->getConfiguration()->getMetadataCacheImpl();
    $metaDataCacheDoctrine->deleteAll();

    Shopware()->Models()->generateAttributeModels(array('s_order_attributes'));
}

/engine/Shopware/Components/Model/ModelManager.php の addAttribute() 関数には、次の署名があります。

/**
 * Shopware helper function to extend an attribute table.
 *
 * @param string $table Full table name. Example: "s_user_attributes"
 * @param string $prefix Column prefix. The prefix and column parameter will be the column name. Example: "swag".
 * @param string $column The column name
 * @param string $type Full type declaration. Example: "VARCHAR( 5 )" / "DECIMAL( 10, 2 )"
 * @param bool $nullable Allow null property
 * @param null $default Default value of the column
 * @throws \InvalidArgumentException
 */
public function addAttribute($table, $prefix, $column, $type, $nullable = true, $default = null);

これが役立つことを願っています。

敬具!

于 2016-04-14T13:58:19.657 に答える