Magento 1.9.1 konfigurierbare Sortierung der Produktattribute

24

Wie ich bereits erwähnte, scheint es ein Problem mit Magento 1.9.1 und der Sortierung der Attribute konfigurierbarer Produkte zu geben. Die Optionen eines konfigurierbaren Produkts hängen IMMER von der Produkt-ID des einfachen Produkts ab. Die Reihenfolge der Attributoptionen wird ignoriert.

Ich bin zu Magento 1.9.0.1 zurückgekehrt. Vielleicht kann jemand bestimmen, wie die Sortierung in 1.9.1 durchgeführt wird. Es wäre großartig für alle, die konfigurierbare Produkte verwenden, um das zu beheben.

Wenn jemand das sehen möchte, kann man es hier im Magento Demo Store machen. Ich konnte die Größen nicht richtig sortieren.

Reinsch
quelle

Antworten:

25

Hinweis: Ich wurde darauf aufmerksam gemacht, dass diese Lösung für Magento 1.9.2 nicht funktioniert. Um anderen Zeit zu sparen, möchte ich am Anfang dieses Beitrags darauf hinweisen. Wenn ich meine eigene Lösung entwickle oder eine andere Lösung finde, die für 1.9.2 geeignet ist, werde ich diesen Beitrag zu diesem Zeitpunkt aktualisieren.

Hinweis: Die hier beschriebene Lösung erweitert eine Blockklassendatei in der Kernbibliothek von Magento. Ich habe Magentos Quellcode vor diesem Ansatz überprüft und festgestellt, dass es kein gutes Ereignis gibt, das beobachtet werden kann, um diesen Ansatz zu vermeiden. Wenn in einer zukünftigen Version von Magento dieses Problem behoben ist, können Sie diese Änderungen im Folgenden rückgängig machen, indem Sie die Erweiterung in der XML-Datei app / etc / modules deaktivieren.

Schritt 1: Erstellen Sie die Datei app / etc / modules / FirstScribe_CatalogOptionSortFix.xml

Inhalt:

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

Hinweis: Erstellen Sie für Schritt 2 und 3 nach Bedarf Verzeichnisse für diese Dateien. Beispielsweise haben Sie möglicherweise bereits das Verzeichnis app / code / local oder nicht, je nachdem, welche Erweiterungen Sie bereits auf Ihrer Site installiert haben.

Schritt 2: Erstellen Sie die Datei app / code / local / FirstScribe / CatalogOptionSortFix / etc / config.xml

Inhalt:

<?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>

Schritt 3: Erstellen Sie die Datei app / code / local / FirstScribe / CatalogOptionSortFix / Block / Product / View / Type / Configurable.php

Inhalt:

<?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;
    }
}

Schritt 4: Wenn aktiviert, aktualisieren Sie Magentos Cache-Typ "Konfiguration" unter System -> Cache-Verwaltung des Admin-Panels.

Erweiterungsübersicht

  1. Erweitern Sie die Klasse Mage_Catalog_Block_Product_View_Type_Configurable.
  2. Fügen Sie eine Methode hinzu, um Optionen nach ihrem positionWert zu sortieren, indem Sie diese Informationen aus der Datenbank abrufen.
  3. Schreiben Sie die Methode getJsonConfig neu, um unsere neue Funktion aufzurufen, nachdem Sie die Optionen für ein Attribut gesammelt haben.
Darren Felton
quelle
2
funktioniert fantastisch und ich bin froh, dass die Lösung keine Auswirkungen auf zukünftige Upgrades hat - vielen Dank für eine praktikable Lösung.
Dawhoo
Hey @ Meogi, obwohl es so aussieht, als ob Ihr Fix perfekt für die Attributwerte ist, sind wir sicher, dass für die Produktauswahlfelder selbst alles in Ordnung ist? Es wurde ein Problem bei der Bestellung dieser Elemente innerhalb des Attributsatzes festgestellt. Zum Beispiel - wir hatten "Farbe" über "Größe" innerhalb der Attributmenge gezogen, aber 1.9.1 hat die beiden vertauscht (die Reihenfolge ignoriert). Die einzige Möglichkeit, dies zu beheben, bestand darin, das Produkt selbst zu bearbeiten und die Reihenfolge innerhalb des konfigurierbaren Bereichs zu verschieben. Vielleicht war dies nur ein Schurkenprodukt, das zuvor versehentlich manuell nachbestellt wurde?
Joe
1
@ Joe Wenn ich mich nicht irre, wirkt sich das Ziehen des Attributs nach oben / unten im Attributsatz nicht auf die Reihenfolge aus, in der sie auf der Front-End-Produktdetailseite angezeigt werden. Stattdessen müssen Sie in Katalog -> Attribute -> Attribute verwalten nach Ihrem Attribut suchen und den Wert "Position" bearbeiten. Dies wirkt sich sowohl auf die Reihenfolge aus, in der konfigurierbare Attribute auf der Produktseite angezeigt werden, als auch auf die geschichtete Navigation. Die Reihenfolge der konfigurierbaren Optionen kann auch pro Produkt außer Kraft gesetzt werden, indem Sie im Administrator zur Registerkarte "Zugehörige Produkte" navigieren und die Attribute nach oben / unten ziehen.
Darren Felton
1
@Meogi Dies ist nur für die Position "Layered Navigation Block", wenn Sie "In Layered Navigation verwenden" aktivieren.
Joe
@Joe Ich verstehe, na dann weiß ich nicht, wie ich die Standardeinstellungen ändern soll (vielleicht war es schon immer die Platzierung in der Attributgruppe, da bin ich mir nicht sicher). Ich kann behaupten, dass ich in einer Magento 1.9.1.0-Installation immer noch eine Reihenfolge meiner Wahl festlegen konnte, indem ich auf der Registerkarte "Zugehörige Produkte" des konfigurierbaren Produkts auf / nach oben / unten zog. Wo sie zwischen dem Schnellformular und dem Produktraster unten aufgelistet sind.
Darren Felton
11

