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 похожего на число или что-то подобное
— Мухаммед Хашам
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.