Magento 1.9.1 yapılandırılabilir ürün özellik sıralama


24

Daha önce de bahsettiğim gibi, magento 1.9.1 ve yapılandırılabilir ürünlerin niteliklerinin sıralanmasında bir sorun var gibi görünüyor. Yapılandırılabilir bir ürünün seçenekleri şimdi HER ZAMAN basit ürünün ürün kimliğine bağlıdır. Özellik seçeneklerinin sırası göz ardı edilir.

Magento'ya geri döndüm 1.9.0.1. Belki birisi 1.9.1'deki sıralamanın nasıl yapıldığını belirleyebilir. Bunu düzeltmek için yapılandırılabilir ürünler kullanan herkes için harika olurdu.

Biri bunu görmek isterse , magento demo mağazasında burada yapabilirsiniz . Boyutları doğru sıralamak mümkün değildi.

Yanıtlar:


25

Not: Bu çözümün Magento 1.9.2 için işe yaramadığına dikkatimi çekti. Zaman kaybettirmek için başkalarını boşa harcayabilmek için bu yazının en üstünde bunu belirtmek isterim. Kendi çözümümü geliştirirsem veya 1.9.2 için çalışan başka birinin çözümünü bulursam, o zaman bu yayını güncellerim.

Uyarı: Burada ortaya konan çözüm, Magento'nun çekirdek kütüphanesindeki blok sınıf dosyasını genişletir. Bu yaklaşımdan önce Magento'nun kaynak kodunu gözden geçirdim ve bu yaklaşımdan kaçınmak için gözlemlemek için iyi bir olay olmadığını belirledim. Magento'nun gelecekteki bir sürümünde bu sıralama sorunu çözülmüşse, bu değişikliği aşağıdaki app / etc / module XML dosyasındaki uzantıyı devre dışı bırakarak geri alabilirsiniz.

Adım 1: / etc / module / FirstScribe_CatalogOptionSortFix.xml dosyasını oluşturun

İçindekiler:

<?xml version="1.0"?>
<config>
    <modules>
        <FirstScribe_CatalogOptionSortFix>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog />
            </depends>
        </FirstScribe_CatalogOptionSortFix>
    </modules>
</config>

Not: Adım 2 ve 3 için, bu dosyalar için dizinleri gerektiği gibi oluşturun. Örneğin, sitenize zaten yüklediğiniz uzantılara bağlı olarak app / code / local dizinine sahip olabilirsiniz veya olmayabilir.

Adım 2: / app / code / local / FirstScribe / CatalogOptionSortFix / etc / config.xml dosyasını oluşturun

İçindekiler:

<?xml version="1.0"?>
<!--
/**
 * Magento 1.9.1.0 has a bug in that the configurable options are sorted by
 * ID rather than position for the Configurable Product's front end view script.
 * This extension addresses this problem.
 *
 * @category    FirstScribe
 * @package     FirstScribe_CatalogOptionSortFix
 * @version     2014.12.15
 */
-->
<config>
    <modules>
        <FirstScribe_CatalogOptionSortFix>
            <version>1.0.0</version>
        </FirstScribe_CatalogOptionSortFix>
    </modules>
    <global>
        <blocks>
            <catalog>
                <rewrite>
                    <product_view_type_configurable>FirstScribe_CatalogOptionSortFix_Block_Product_View_Type_Configurable</product_view_type_configurable>
                </rewrite>
            </catalog>
        </blocks>
    </global>
</config>

Adım 3: / app / code / local / FirstScribe / CatalogOptionSortFix / Block / Product / Görüntüle / Tür / Configurable.php dosyasını oluşturun

İçindekiler:

<?php
/**
 * Magento 1.9.1.0 has a bug in that the configurable options are sorted by
 * ID rather than position for the Configurable Product's front end view script.
 * This extension addresses this problem.
 *
 * @category    FirstScribe
 * @package     FirstScribe_CatalogOptionSortFix
 * @version     2014.12.15
 */
class FirstScribe_CatalogOptionSortFix_Block_Product_View_Type_Configurable extends Mage_Catalog_Block_Product_View_Type_Configurable
{
    /**
     * @var Magento_Db_Adapter_Pdo_Mysql
     */
    protected $_read;

    /**
     * @var string
     */
    protected $_tbl_eav_attribute_option;

