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.