Magento 1.9.1 sắp xếp thuộc tính sản phẩm cấu hình


24

Như tôi đã đề cập, dường như có vấn đề với magento 1.9.1 và việc sắp xếp các thuộc tính của các sản phẩm có thể định cấu hình. Các tùy chọn của một sản phẩm có thể định cấu hình bây giờ LUÔN LUÔN phụ thuộc vào ID sản phẩm của sản phẩm đơn giản. Thứ tự của các tùy chọn thuộc tính được bỏ qua.

Tôi đã quay lại magento 1.9.0.1. Có lẽ ai đó có thể xác định cách sắp xếp trong 1.9.1 được thực hiện. Nó sẽ là tuyệt vời cho tất cả những người sử dụng các sản phẩm cấu hình để khắc phục điều đó.

Nếu ai đó muốn thấy điều đó, bạn có thể làm điều đó ở đây trong cửa hàng demo magento. Tôi đã không thể sắp xếp các kích thước chính xác.

Câu trả lời:


25

Lưu ý: Tôi đã nhận thấy rằng giải pháp này không hoạt động cho Magento 1.9.2. Để tiết kiệm thời gian của người khác, tôi muốn chỉ ra điều này ở đầu bài này. Nếu tôi phát triển giải pháp của riêng mình hoặc tìm giải pháp của người khác hoạt động cho 1.9.2, tôi sẽ cập nhật bài đăng này tại thời điểm đó.

Lưu ý: Giải pháp được trình bày ở đây mở rộng tệp lớp trong thư viện lõi của Magento. Tôi đã xem lại mã nguồn của Magento trước phương pháp này và xác định rằng không có sự kiện nào tốt để quan sát để tránh phương pháp này. Nếu trong phiên bản tương lai của Magento, sự cố sắp xếp này được giải quyết, bạn có thể hoàn tác các thay đổi này bên dưới chỉ bằng cách vô hiệu hóa tiện ích mở rộng trong tệp XML của ứng dụng / etc / mô-đun.

Bước 1: tạo ứng dụng tệp / etc / mô-đun / FirstScribe_CatalogOptionSortFix.xml

Nội dung:

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

Lưu ý: Đối với bước 2 và 3, tạo thư mục cho các tệp này nếu cần. Ví dụ: bạn có thể đã có ứng dụng thư mục / mã / cục bộ hoặc bạn có thể không, tùy thuộc vào tiện ích mở rộng nào bạn đã cài đặt trên trang web của mình.

Bước 2: Tạo tệp ứng dụng / mã / cục bộ / FirstScribe / CatalogOptionSortFix / etc / config.xml

Nội dung:

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

Bước 3: Tạo ứng dụng tệp / mã / cục bộ / FirstScribe / CatalogOptionSortFix / Block / Product / View / Type / Configurable.php

Nội dung:

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

Bước 4: Nếu được bật, hãy làm mới loại bộ đệm "Cấu hình" của Magento trong Hệ thống -> Quản lý bộ đệm của bảng quản trị.

Tổng quan mở rộng

  1. Mở rộng lớp Mage_Catalog_Block_ Productt_View_Type_Configurable.
  2. Thêm một phương thức để sắp xếp các tùy chọn theo positiongiá trị của chúng bằng cách lấy thông tin này từ cơ sở dữ liệu.
  3. Viết lại phương thức getJsonConfig để gọi hàm mới của chúng ta sau khi đã thu thập các tùy chọn cho một thuộc tính.

2
hoạt động tuyệt vời và tôi rất vui vì giải pháp này không ảnh hưởng đến việc nâng cấp trong tương lai - cảm ơn bạn rất nhiều vì giải pháp khả thi.
dawhoo

Xin chào @Meogi mặc dù có vẻ như bản sửa lỗi của bạn là hoàn hảo cho các giá trị thuộc tính, chúng tôi có chắc chắn mọi thứ đều phù hợp với sản phẩm chọn hộp không? Nhận thấy một vấn đề với việc sắp xếp chúng theo cách chúng được đặt trong tập thuộc tính. Ví dụ: chúng tôi đã kéo "Màu" bên trên "Kích thước" trong tập thuộc tính, tuy nhiên 1.9.1 đã chuyển đổi hai (bỏ qua thứ tự). Cách duy nhất để khắc phục đó là tự chỉnh sửa sản phẩm và kéo đơn hàng trong cấu hình. Có lẽ đây chỉ là một sản phẩm giả mạo đã vô tình được sắp xếp lại bằng tay trước đây?
Joe

1
@Joe Nếu tôi không nhầm, việc kéo thuộc tính cao hơn / thấp hơn trong bộ thuộc tính không ảnh hưởng đến thứ tự chúng được hiển thị trên trang chi tiết sản phẩm mặt trước. Thay vào đó, bạn phải vào Danh mục -> Thuộc tính -> Quản lý thuộc tính, tìm thuộc tính của bạn và chỉnh sửa giá trị "Vị trí". Điều này sẽ ảnh hưởng đến cả thứ tự các thuộc tính có thể định cấu hình được hiển thị trên trang sản phẩm cũng như điều hướng theo lớp. Thứ tự của các tùy chọn có thể định cấu hình cũng có thể được ghi đè trên cơ sở từng sản phẩm, bằng cách điều hướng đến tab "Sản phẩm được liên kết" trong quản trị viên và kéo các thuộc tính lên / xuống ở đó.
Darren Felton