    /**
     * Composes configuration for js
     *
     * @version 2014.12.15 - Addition of this line:
     *    $info['options'] = $this->_sortOptions($info['options']);
     *
     * @return string
     */
    public function getJsonConfig()
    {
        $attributes = array();
        $options    = array();
        $store      = $this->getCurrentStore();
        $taxHelper  = Mage::helper('tax');
        $currentProduct = $this->getProduct();

        $preconfiguredFlag = $currentProduct->hasPreconfiguredValues();
        if ($preconfiguredFlag) {
            $preconfiguredValues = $currentProduct->getPreconfiguredValues();
            $defaultValues       = array();
        }

        foreach ($this->getAllowProducts() as $product) {
            $productId  = $product->getId();

            foreach ($this->getAllowAttributes() as $attribute) {
                $productAttribute   = $attribute->getProductAttribute();
                $productAttributeId = $productAttribute->getId();
                $attributeValue     = $product->getData($productAttribute->getAttributeCode());
                if (!isset($options[$productAttributeId])) {
                    $options[$productAttributeId] = array();
                }

                if (!isset($options[$productAttributeId][$attributeValue])) {
                    $options[$productAttributeId][$attributeValue] = array();
                }
                $options[$productAttributeId][$attributeValue][] = $productId;
            }
        }

        $this->_resPrices = array(
            $this->_preparePrice($currentProduct->getFinalPrice())
        );

        foreach ($this->getAllowAttributes() as $attribute) {
            $productAttribute = $attribute->getProductAttribute();
            $attributeId = $productAttribute->getId();
            $info = array(
                    'id'        => $productAttribute->getId(),
                    'code'      => $productAttribute->getAttributeCode(),
                    'label'     => $attribute->getLabel(),
                    'options'   => array()
            );

            $optionPrices = array();
            $prices = $attribute->getPrices();
            if (is_array($prices)) {
                foreach ($prices as $value) {
                    if(!$this->_validateAttributeValue($attributeId, $value, $options)) {
                        continue;
                    }
                    $currentProduct->setConfigurablePrice(
                            $this->_preparePrice($value['pricing_value'], $value['is_percent'])
                    );
                    $currentProduct->setParentId(true);
                    Mage::dispatchEvent(
                            'catalog_product_type_configurable_price',
                            array('product' => $currentProduct)
                    );
                    $configurablePrice = $currentProduct->getConfigurablePrice();

                    if (isset($options[$attributeId][$value['value_index']])) {
                        $productsIndex = $options[$attributeId][$value['value_index']];
                    } else {
                        $productsIndex = array();
                    }

                    $info['options'][] = array(
                            'id'        => $value['value_index'],
                            'label'     => $value['label'],
                            'price'     => $configurablePrice,
                            'oldPrice'  => $this->_prepareOldPrice($value['pricing_value'], $value['is_percent']),
                            'products'  => $productsIndex,
                    );
                    $optionPrices[] = $configurablePrice;
                }
            }

            // CALL SORT ORDER FIX
            $info['options'] = $this->_sortOptions($info['options']);

            /**
             * Prepare formated values for options choose
             */
            foreach ($optionPrices as $optionPrice) {
                foreach ($optionPrices as $additional) {
                    $this->_preparePrice(abs($additional-$optionPrice));
                }
            }
            if($this->_validateAttributeInfo($info)) {
                $attributes[$attributeId] = $info;
            }

            // Add attribute default value (if set)
            if ($preconfiguredFlag) {
                $configValue = $preconfiguredValues->getData('super_attribute/' . $attributeId);
                if ($configValue) {
                    $defaultValues[$attributeId] = $configValue;
                }
            }
        }

        $taxCalculation = Mage::getSingleton('tax/calculation');
        if (!$taxCalculation->getCustomer() && Mage::registry('current_customer')) {
            $taxCalculation->setCustomer(Mage::registry('current_customer'));
        }

        $_request = $taxCalculation->getDefaultRateRequest();
        $_request->setProductClassId($currentProduct->getTaxClassId());
        $defaultTax = $taxCalculation->getRate($_request);

        $_request = $taxCalculation->getRateRequest();
        $_request->setProductClassId($currentProduct->getTaxClassId());
        $currentTax = $taxCalculation->getRate($_request);

        $taxConfig = array(
                'includeTax'        => $taxHelper->priceIncludesTax(),
                'showIncludeTax'    => $taxHelper->displayPriceIncludingTax(),
                'showBothPrices'    => $taxHelper->displayBothPrices(),
                'defaultTax'        => $defaultTax,
                'currentTax'        => $currentTax,
                'inclTaxTitle'      => Mage::helper('catalog')->__('Incl. Tax')
        );

        $config = array(
                'attributes'        => $attributes,
                'template'          => str_replace('%s', '#{price}', $store->getCurrentCurrency()->getOutputFormat()),
                'basePrice'         => $this->_registerJsPrice($this->_convertPrice($currentProduct->getFinalPrice())),
                'oldPrice'          => $this->_registerJsPrice($this->_convertPrice($currentProduct->getPrice())),
                'productId'         => $currentProduct->getId(),
                'chooseText'        => Mage::helper('catalog')->__('Choose an Option...'),
                'taxConfig'         => $taxConfig
        );

        if ($preconfiguredFlag && !empty($defaultValues)) {
            $config['defaultValues'] = $defaultValues;
        }

        $config = array_merge($config, $this->_getAdditionalConfig());    

        return Mage::helper('core')->jsonEncode($config);
    }

