ドロップダウン2.12の設定可能な製品属性のソート順


9

ドロップダウンの順序は、属性自体の順序と一致していません。属性サイズ内で、新生児に0〜3か月注文しました

ドロップダウンでは0-3 Newbornと表示されます

サイズの新生児は他のサイズの数日後に追加され、新生児のシンプルな製品は0〜3ヶ月後に輸入されました。属性内のリストの順序に従うようにドロップダウンの順序を取得する方法の提案はありますか?キャッシュをクリアしてインデックスを再作成しました。@Khoa TruongDinhにも同じ問題がありましたが、問題の解決策が見つからなかったので再投稿しました。


また、サイズ0〜3の属性製品はすでに存在し、サイズNewbornのすべての属性製品を追加しています。
babywit 2016年

回答:


14

フロントエンドで同じ属性オプションの並べ替えの問題に直面しました。この問題を確認したところ、属性オプションをフェッチしている間、Magento 2.1.2ではクエリに並べ替えフィルターがデフォルトで追加されていないため、この問題を修正する必要があります。次のコードを追加して、ファイルの行282の関数getAttributeOptionsにORDER Byを追加します。

->joinInner(
        ['attribute_opt' => $this->getTable('eav_attribute_option')],
        'attribute_opt.option_id = entity_value.value',
        []
    )->order(
        'attribute_opt.sort_order ASC'
    );

コードを編集できない場合は、このgetAttributeOptions関数を次のコードに置き換えてください。

public function getAttributeOptions($superAttribute, $productId)
{
    $scope  = $this->getScopeResolver()->getScope();
    $select = $this->getConnection()->select()->from(
        ['super_attribute' => $this->getTable('catalog_product_super_attribute')],
        [
            'sku' => 'entity.sku',
            'product_id' => 'product_entity.entity_id',
            'attribute_code' => 'attribute.attribute_code',
            'value_index' => 'entity_value.value',
            'option_title' => $this->getConnection()->getIfNullSql(
                'option_value.value',
                'default_option_value.value'
            ),
            'default_title' => 'default_option_value.value',
        ]
    )->joinInner(
        ['product_entity' => $this->getTable('catalog_product_entity')],
        "product_entity.{$this->getProductEntityLinkField()} = super_attribute.product_id",
        []
    )->joinInner(
        ['product_link' => $this->getTable('catalog_product_super_link')],
        'product_link.parent_id = super_attribute.product_id',
        []
    )->joinInner(
        ['attribute' => $this->getTable('eav_attribute')],
        'attribute.attribute_id = super_attribute.attribute_id',
        []
    )->joinInner(
        ['entity' => $this->getTable('catalog_product_entity')],
        'entity.entity_id = product_link.product_id',
        []
    )->joinInner(
        ['entity_value' => $superAttribute->getBackendTable()],
        implode(
            ' AND ',
            [
                'entity_value.attribute_id = super_attribute.attribute_id',
                'entity_value.store_id = 0',
                "entity_value.{$this->getProductEntityLinkField()} = "
                . "entity.{$this->getProductEntityLinkField()}",
            ]
        ),
        []
    )->joinLeft(
        ['option_value' => $this->getTable('eav_attribute_option_value')],
        implode(
            ' AND ',
            [
                'option_value.option_id = entity_value.value',
                'option_value.store_id = ' . $scope->getId(),
            ]
        ),
        []
    )->joinLeft(
        ['default_option_value' => $this->getTable('eav_attribute_option_value')],
        implode(
            ' AND ',
            [
                'default_option_value.option_id = entity_value.value',
                'default_option_value.store_id = ' . \Magento\Store\Model\Store::DEFAULT_STORE_ID,
            ]
        ),
        []
    )->where(
        'super_attribute.product_id = ?',
        $productId
    )->where(
        'attribute.attribute_id = ?',
        $superAttribute->getAttributeId()
    )->joinInner(
        ['attribute_opt' => $this->getTable('eav_attribute_option')],
        'attribute_opt.option_id = entity_value.value',
        []
    )->order(
        'attribute_opt.sort_order ASC'
    );

    return $this->getConnection()->fetchAll($select);
}

本当にありがとうございましたが、私はphpに精通していません。修正のどこに追加すればよいかわかりません。これは私が280-282から持っているもので、の前に追加しようとしました。282にこれが機能しませんでした。280 'attribute.attribute_id =?'、281 $ superAttribute-> getAttributeId()282);
babywit 2016年

コードを編集できない場合は、これを置き換えてください
Jagdish Ram

このパッチを適用する拡張機能を書いた人はいますか?
TheNorthern_Light 2017年

また、これは2.1.9では機能しないようです。
TheNorthern_Light 2017年

2.1.14では、機能はに移動しましたMagento\ConfigurableProduct\Model\AttributeOptionProvider。一見して解決したように見えますが、バグの可能性についてはわかりません。
simonthesorcerer

3
  1. 移動設定可能製品ページ- > [構成の編集] - > [次-nextクリック-次をし、何も変更しないでください
  2. 次に、製品を保存すると、順序どおりになります。

製品を更新または保存しますか?
Lasantha 2018年

300以上の製品でそれを行う方法は?
Mohammed Joraid

実際には、構成可能な製品編集ページのみを開き、保存するだけでソート順が直接修正されます。したがって、1-製品を開く2- [保存]をクリックします。しかし、すべての製品に手動でアクセスせずにこれを機能させて保存する方法。すべての製品を一括でサイトに追加しようとしましたが、保存イベントがトリガーされることを期待していましたが、並べ替えは修正されていませんでした。MAG2.2.2の使用
Mohammed Joraid

1

Newbornが属性値であることを意味する場合は、「ストア」->「属性(製品)」に移動し、必要な属性を見つけて、マウスでドラッグ&ドロップを使用してオプションの位置を変更する必要があります。 ここに画像の説明を入力してください

ドロップダウン自体の位置(サイズ、色、形)は、関連する製品を生成するときに設定できます。編集フォームを開く-> 詳細設定->構成の編集-属性値のステップとドラッグ&ドロップ移動属性の助けを借りて ここに画像の説明を入力してください


はい、正確に。「属性サイズ内で私はそれを0〜3か月の新生児に注文しました」したがって、属性自体の中で新生児は0〜3ヶ月以上であり、製品ドロップダウンには0〜3ヶ月以上の新生児が表示されます。
babywit 2016年

私の知る限りでは、属性自体の順序はmagento 2.1.2では適切に機能していません
babywit

属性に記載されている順序で属性の順序が表示されない、または属性が正しい順序で表示されるようにするための回避策で、この問題の原因を誰かが知っていますか?私は自分の店を立ち上げたいのですが、これが私をけんけんさせています。
babywit 2016年


1

この問題は最新のリリース2.1.7にも存在するため、この回避策を使用できます。

構成可能な製品のページに移動- >構成->すべての単純な製品を削除

その後、それらを目的の順序で再度追加します。

手動で製品を追加する->名前で製品をフィルターする->単純な製品を目的の順序で追加する。


1

v2.3.xでは、拡張可能な構成可能な製品ドロップダウンセレクターでオプションラベルによって属性の順序を並べ替えることができます。

Magento\ConfigurableProduct\Model\AttributeOptionProvider

そして使用

usort($data, function($a, $b) {
    return $a['option_title'] <=> $b['option_title'];
});

getAttributeOptions()で返されたオプションデータ配列$ dataをソートするには


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