1
@Meogi cái này chỉ dành cho vị trí Khối điều hướng được xếp lớp, khi bạn bật "Sử dụng trong Điều hướng theo lớp".
Joe

@ Tôi thấy, vậy thì tôi không biết cách thay đổi cài đặt mặc định (có lẽ nó luôn luôn là vị trí trong bộ thuộc tính, tôi không chắc lắm). Tôi có thể nói rằng khi cài đặt Magento 1.9.1.0, tôi vẫn có thể đặt nó theo thứ tự mà tôi chọn bằng cách nhấp / kéo lên / xuống trong tab "Sản phẩm được liên kết" của sản phẩm có thể định cấu hình. Nơi chúng được liệt kê giữa biểu mẫu tạo nhanh và lưới sản phẩm ở phía dưới.
Darren Felton

11

Chỉ cần thêm hai xu của tôi, hai câu trả lời khác đã làm tốt để chỉ cho tôi hướng khắc phục, nhưng tôi nghĩ tôi sẽ tấn công nó tại nguồn chứ không phải là điểm trình bày khối.

Bạn có thể đạt được kết quả tương tự bằng cách mở rộng phương thức Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_Collectioncủa mô hình _loadPrices(), mặc dù tên là nơi thực hiện thay đổi (có lẽ là cho hiệu suất) dẫn đến các thuộc tính được sắp xếp theo ID thay vì theo mức độ liên quan.

Sự thay đổi dường như đã được thực hiện để tránh các foreachbáo cáo lồng nhau , nhưng đến lượt nó cũng mất đúng thứ tự. Giải pháp này sửa đổi logic được cập nhật một chút để theo dõi các tùy chọn thuộc tính, sau đó thực hiện một vòng lặp khác dựa trên thứ tự ban đầu để thực sự thêm.

Đây là một hướng dẫn điều chỉnh tương tự như câu trả lời của meogi ở trên :


Bước 1: Đăng ký một mô-đun mới

Lưu ý: nếu bạn đã có, hãy sử dụng lại một cái hiện có.

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

Bước 2: Tạo cấu hình của mô-đun

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

Bước 3: Thêm phần mở rộng mô hình tài nguyên

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

Bước 4: Xóa bộ nhớ cache của bạn


Để tham khảo , thay đổi thực tế cho lớp lõi trong một git diffsẽ ở bên dưới (không trực tiếp chỉnh sửa các tệp lõi!):

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) {

Đây cũng là trên GitHub nếu bất cứ ai muốn nó để tham khảo.

Chỉnh sửa: Tôi cũng đã đăng nhập đây là một lỗi với Magento .


1
Đóng góp tuyệt vời bạn của tôi. +1 (vâng, không nên sử dụng những bình luận này để nói lời cảm ơn nhưng bạn đã giết nó vì vậy tôi phải haha)
Darren Felton

Tôi đã thử nó với magento 1.9.2 - doenst dường như hoạt động không may. Và tôi không hiểu tại sao lỗi này vẫn chưa được Magento sửa.
Reinsch

Bạn có đảm bảo rằng mô-đun của bạn được cấu hình đúng không? Tôi chắc chắn họ biết về nó, nhưng có lẽ cần phải có thời gian để xác minh trước khi họ phát hành một bản vá vì đây là một phần rất quan trọng của hệ thống. Chỉnh sửa: Bạn cũng có thể kiểm tra bản sửa lỗi trực tiếp (và tạm thời) nhưng sao chép bản vá trực tiếp vào lớp lõi (tạm thời)
Robbie Averill

1
@Reinsch Tôi vừa mới có được một email từ một người nào đó liên quan đến sự không tương thích với CE 1.9.2 - đã đẩy một cập nhật cho kho Github của tôi và thử nghiệm nó trên CE 1.9.2 với dữ liệu mẫu Magento và nó làm việc một cách chính xác hiện nay
Robbie Averill

1
Công việc tuyệt vời @RobbieAverill - cảm ơn rất nhiều. Đã thử nghiệm và xác nhận làm việc trên trang web Magento 1.9.2.1.
zigojacko

3

Đây thực sự không phải là một sửa chữa thích hợp nhưng đó là những gì tôi đã làm tạm thời để tránh phải quay lại 1.9.0.1 cho đến khi phiên bản Magento tiếp theo hy vọng sẽ khắc phục vấn đề một cách chính xác. Nó sẽ sắp xếp các giá trị tùy chọn theo thứ tự bảng chữ cái, tất nhiên bạn có thể sắp xếp theo bất cứ thứ gì bạn muốn nhưng tôi không biết cách truy cập thứ tự sắp xếp được đặt trong phụ trợ và theo thứ tự bảng chữ cái là đủ tốt cho mục đích của tôi.

Thay đổi tập tin

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

Thay đổi dòng 215

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

đến

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

2
Vui lòng xem câu trả lời của tôi để biết câu trả lời giúp mở rộng thư viện cốt lõi của Magento thay vì trực tiếp sửa đổi nó. Tuy nhiên, lời khen ngợi dành cho Steve vì câu trả lời này vì nó giúp tôi rất nhiều trong việc biết bắt đầu từ đâu để phát triển giải pháp mà tôi đã đưa ra.
Darren Felton

Tuyệt vời làm việc như sự quyến rũ trong Doanh nghiệp thậm chí nhờ một tấn bạn tiết kiệm được ngày của tôi ..
Bharath
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.