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
Аасим Горія,

Під час створення атрибутів продукту від адміністратора чи потрібно встановити тип атрибута продукту int? Немає нічого Catalog Input Type for Store Owner подібного до числа чи тощо
Мухаммад
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.