Magento 2-カタログ商品リストウィジェットの商品注文


8

マジェントのホームページに商品一覧が表示されています。この製品リストはcatalog product list widgetホームページカテゴリにある製品を表示するように構成されて作成されました。このカテゴリの製品には位置番号があります。価格順に表示されているように表示されます。ウィジェットに位置順リストを表示するにはどうすればよいですか?

回答:


3

ウィジェット製品リストでの位置による注文が必要な場合は、次を実行する必要があります。

名前空間/CustomWidgets/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\CatalogWidget\Block\Product\ProductsList">
        <plugin name="custom_widgets_product_list" type="Namespace\CustomWidgets\Plugin\Block\Product\ProductsListPlugin"/>
    </type>
</config>

名前空間/CustomWidgets/Plugin/Block/Product/ProductsListPlugin.php

<?php    
namespace Namespace\CustomWidgets\Plugin\Block\Product;

use Magento\Catalog\Model\ResourceModel\Product\Collection;
use Magento\CatalogWidget\Block\Product\ProductsList;

/**
 * Class ProductsListPlugin
 */
class ProductsListPlugin
{

    /**
     * @param ProductsList $subject
     * @param Collection $result
     * @return Collection
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function afterCreateCollection(ProductsList $subject, Collection $result)
    {
        $result->getSelect()->order('cat_index_position asc');

        return $result;
    }
}

この順序は常にルートカテゴリの位置です。特定のカテゴリで注文する場合は、そのための新しいカスタムウィジェットを作成する必要があります。


この回答は私に役立ちました、ありがとう。$ result-> setOrder( 'created_at'、 'DESC');を使用しました。代わりに。
ポール、

1

そう、古い質問ですが、私には関係があります。悲しいことに答えがなかったので、自分で直さなければならなかったので、その間、質問に答えるつもりでした。

ここで作業を文書化しますが、モジュール全体はhttps://github.com/rianorie/magento2-sortcatalogwidgetで入手できます

まず最初に、Magentoのcatalogwidgetモジュールをざっと見て、を見つけました\Magento\CatalogWidget\Block\Product\ProductsList::createCollection。これにより、使用可能な並べ替え機能がないことが確認されます。したがって、プラグインが付属しています:

class AfterCreateCollection
{
    public function aftercreateCollection($subject, $result)
    {
        /**
         * @var \Magento\Catalog\Model\ResourceModel\Product\Collection $result
         * @var \Magento\CatalogWidget\Block\Product\ProductsList $subject
         */

        // if there's a sort_by attribute defined, add a sort to the collection
        if ($subject->hasData('sort_by')) {

            // if there's a direction given, check and use that otherwise  use the default
            $direction = strtoupper($subject->getData('sort_direction'));
            if (!in_array($direction, [Select::SQL_DESC, Select::SQL_ASC])) {
                $direction = Select::SQL_DESC;
            }

            $result->setOrder($subject->getData('sort_by'), $direction);
        }

        return $result;
    }
}

これは良いスタートですが、管理者はウィジェット定義に属性を手動で簡単に追加することを許可していません。したがって、そのための定義も追加します。

ではetc/widget.xml、私たちの操作を行います。

<?xml version="1.0" encoding="UTF-8"?>
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
    <widget id="products_list">
        <parameters>
            <parameter name="sort_by" xsi:type="text" required="false" visible="true">
                <label translate="true">Attribute to sort the products by</label>
            </parameter>
            <parameter name="sort_direction" xsi:type="select" visible="true" required="false"
                       source_model="Elastomatic\SortCatalogWidget\Model\Config\Source\Direction">
                <label translate="true">Sort direction</label>
            </parameter>
        </parameters>
    </widget>
</widgets>

ああ、出来上がり!カタログウィジェットの並べ替えが可能になりました。ある時点で、モジュールのフリータイプ入力の代わりに製品属性フィールドのドロップダウンを追加するかもしれませんが、これは今のところ私の目的に役立ちます。


Magentoのカタログリスト製品ウィジェットは位置による並べ替えをサポートしていないため、上記のモジュールをインストールしましたが、それでも製品が位置順にリストされていません。どうやってこの作品を作ったのか教えてください。
Siva 2018

それでも、商品が表示されるのは、位置ではなく商品IDの値によって異なります。
Siva

1

リアンの答えがうまくいかない場合の解決策は次のとおりです。

行を置き換える

$result->setOrder($subject->getData('sort_by'), $direction);

$result->getSelect()->reset(\Zend_Db_Select::ORDER);
$result->addAttributeToSort($subject->getData('sort_by'), $direction);

そしてモジュールは期待通りに動くはずです。

更新されたMagento 2モジュールはこちらから入手できます:https : //github.com/Bitpolar-Tech/module-sort-catalog-widget

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.