Nur um meine zwei Cent zu addieren, die anderen beiden Antworten haben mich gut in die richtige Richtung gelenkt, aber ich dachte, ich würde es eher an der Quelle als am Blockpräsentationspunkt angreifen.

Sie können das gleiche Ergebnis erzielen, indem Sie die Methode des Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_CollectionModells erweitern. _loadPrices()Trotz des Namens wurde eine Änderung vorgenommen (vermutlich aus Gründen der Leistung), die dazu führte, dass die Attribute nach ID und nicht nach Relevanz sortiert wurden.

Die Änderung wurde anscheinend vorgenommen, um verschachtelte foreachAnweisungen zu vermeiden , verliert jedoch auch die richtige Reihenfolge. Diese Lösung ändert die aktualisierte Logik geringfügig, um die Attributoptionen zu verfolgen, und führt dann basierend auf der ursprünglichen Reihenfolge eine weitere Schleife durch, um das Hinzufügen tatsächlich durchzuführen.

Hier ist eine angepasste exemplarische Vorgehensweise, die der obigen Antwort von meogi ähnelt :


Schritt 1: Registrieren Sie ein neues Modul

Hinweis: Wenn Sie bereits eine haben, verwenden Sie eine vorhandene erneut.

# 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>

Schritt 2: Erstellen Sie die Konfiguration des Moduls

# 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>

Schritt 3: Fügen Sie die Ressourcenmodellerweiterung hinzu

# 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 <[email protected]>
                 */
                $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 <[email protected]>
                 */
            }

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

Schritt 4: Leeren Sie Ihren Cache


Als Referenz wäre die tatsächliche Änderung der Core-Klasse in a git diffwie folgt (Core-Dateien nicht direkt bearbeiten!):

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 <[email protected]>
+                 */
+                $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 <[email protected]>
+                 */
             }

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

Dies ist auch auf GitHub, wenn jemand es als Referenz haben möchte.

Bearbeiten: Ich habe dies auch als Fehler in Magento protokolliert .

Robbie Averill
quelle
1
Toller Beitrag, mein Freund. +1 (Ja, ich sollte diese Kommentare nicht verwenden, um Danke zu sagen, aber du hast es getötet, also muss ich haha)
Darren Felton
Ich habe es mit Magento 1.9.2 ausprobiert - scheint leider nicht zu funktionieren. Und ich verstehe nicht, warum dieser Fehler immer noch nicht von Magento behoben wurde.
Reinsch
Haben Sie sichergestellt, dass Ihr Modul richtig konfiguriert ist? Ich bin mir sicher, dass sie sich dessen bewusst sind, aber es wird wahrscheinlich einige Zeit dauern, bis sie einen Patch veröffentlicht haben, da er ein sehr wichtiger Teil des Systems ist. Bearbeiten: Sie können das Update auch direkt (und vorübergehend) testen, aber den Patch direkt in die Kernklasse (vorübergehend) kopieren
Robbie Averill
1
@Reinsch Ich habe gerade eine E-Mail von jemandem erhalten, der sich mit Inkompatibilität mit CE 1.9.2 befasst. Ich habe ein Update auf mein Github-Repository gepusht und es auf CE 1.9.2 mit Magento-Beispieldaten getestet. Es funktioniert jetzt ordnungsgemäß.
Robbie Averill
1
Tolle Arbeit @RobbieAverill - vielen Dank. Getestet und bestätigt auf einer Magento 1.9.2.1 Webseite zu arbeiten.
Zigojacko
3

Dies ist keine richtige Lösung, aber ich habe es vorübergehend getan, um zu vermeiden, dass ich auf 1.9.0.1 zurückgreifen muss, bis die nächste Magento-Version das Problem hoffentlich richtig behebt. Die Optionswerte werden alphabetisch sortiert. Sie können natürlich nach Belieben sortieren, aber ich weiß nicht, wie ich auf die im Backend festgelegte Sortierreihenfolge zugreifen soll. Die alphabetische Sortierung ist für meine Zwecke ausreichend.

Ändern Sie die Datei

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

Ändern Sie die Zeile 215

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

zu

usort($info['options'], function ($a,$b)
    {
        return strcmp($a['label'],$b['label']);
    }
);
if($this->_validateAttributeInfo($info)) {
   $attributes[$attributeId] = $info;
}
Steve
quelle
2
In meiner Antwort finden Sie eine Antwort, die die Kernbibliothek von Magento angemessen erweitert, anstatt sie direkt zu ändern. Trotzdem ein großes Lob an Steve für diese Antwort, die mir sehr geholfen hat, zu wissen, wo ich anfangen soll, die Lösung zu entwickeln, die ich mir ausgedacht habe.
Darren Felton
Hervorragend gearbeitet wie Charme in Enterprise, auch dank einer Tonne, die Sie meinen Tag retten ..
Bharath