    /**
     * Sort the options based off their position.
     *
     * @param array $options
     * @return array
     */
    protected function _sortOptions($options)
    {
        if (count($options)) {
            if (!$this->_read || !$this->_tbl_eav_attribute_option) {
                $resource = Mage::getSingleton('core/resource');

                $this->_read = $resource->getConnection('core_read');
                $this->_tbl_eav_attribute_option = $resource->getTableName('eav_attribute_option');
            }

            // Gather the option_id for all our current options
            $option_ids = array();
            foreach ($options as $option) {
                $option_ids[] = $option['id'];

                $var_name  = 'option_id_'.$option['id'];
                $$var_name = $option;
            }

            $sql    = "SELECT `option_id` FROM `{$this->_tbl_eav_attribute_option}` WHERE `option_id` IN('".implode('\',\'', $option_ids)."') ORDER BY `sort_order`";
            $result = $this->_read->fetchCol($sql);

            $options = array();
            foreach ($result as $option_id) {
                $var_name  = 'option_id_'.$option_id;
                $options[] = $$var_name;
            }
        }

        return $options;
    }
}

Adım 4: Etkinse, yönetici panelinin Sistem -> Önbellek Yönetimi altındaki Magento'nun "Yapılandırma" önbellek türünü yenileyin.

Uzantıya genel bakış

  1. Mage_Catalog_Block_Product_View_Type_Configurable sınıfını genişletin.
  2. positionBu bilgiyi veritabanından çekerek seçenekleri değerlerine göre sıralamak için bir yöntem ekleyin .
  3. Bir nitelik için seçenekleri topladıktan sonra, yeni fonksiyonumuzu çağırmak için getJsonConfig yöntemini yeniden yazın.

2
fevkalade çalışır ve çözümün gelecekteki güncellemeleri etkilememesine sevindim - uygulanabilir bir çözüm için size teşekkür ederiz.
dawhoo

Hey @Meogi, düzeltmenizin özellik değerleri için mükemmel gözükmesine rağmen, ürün seçme kutularının kendileri için her şeyin hazır olduğundan emin miyiz? Bunları, öznitelik kümesinde ayarlandığı şekilde sipariş ederken bir sorun fark ettim. Mesela, set niteliğindeki “Size” üstünde “Renk” sürüklenmişti, ancak 1.9.1 ikisini değiştirdi (sıralamayı görmezden geldi). Bunu düzeltmenin tek yolu ürünün kendisini düzenlemesi ve yapılandırılabilir düzeni sırasını sürüklemekti. Belki de bu daha önce yanlışlıkla elle yeniden düzenlenmiş haydut bir üründü?
Joe

1
@Joe Yanılmıyorsam, nitelik setinde niteliği daha yükseğe / altına sürüklemek, ön uç ürün detay sayfasında görüntülenen sırayı etkilemez. Bunun yerine, Katalog -> Öznitelikler -> Öznitelikleri Yönet'e gitmeli, özniteliğinizi bulmalı ve "Konum" değerini düzenlemelisiniz. Bu, yapılandırılabilir niteliklerin hem ürün sayfasında hem de katmanlı navigasyonda görüntülenme sırasını etkiler. Yapılandırılabilir seçeneklerin sırası, yönetici içindeki "İlişkilendirilmiş Ürünler" sekmesine gidip özellikleri yukarı / aşağı sürükleyerek de ürün bazında geçersiz kılınabilir.
Darren Felton,

1
@Meogi bu, "Katmanlı Gezinme'de Kullanım" ı etkinleştirdiğinizde yalnızca Katmanlı Gezinme Bloğu konumu içindir.
Joe

