Magento 2 - Problème de tri de produit sur la page de catégorie en utilisant l'attribut de produit


11

J'ai créé l'attribut de produit et je l'ai attribué à l'ensemble d'attributs afin qu'il s'affiche dans la page de détails du produit administrateur. Sur la base de cet attribut de produit, je trie la collection de produits sur la page de catégorie.

Le problème est que je l'ai réglé Catalog Input Type for Store Ownersur Text field. Je devrai définir la valeur numérique par rapport à chaque produit afin de trier la collection de produits en fonction de cet attribut. Cela fonctionne bien de 1 à 9 mais quand j'augmente le nombre de plus de 9 comme 10, 11 etc. Cela peut être dû au fait que le type de champ n'est pas un type de numéro

Toute aide, expérience et partage de connaissances seraient appréciés.

Réponses:


3

Veuillez essayer de la façon suivante en utilisant un plugin personnalisé, veuillez donc ajouter le code du plugin dans votre extension personnalisée comme ci-dessous

/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];
    }
}

Veuillez essayer de me faire savoir si vous rencontrez un problème.


Bro j'utilise la même chose pour le tri. Cela fonctionne bien lorsque j'entre la valeur de 1-9dans mon attribut de produit personnalisé, mais lorsque j'augmente la valeur de 9 comme 10, 11. Cela détruira le tri comme je l'ai dit dans ma question. Quoi qu'il en soit, merci d'avoir répondu. Pour votre effort. +1
Muhammad Hasham

Essayez donc de changer le type d'attribut de votre base de données en int
Aasim Goriya

Lors de la création d'un attribut de produit à partir de l'administrateur, y a-t-il un moyen de définir le type d'attribut de produit sur int? Il n'y a rien dans le Catalog Input Type for Store Owner même nombre ou etc.
Muhammad Hasham
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.