Magento 2 - проблема сортировки товара на странице категории с использованием атрибута товара

11

Я сделал атрибут продукта и назначил его для набора атрибутов, чтобы он отображался на странице сведений о продукте администратора. На основе этого атрибута товара я сортирую коллекцию товаров на странице категории.

Проблема заключается в том , я установил Catalog Input Type for Store Ownerв Text field. Мне нужно будет установить числовое значение для каждого продукта, чтобы отсортировать коллекцию продуктов на основе этого атрибута. Он отлично работает с 1 по 9, но когда я увеличиваю счет более чем на 9, например, на 10, 11 и т. Д., Это разрушает сортировку. Это может быть потому, что тип поля не является числовым типом

Мы будем благодарны за любую помощь, обмен опытом и знаниями.

Мухаммед Хашам
источник

Ответы:

3

Пожалуйста, попробуйте следующий способ, используя собственный плагин, поэтому, пожалуйста, добавьте код плагина в свое собственное расширение, как показано ниже

/Vendor/Module/etc/frontend/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Block\Product\ProductList\Toolbar">
        <plugin name="vendormodule_catalog_block_product_listproduct_toolbar" type="Vendor\Module\Plugin\Catalog\Block\Product\ProductList\Toolbar"/>
    </type>
</config>

/Vendor/Module/Plugin/Catalog/Block/Product/ProductList/Toolbar.php

<?php

namespace Vendor\Module\Plugin\Catalog\Block\Product\ProductList;

class Toolbar
{
    /**
     * @var \Magento\Framework\Registry
     */
    protected $_coreRegistry;

    public function __construct(\Magento\Framework\Registry $coreRegistry)
    {
        $this->_coreRegistry = $coreRegistry;
    }

    /**
     * @param \Magento\Catalog\Block\Product\ProductList\Toolbar $toolbar
     * @param \Magento\Framework\Data\Collection $collection
     * @return array
     */
    public function beforeSetCollection(
        \Magento\Catalog\Block\Product\ProductList\Toolbar $toolbar,
        $collection
    ){
        $collection->getSelect()->group('e.entity_id')->order('{YOUR CUSTOM ATTRIBUTE CODE} ASC');
        $collection->getSize();

        return [$collection];
    }
}

Пожалуйста, попробуйте и дайте мне знать, если у вас возникнут проблемы.

Аасим Гория
источник
Братан, я использую то же самое для сортировки. Это прекрасно работает, когда я ввожу значение из 1-9в свой собственный атрибут продукта, но когда я увеличиваю значение с 9, как 10, 11. Это разрушит сортировку, как я сказал в своем вопросе. В любом случае, спасибо за ответ. За ваши усилия. +1
Мухаммед Хашам
Поэтому попробуйте изменить тип атрибута вашей базы данных на int
Aasim Goriya
Во время создания атрибута продукта от администратора, есть ли способ установить тип атрибута продукта int? Нет ничего Catalog Input Type for Store Owner похожего на число или что-то подобное
Мухаммед Хашам