@Joe Görüyorum, öyleyse varsayılan ayarları nasıl değiştireceğimi bilmiyorum (belki de her zaman bu özellik setine yerleştirilmiştir, emin değilim). Magento 1.9.1.0 kurulumunda, yapılandırılabilir ürünün "İlgili Ürünler" sekmesinde yukarı / aşağı tıklayarak / sürükleyerek seçimim için bir sipariş ayarlayabildiğimi söyleyebilirim. Hızlı yaratma formu ile alttaki ürün ızgarası arasında listeleniyorlar.
Darren Felton,

11

Sadece iki kuruş eklemek için, diğer iki cevap beni düzeltmenin yönüne işaret etmekte başarılı oldu, ancak blok sunum noktasından ziyade kaynağa saldıracağımı düşündüm.

Aynı sonucu, Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_Collectionmodelin _loadPrices()yöntemini genişleterek elde edebilirsiniz ; ismin bir değişikliğin yapıldığı yer olmasına rağmen (muhtemelen performans için), özelliklerin alaka düzeyinden ziyade kimlik numarasına göre sıralanmasıyla sonuçlanır.

Değişikliğin iç içe foreachifadelerden kaçınmak için yapıldığı görülüyor , ancak sırayla doğru sırayı da kaybediyor. Bu öznitelik, öznitelik seçeneklerini izlemek için güncellenmiş mantığı biraz değiştirir, ardından gerçekte eklemeyi yapmak için orijinal sırayı temel alarak başka bir döngü gerçekleştirir.

İşte yukarıdaki meoginin cevabına benzer düzeltilmiş bir adım :


1. Adım: Yeni bir modül kaydedin

Not: Zaten bir tane varsa, mevcut olanı kullanın.

# File: app/etc/modules/YourCompany_AttributeFix.xml
<?xml version="1.0"?>
<config>
    <modules>
        <YourCompany_AttributeFix>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog />
            </depends>
        </YourCompany_AttributeFix>
    </modules>
</config>

Adım 2: Modül konfigürasyonunu oluşturun

# File: app/code/local/YourCompany/AttributeFix/etc/config.xml
<?xml version="1.0"?>
<config>
    <modules>
        <YourCompany_AttributeFix>
            <version>0.1.0</version>
        </YourCompany_AttributeFix>
    </modules>    
    <global>
        <models>
            <catalog_resource>
                <rewrite>
                    <product_type_configurable_attribute_collection>YourCompany_AttributeFix_Model_Resource_Product_Type_Configurable_Attribute_Collection</product_type_configurable_attribute_collection>
                </rewrite>
            </catalog_resource>
        </models>
    </global>
</config>

Adım 3: Kaynak modeli uzantısını ekleyin

# File: app/code/local/YourCompany/AttributeFix/Model/Resource/Product/Type/Configurable/Attribute/Collection.php
/**
 * Catalog Configurable Product Attribute Collection - overridden to re-enable the attribute option
 * sorting by relevance rather than by ID as changed in the Magento core class
 */
