Как я могу получить ШЕСТНАДЦАТЕРИЧНЫЙ код в визуальном образце через Rest API


Может ли кто-нибудь помочь мне найти api rest для получения шестнадцатеричного или изображения атрибута визуального образца?

Мне нужен api, чтобы вернуть следующую метку Ценность ШЕСТНАДЦАТЕРИЧНЫЙ или изображение образца.

Спасибо

Author: MGento, 2018-02-25

2 answers

В бэкэнде вы должны ввести шестнадцатеричные значения для цветов вашего магазина в атрибуте color из:

Admin->Stores->Product затем выберите атрибуты цвета, Такие Как

enter image description here

После этого вызовите API атрибута цвета:

http://domain.com/index.php/rest/V1/products/attributes/93/options

enter image description here

Надеюсь, это поможет..

 1
Author: Jsparo30, 2020-06-15 08:30:17

К сожалению, я не нашел никакого API для получения шестнадцатеричного или изображения атрибута визуального образца. Поиграв немного, я пишу модуль, который использует атрибут расширения для AttributeInterface.... Я пробовал использовать интерфейс AttributeOptionInterface, но безуспешно.

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

http://domain.com/index.php/rest/V1/products/attributes?searchCriteria[filter_groups][0][filters][0][field]=attribute_code&searchCriteria[filter_groups][0][filters][0][value]=color
http://domain.com/index.php/rest/V1/products/attributes/93/

Протестировано с помощью Magento 2.3.2

App/code/ProjectName/ModuleName/registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'ProjectName_ModuleName',
    __DIR__
);

App/code/ProjectName/ModuleName/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="ProjectName_ModuleName" setup_version="1.0.0">
    </module>
</config>

App/code/ProjectName/ModuleName/etc/extension_attributes.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
  <extension_attributes for="Magento\Eav\Api\Data\AttributeInterface">
      <attribute code="product_attribute_option_swatch" type="ProjectName\ModuleName\Api\Data\AttributeSwatchOptionInterface[]" />
  </extension_attributes>
</config>

Создание атрибутов интерфейса и модели Watchoption

App/code/ProjectName/ModuleName/Api/Data/AttributeSwatchOptionInterface.php

<?php
namespace ProjectName\ModuleName\Api\Data;

use Magento\Eav\Api\Data\AttributeOptionInterface;

interface AttributeSwatchOptionInterface extends AttributeOptionInterface
{
    /**
     * Constants used as data array keys
     */
    const TYPE = 'type';
    const SWATCHVALUE = 'swatch_value';
    /**
     * Get option label
     *
     * @return string
     */
    public function getType();
    /**
     * Set option label
     *
     * @param string $label
     * @return $this
     */
    public function setType($type);
    /**
     * Get option value
     *
     * @return string
     */
    public function getSwatchValue();
    /**
     * Set option value
     *
     * @param string $value
     * @return string
     */
    public function setSwatchValue($swatch_value);
}

App/code/ProjectName/ModuleName/Model/AttributeSwatchOption.php

<?php
namespace ProjectName\ModuleName\Model;

use ProjectName\ModuleName\Api\Data\AttributeSwatchOptionInterface;
use Magento\Eav\Model\Entity\Attribute\Option;

class AttributeSwatchOption extends Option implements AttributeSwatchOptionInterface
{
    /**
     * Resource initialization
     *
     * @return void
     */
    public function _construct()
    {
        parent::__construct();
    }

    public function getType()
    {
        return $this->getData(AttributeSwatchOptionInterface::TYPE);
    }

    public function getSwatchValue()
    {
        return $this->getData(AttributeSwatchOptionInterface::SWATCHVALUE);
    }

    public function setType($type)
    {
        return $this->setData(AttributeSwatchOptionInterface::TYPE, $type);
    }

    public function setSwatchValue($value)
    {
        return $this->setData(AttributeSwatchOptionInterface::SWATCHVALUE, $swatch_value);
    }   
}   

Теперь мы добавим наблюдение для каталог_событий_атрибута_загрузки_после

App/code/ProjectName/ModuleName/etc/events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
  <event name="catalog_entity_attribute_load_after">
      <observer name="projectname_product_attribute_option_swatch" instance="ProjectName\ModuleName\Observer\OptionSwatchLoadAfter" />
  </event>
</config>

App/code/ProjectName/ModuleName/Observer/OptionSwatchLoadAfter.php

<?php
namespace ProjectName\ModuleName\Observer;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;

use Psr\Log\LoggerInterface as Logger;
use Magento\Swatches\Helper\Data as SwatchHelper;
use Magento\Eav\Api\Data\AttributeInterface;

class OptionSwatchLoadAfter implements ObserverInterface
{
    /**
     * @var Logger
     */
    protected $_logger;

    protected $_swatchHelper;

    public function __construct(Logger $logger, SwatchHelper $swatchHelper)
    {
        $this->_logger = $logger;
        $this->_swatchHelper = $swatchHelper;
    }
    /**
     * @param EventObserver $observer
     * @return $this
     * @throws \Exception
     */
    public function execute(EventObserver $observer)
    {
        $attribute = $observer->getEvent()->getData('attribute');

        $extensionAttributes = $attribute->getExtensionAttributes();

        //isVisualSwatch
        if ($this->_swatchHelper->isVisualSwatch($attribute))
        {
            $options = $attribute->getOptions();
            $options = $this->processOptions($options);

            $extensionAttributes->setProductAttributeOptionSwatch($options);
            $attribute->setExtensionAttributes($extensionAttributes);
        }

        return $this;
    }
    private function processOptions($options)
    {
        $option_ids = array();
        foreach($options as $option)
        {
            $option_ids[] = $option->getValue();
        }

        $swatches = $this->_swatchHelper->getSwatchesByOptionsId($option_ids);

        if (count($swatches) > 0)
        {
            foreach($options as $option)
            {
                if (isset($swatches[$option->getValue()]))
                {
                    $swatch = $swatches[$option->getValue()];
                    $option->setType($swatch['type']);
                    $option->setSwatchValue($swatch['value']);
                }
            }
        }

        return $options;
    }
}
 0
Author: gregordonsky, 2019-11-07 08:59:49