Создание настраиваемых параметров продукта с помощью Magento API

Как добавить пользовательские параметры к продукту, как это можно сделать в серверной части, с помощью API.

Я использую C #, но если вы знаете, как это сделать в Php, это тоже будет полезно.

Я заметил, что у этого продукта есть это:

var product = new catalogProductCreateEntity();
product.options_container = "blah";

А вот это:

catalogAttributeOptionEntity optionEntity = new catalogAttributeOptionEntity();
            optionEntity.value = "sds";
            optionEntity.label = "ere"; 

Но я не вижу способа их использования, я не знаю, как создать контейнер, а catalogAttributeOptionEntity не имеет всех свойств, необходимых для создания настраиваемой опции.


person Dan    schedule 09.06.2009    source источник


Ответы (3)


Посмотрите на контроллер продукта администратора. Да, это возможно.

/**
         * Initialize data for configurable product
         */
        if (($data = $this->getRequest()->getPost('configurable_products_data')) && !$product->getConfigurableReadonly()) {
            $product->setConfigurableProductsData(Zend_Json::decode($data));
        }
        if (($data = $this->getRequest()->getPost('configurable_attributes_data')) && !$product->getConfigurableReadonly()) {
            $product->setConfigurableAttributesData(Zend_Json::decode($data));
        }

        $product->setCanSaveConfigurableAttributes((bool)$this->getRequest()->getPost('affect_configurable_product_attributes') && !$product->getConfigurableReadonly());

        /**
         * Initialize product options
         */
        if (isset($productData['options']) && !$product->getOptionsReadonly()) {
            $product->setProductOptions($productData['options']);
        }
person Josh Ribakoff    schedule 26.10.2009

Это нигде не задокументировано (еще), но, по крайней мере, в Magento 1.6 можно найти соответствующие методы API для опций продукта в исходном коде. (Я не знаю, с какой версии существует эта функция.)

Сам API определен в: app / code / core / Mage / Catalog / etc / api.xml

<catalog_product_custom_option translate="title" module="catalog">
    <title>Catalog product custom options API</title>
    <model>catalog/product_option_api</model>
    <acl>catalog/product/option</acl>
    <methods>
        <add translate="title" module="catalog">
            <title>Add new custom option into product</title>
            <acl>catalog/product/option/add</acl>
        </add>
        <update translate="title" module="catalog">
            <title>Update custom option of product</title>
            <acl>catalog/product/option/update</acl>
        </update>
        <types translate="title" module="catalog">
            <title>Get list of available custom option types</title>
            <acl>catalog/product/option/types</acl>
        </types>
        <info translate="title" module="catalog">
            <title>Get full information about custom option in product</title>
            <acl>catalog/product/option/info</acl>
        </info>
        <list translate="title" module="catalog">
            <title>Retrieve list of product custom options</title>
            <acl>catalog/product/option/list</acl>
            <method>items</method>
        </list>
        <remove translate="title" module="catalog">
            <title>Remove custom option</title>
            <acl>catalog/product/option/remove</acl>
        </remove>
    </methods>
</catalog_product_custom_option>

Вызываемые функции определены в: app / code / core / Mage / Catalog / Model / Product / Option / Api.php

class Mage_Catalog_Model_Product_Option_Api extends Mage_Catalog_Model_Api_Resource
{

    /**
     * Add custom option to product
     *
     * @param string $productId
     * @param array $data
     * @param int|string|null $store
     * @return bool $isAdded
     */
    public function add( $productId, $data, $store = null )

    /**
     * Update product custom option data
     *
     * @param string $optionId
     * @param array $data
     * @param int|string|null $store
     * @return bool
     */
    public function update( $optionId, $data, $store = null )

    /**
     * Read list of possible custom option types from module config
     *
     * @return array
     */
    public function types()

    /**
     * Get full information about custom option in product
     *
     * @param int|string $optionId
     * @param  int|string|null $store
     * @return array
     */
    public function info( $optionId, $store = null )

    /**
     * Retrieve list of product custom options
     *
     * @param  string $productId
     * @param  int|string|null $store
     * @return array
     */
    public function items( $productId, $store = null )

    /**
     * Remove product custom option
     *
     * @param string $optionId
     * @return boolean
     */
    public function remove( $optionId )

    /**
     * Check is type in allowed set
     *
     * @param string $type
     * @return bool
     */
    protected function _isTypeAllowed( $type )

}

$data-array также немного сложен, поскольку его ключи частично зависят от выбранного типа опции. Базовый массив $ data выглядит так:

$data = array (
    'is_delete' => 0,
    'title' => 'Custom Option Label',
    'type' => 'text',
    'is_require' => 0,
    'sort_order' => 1,
    'additional_fields' => array (
        0 => array (
            'price' => '10.0000',
            'price_type' => 'fixed',  // 'fixed' or 'percent'
            'sku' => '',
        ),
    ),
);

additional_fields всегда объединяет хотя бы одну строку с хотя бы столбцами price, price_type и sku. В зависимости от типа могут быть добавлены дополнительные поля (maf:…). Типы в группе select могут иметь более одной строки, указанной в additional_fields. Типы / группы типов настраиваемых опций:

  • text (maf: 'max_characters')
    • field
    • площадь
  • file (maf: 'file_extension', 'image_size_x', 'image_size_y')
    • file
  • select (maf: 'value_id', 'title', 'sort_order')
    • drop_down
    • радио
    • флажок
    • несколько
  • date
    • date
    • date_time
    • время

Примеры полных массивов данных опций:

// type-group: select, type: checkbox
$data = array (
    'is_delete' => 0,
    'title' => 'extra Option for that product',
    'type' => 'checkbox',
    'is_require' => 0,
    'sort_order' => 1,
    'additional_fields' => array (
        0 => array (
            'value_id' => '3',
            'title' => 'Yes',
            'price' => 10.00,
            'price_type' => 'fixed',
            'sku' => NULL,
            'sort_order' => 1,
        ),
        1 => array (
            'value_id' => 3,
            'title' => 'No',
            'price' => 0.00,
            'price_type' => 'fixed',
            'sku' => NULL,
            'sort_order' => 2,
        ),
    ),
);

// type-group: text, type: field
$data = array (
    'is_delete' => 0,
    'title' => 'Custom Option Label',
    'type' => 'text',
    'is_require' => 0,
    'sort_order' => 1,
    'additional_fields' => array (
        0 => array (
            'price' => 10.00,
            'price_type' => 'fixed',
            'sku' => NULL,
            'max_characters' => 150,
        ),
    ),
);
person feeela    schedule 13.03.2012

В конце концов, я решил, что это невозможно сделать через API, и сразу перешел к базе данных.

person Dan    schedule 20.06.2009
comment
Это можно сделать с помощью API, однако у меня нет доказательств, которые я могу вам показать. Возможно, многие из нас не знают, как правильно добавлять продукты с помощью API, для чего я предлагаю вам всеми возможными способами пытаться узнать подробности API. - person Knowledge Craving; 29.06.2010