class YourCompany_AttributeFix_Model_Resource_Product_Type_Configurable_Attribute_Collection
    extends Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_Collection
{
    /**
     * Load attribute prices information
     *
     * @return Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_Collection
     */
    protected function _loadPrices()
    {
        if ($this->count()) {
            $pricings = array(
                0 => array()
            );

            if ($this->getHelper()->isPriceGlobal()) {
                $websiteId = 0;
            } else {
                $websiteId = (int)Mage::app()->getStore($this->getStoreId())->getWebsiteId();
                $pricing[$websiteId] = array();
            }

            $select = $this->getConnection()->select()
                ->from(array('price' => $this->_priceTable))
                ->where('price.product_super_attribute_id IN (?)', array_keys($this->_items));

            if ($websiteId > 0) {
                $select->where('price.website_id IN(?)', array(0, $websiteId));
            } else {
                $select->where('price.website_id = ?', 0);
            }

            $query = $this->getConnection()->query($select);

            while ($row = $query->fetch()) {
                $pricings[(int)$row['website_id']][] = $row;
            }

            $values = array();

            foreach ($this->_items as $item) {
                $productAttribute = $item->getProductAttribute();
                if (!($productAttribute instanceof Mage_Eav_Model_Entity_Attribute_Abstract)) {
                    continue;
                }
                $options = $productAttribute->getFrontend()->getSelectOptions();

                $optionsByValue = array();
                foreach ($options as $option) {
                    $optionsByValue[$option['value']] = $option['label'];
                }

                /**
                 * Modification to re-enable the sorting by relevance for attribute options
                 * @author Robbie Averill <robbie.averill@kathmandu.co.nz>
                 */
                $toAdd = array();
                foreach ($this->getProduct()->getTypeInstance(true)
                             ->getUsedProducts(array($productAttribute->getAttributeCode()), $this->getProduct())
                         as $associatedProduct) {

                    $optionValue = $associatedProduct->getData($productAttribute->getAttributeCode());

                    if (array_key_exists($optionValue, $optionsByValue)) {
                        $toAdd[] = $optionValue;
                    }
                }

                // Add the attribute options, but in the relevant order rather than by ID
                foreach (array_intersect_key($optionsByValue, array_flip($toAdd)) as $optionValueKey => $optionValue) {
                    // If option available in associated product
                    if (!isset($values[$item->getId() . ':' . $optionValue])) {
                        // If option not added, we will add it.
                        $values[$item->getId() . ':' . $optionValueKey] = array(
                            'product_super_attribute_id' => $item->getId(),
                            'value_index'                => $optionValueKey,
                            'label'                      => $optionsByValue[$optionValueKey],
                            'default_label'              => $optionsByValue[$optionValueKey],
                            'store_label'                => $optionsByValue[$optionValueKey],
                            'is_percent'                 => 0,
                            'pricing_value'              => null,
                            'use_default_value'          => true
                        );
                    }
                }
                /**
                 * End attribute option order modification
                 * @author Robbie Averill <robbie.averill@kathmandu.co.nz>
                 */
            }

            foreach ($pricings[0] as $pricing) {
                // Addding pricing to options
                $valueKey = $pricing['product_super_attribute_id'] . ':' . $pricing['value_index'];
                if (isset($values[$valueKey])) {
                    $values[$valueKey]['pricing_value']     = $pricing['pricing_value'];
                    $values[$valueKey]['is_percent']        = $pricing['is_percent'];
                    $values[$valueKey]['value_id']          = $pricing['value_id'];
                    $values[$valueKey]['use_default_value'] = true;
                }
            }

            if ($websiteId && isset($pricings[$websiteId])) {
                foreach ($pricings[$websiteId] as $pricing) {
                    $valueKey = $pricing['product_super_attribute_id'] . ':' . $pricing['value_index'];
                    if (isset($values[$valueKey])) {
                        $values[$valueKey]['pricing_value']     = $pricing['pricing_value'];
                        $values[$valueKey]['is_percent']        = $pricing['is_percent'];
                        $values[$valueKey]['value_id']          = $pricing['value_id'];
                        $values[$valueKey]['use_default_value'] = false;
                    }
                }
            }

            foreach ($values as $data) {
                $this->getItemById($data['product_super_attribute_id'])->addPrice($data);
            }
        }
        return $this;
    }
}

4. Adım: Önbelleğinizi temizleyin


Başvuru için, bir çekirdek sınıfındaki gerçek değişiklik git diffaşağıda olacaktır (doğrudan çekirdek dosyaları düzenlemeyin!):

diff --git a/app/code/core/Mage/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php b/app/code/core/Mage/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php
index 135d9d3..4d2a59b 100644
--- a/app/code/core/Mage/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php
+++ b/app/code/core/Mage/Catalog/Model/Resource/Product/Type/Configurable/Attribute/Collection.php
@@ -254,6 +254,11 @@ class Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_Collection
                     $optionsByValue[$option['value']] = $option['label'];
                 }

+                /**
+                 * Modification to re-enable the sorting by relevance for attribute options
+                 * @author Robbie Averill <robbie.averill@kathmandu.co.nz>
+                 */
+                $toAdd = array();
                 foreach ($this->getProduct()->getTypeInstance(true)
                              ->getUsedProducts(array($productAttribute->getAttributeCode()), $this->getProduct())
                          as $associatedProduct) {
@@ -261,22 +266,31 @@ class Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_Collection
                     $optionValue = $associatedProduct->getData($productAttribute->getAttributeCode());

                     if (array_key_exists($optionValue, $optionsByValue)) {
-                        // If option available in associated product
-                        if (!isset($values[$item->getId() . ':' . $optionValue])) {
-                            // If option not added, we will add it.
-                            $values[$item->getId() . ':' . $optionValue] = array(
-                                'product_super_attribute_id' => $item->getId(),
-                                'value_index'                => $optionValue,
-                                'label'                      => $optionsByValue[$optionValue],
-                                'default_label'              => $optionsByValue[$optionValue],
-                                'store_label'                => $optionsByValue[$optionValue],
-                                'is_percent'                 => 0,
-                                'pricing_value'              => null,
-                                'use_default_value'          => true
-                            );
-                        }
+                        $toAdd[] = $optionValue;
                     }
                 }
+
+                // Add the attribute options, but in the relevant order rather than by ID
+                foreach (array_intersect_key($optionsByValue, array_flip($toAdd)) as $optionValueKey => $optionValue) {
+                    // If option available in associated product
+                    if (!isset($values[$item->getId() . ':' . $optionValue])) {
+                        // If option not added, we will add it.
+                        $values[$item->getId() . ':' . $optionValueKey] = array(
+                            'product_super_attribute_id' => $item->getId(),
+                            'value_index'                => $optionValueKey,
+                            'label'                      => $optionsByValue[$optionValueKey],
+                            'default_label'              => $optionsByValue[$optionValueKey],
+                            'store_label'                => $optionsByValue[$optionValueKey],
+                            'is_percent'                 => 0,
+                            'pricing_value'              => null,
+                            'use_default_value'          => true
+                        );
+                    }
+                }
+                /**
+                 * End attribute option order modification
+                 * @author Robbie Averill <robbie.averill@kathmandu.co.nz>
+                 */
             }

             foreach ($pricings[0] as $pricing) {

Bu da başvuruda bulunmak isteyen varsa GitHub'da .

Düzenleme: Bunu Magento ile bir hata olarak da girdim .


1
Harika bir katkı arkadaşım. +1 (evet, teşekkür etmek için bu yorumları kullanmamalısınız, ama sen onu öldürdün, bu yüzden haha ​​yapmalıyım)
Darren Felton

Magento 1.9.2 ile denedim - doenst ne yazık ki işe yaramadı. Ve neden bu hatanın Magento tarafından hala çözülmediğini anlamıyorum.
Reinsch

Modülünüzün doğru yapılandırıldığından emin oldunuz mu? Bunun farkında olduklarından eminim, ancak muhtemelen sistemin çok önemli bir parçası olduğundan bir yamayı serbest bırakmadan önce doğrulaması zaman alacak bir şey. Düzenleme: Düzeltmeyi doğrudan (ve geçici olarak) da test edebilir, ancak yamayı doğrudan ana sınıfa (geçici olarak) kopyalayabilirsiniz
Robbie Averill

1
@Reinsch CE 1.9.2 ile uyumsuzluk konusunda birinden bir e-posta aldım - Github depomuza bir güncelleme gönderdim ve bunu CE 1.9.2'de Magento örnek verileriyle test ettim ve şu anda doğru çalışıyor
Robbie Averill

1
Büyük iş @RobbieAverill - çok teşekkürler. Magento 1.9.2.1 web sitesinde çalıştığı test edildi ve onaylandı.
zigojacko

3

Bu gerçekten uygun bir düzeltme değil ama bir sonraki Magento sürümü umarım konuyu doğru düzeltene kadar 1.9.0.1'e geri dönmek zorunda kalmamak için geçici olarak yaptığım şey. Seçenek değerlerini alfabetik olarak sıralar, elbette istediğiniz herhangi bir şeye göre sıralayabilirsiniz, ancak arka uçta ayarlanan sıralama düzenine nasıl erişeceğimi bilmiyorum ve alfabetik olarak amaçlarım için yeterince iyi.

Dosyayı değiştirin

/app/code/core/Mage/Catalog/Block/Product/View/Type/configurable.php

Satır değiştir 215

if($this->_validateAttributeInfo($info)) {
   $attributes[$attributeId] = $info;
}

için

usort($info['options'], function ($a,$b)
    {
        return strcmp($a['label'],$b['label']);
    }
);
if($this->_validateAttributeInfo($info)) {
   $attributes[$attributeId] = $info;
}

2
Lütfen Magento'nun çekirdek kütüphanesini doğrudan değiştirmek yerine uygun şekilde genişleten bir cevap için cevabımı gör. Yine de, bu cevabı için Steve'e övgüler duyduğum gibi, bulduğum çözümü geliştirmeye nereden başlayacağımı bilmemde bana çok yardımcı oldu.
Darren Felton

Müthiş Atılgan'ın cazibesi gibiydi,
günlerimi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.