Magento 1.9.1 কনফিগারযোগ্য পণ্য বৈশিষ্ট্য বাছাই


24

আমি ইতিমধ্যে উল্লিখিত হিসাবে, ম্যাজেন্টো 1.9.1 এবং কনফিগারযোগ্য পণ্যগুলির বৈশিষ্ট্য বাছাই করার ক্ষেত্রে একটি সমস্যা আছে বলে মনে হচ্ছে। একটি কনফিগারযোগ্য পণ্যের বিকল্পগুলি এখন সর্বদা সাধারণ পণ্যের আইডির উপর নির্ভর করে। বৈশিষ্ট্য বিকল্পগুলির ক্রম উপেক্ষা করা হয়।

আমি ম্যাজেন্টোতে ফিরে গিয়েছিলাম 9.৯.০.২০১।। ১.৯.১ এ বাছাই করা কীভাবে হয় তা কেউ নির্ধারণ করতে পারেন। এটি ঠিক করার জন্য কনফিগারযোগ্য পণ্য ব্যবহার করা প্রত্যেকের পক্ষে দুর্দান্ত হবে।

কারো দেখতে চায়, আপনি এটা করতে পারেন এখানে Magento ডেমো দোকান। আমি মাপগুলি সঠিকভাবে বাছাই করতে পারিনি।

উত্তর:


25

দ্রষ্টব্য: এটি আমার নজরে আনা হয়েছে যে এই সমাধানটি ম্যাজেন্টো 1.9.2 এর জন্য কাজ করে না। অন্যদের অপচয় করা সময় বাঁচাতে আমি এই পোস্টের শীর্ষে এটি উল্লেখ করতে চাই। যদি আমি আমার নিজস্ব সমাধান বিকাশ করি বা অন্য কারও সমাধানটি খুঁজে পেয়েছি যা 1.9.2 এর জন্য কাজ করে তবে আমি এই পোস্টটি তখন আপডেট করব।

বিজ্ঞপ্তি: এখানে বিহিত সমাধানটি ম্যাজেন্টোর কোর লাইব্রেরিতে একটি ব্লক শ্রেণীর ফাইল বাড়িয়েছে। আমি এই পদ্ধতির আগে ম্যাজেন্টোর উত্স কোড পর্যালোচনা করেছি এবং স্থির করেছি যে এই পদ্ধতির এড়াতে কোনও ভাল অনুষ্ঠান পালন করা হয়নি। যদি ভবিষ্যতে ম্যাগান্টোর সংস্করণে এই বাছাইয়ের সমস্যাটি সমাধান হয়ে যায় তবে আপনি কেবলমাত্র এর অ্যাপ্লিকেশন / ইত্যাদি / মডিউলগুলির এক্সএমএল ফাইলটিতে এক্সটেনশনটি অক্ষম করে নীচে এই পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে নিতে পারেন।

পদক্ষেপ 1: ফাইল অ্যাপ্লিকেশন / ইত্যাদি / মডিউলগুলি / ফার্স্টস্ক্রিপ্ট_কিগ্যালএলঅ্যাপশনসোর্টফিক্স.এক্সএমএল তৈরি করুন

সূচিপত্র:

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

দ্রষ্টব্য: 2 এবং 3 ধাপের জন্য, এই ফাইলগুলির জন্য প্রয়োজনীয় হিসাবে ডিরেক্টরি তৈরি করুন। উদাহরণস্বরূপ, আপনার ইতিমধ্যে ডিরেক্টরি অ্যাপ্লিকেশন / কোড / স্থানীয় থাকতে পারে বা আপনি ইতিমধ্যে আপনার সাইটে কী এক্সটেনশানগুলি ইনস্টল করেছেন তার উপর নির্ভর করে আপনি নাও পারেন।

পদক্ষেপ 2: ফাইল অ্যাপ্লিকেশন / কোড / স্থানীয় / ফার্স্টস্ক্রিপ্ট / ক্যাটালগঅপশনসার্টফিক্স / ইত্যাদি / কনফিগারেশন। এক্সএমএল তৈরি করুন

সূচিপত্র:

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

পদক্ষেপ 3: ফাইল অ্যাপ্লিকেশন / কোড / স্থানীয় / ফার্স্টস্ক্রিপ্ট / ক্যাটালগ অপশনসোর্টফিক্স / ব্লক / পণ্য / দর্শন / প্রকার / কনফিগারযোগ্য.এফপি তৈরি করুন

সূচিপত্র:

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

পদক্ষেপ 4: সক্ষম করা থাকলে অ্যাডমিন প্যানেলের সিস্টেম -> ক্যাশে ম্যানেজমেন্টের অধীনে ম্যাজেন্টোর "কনফিগারেশন" ক্যাশে প্রকারটি রিফ্রেশ করুন।

এক্সটেনশন ওভারভিউ

  1. ম্যাগ_গ্যাটালগ_ব্লক_প্রডাক্ট_ভিউ_উইপ_সিদ্ধযোগ্য ক্লাসটি প্রসারিত করুন।
  2. positionডাটাবেস থেকে এই তথ্যটি টেনে তাদের মান দ্বারা বিকল্পগুলি বাছাই করার জন্য একটি পদ্ধতি যুক্ত করুন ।
  3. কোনও বৈশিষ্ট্যের বিকল্পগুলি সংগ্রহ করার পরে আমাদের নতুন ফাংশনটি কল করার জন্য getJsonConfig পদ্ধতিটি পুনরায় লিখুন।

2
চমত্কারভাবে কাজ করে এবং আমি আনন্দিত যে সমাধানটি ভবিষ্যতের আপগ্রেডগুলিকে প্রভাবিত করে না - একটি কার্যক্ষম সমাধানের জন্য আপনাকে অনেক ধন্যবাদ।
দাওহু

আরে @ মেগি যদিও আপনার ফিক্সটি অ্যাট্রিবিউট মানগুলির জন্য নিখুঁত বলে মনে হচ্ছে, আমরা কি নিশ্চিত যে পণ্যগুলি নিজেরাই বাছাই করা বাক্সগুলির জন্য রয়েছে? এটিকে অ্যাট্রিবিউট সেটের মধ্যে সেট করা হয় সেভাবে অর্ডার দেওয়ার সাথে একটি সমস্যা লক্ষ্য করেছেন। উদাহরণস্বরূপ- অ্যাট্রিবিউট সেটের মধ্যে আমরা "রঙ" উপরে "আকার" এর উপরে টানলাম, তবে 1.9.1 দুটি পরিবর্তন করেছে (ক্রমটিকে অগ্রাহ্য করেছে)। এটি ঠিক করার একমাত্র উপায় যা পণ্যটি নিজেই সম্পাদনা করছিল এবং কনফিগারযোগ্যের মধ্যে ক্রমটি টেনে আনছিল। সম্ভবত এটি কেবল একটি দুর্বৃত্ত পণ্য যা দুর্ঘটনাক্রমে ম্যানুয়ালি পূর্বে পুনরায় সাজানো হয়েছিল?
জো

1
@ জো যদি আমার ভুল না হয় তবে অ্যাট্রিবিউট সেটে অ্যাট্রিবিউটটি উচ্চ / নিম্নকে টেনে আনলে সামনের প্রান্তের পণ্য বিবরণ পৃষ্ঠায় প্রদর্শিত ক্রমটি সেগুলি প্রভাবিত করে না। পরিবর্তে, আপনাকে অবশ্যই ক্যাটালগ -> বৈশিষ্ট্যগুলিতে -> বৈশিষ্ট্যগুলি পরিচালনা করুন, আপনার বৈশিষ্ট্যটি অনুসন্ধান করুন এবং "অবস্থান" মানটি সম্পাদনা করতে হবে। এটি উভয় ক্রমকেই প্রভাবিত করবে যা কনফিগারযোগ্য বৈশিষ্ট্যগুলি পণ্য পৃষ্ঠায় প্রদর্শিত হবে পাশাপাশি স্তরযুক্ত নেভিগেশন। অ্যাডমিনের "অ্যাসোসিয়েটেড প্রোডাক্টস" ট্যাবে নেভিগেট করে এবং সেখানে বৈশিষ্ট্যগুলিকে উপরে / নীচে টেনে এনে কনফিগারযোগ্য বিকল্পগুলির ক্রমটি প্রতি পণ্য ভিত্তিতে ওভাররাইড করা যায়।
ড্যারেন ফেল্টন

1
@ মেগি এটি কেবল স্তরিত নেভিগেশন ব্লক পজিশনের জন্য, আপনি যখন "স্তরযুক্ত নেভিগেশন ব্যবহার করুন" সক্ষম করে থাকেন তার জন্য।
জো

@ জো আমি দেখতে পাচ্ছি, তবে আমি কীভাবে ডিফল্ট সেটিংস পরিবর্তন করতে পারি তা জানি না (সম্ভবত এটি সবসময় এটির অ্যাট্রিবিউট সেটে স্থান দেওয়া হয়েছে, আমি নিশ্চিত নই)। আমি উল্লেখ করতে পারি যে একটি ম্যাজেন্টো ১.৯.১.০ ইনস্টলেশনে আমি এখনও এটি কনফিগারযোগ্য পণ্যের "সহযোগী পণ্য" ট্যাবটিতে ক্লিক করে / টেনে আনার মাধ্যমে এটিকে আমার পছন্দের ক্রমে সেট করতে সক্ষম হয়েছি। এগুলি দ্রুত তৈরির ফর্ম এবং নীচে পণ্য গ্রিডের মধ্যে তালিকাবদ্ধ রয়েছে।
ড্যারেন ফেল্টন

11

কেবল আমার দুটি সেন্ট যুক্ত করার জন্য, অন্য দুটি উত্তর আমাকে ফিক্সের দিক নির্দেশ করতে ভাল করেছে, তবে আমি ভেবেছিলাম ব্লক উপস্থাপনা পয়েন্টের পরিবর্তে উত্সটিতে এটি আক্রমণ করব।

আপনি Mage_Catalog_Model_Resource_Product_Type_Configurable_Attribute_Collectionমডেলের _loadPrices()পদ্ধতি বাড়িয়ে একই ফলাফল অর্জন করতে পারবেন , নাম সত্ত্বেও যেখানে পরিবর্তন হয়েছিল (সম্ভবত কার্য সম্পাদনের জন্য) যার ফলে বৈশিষ্ট্যগুলি প্রাসঙ্গিকতার পরিবর্তে আইডি দ্বারা আদেশ করা হয়েছিল।

পরিবর্তনটি নেস্টেড foreachবিবৃতি এড়ানোর জন্য করা হয়েছে বলে মনে হয় , তবে পরিবর্তে সঠিক ক্রমটিও হারাতে থাকে। এই সমাধানটি অ্যাট্রিবিউট বিকল্পগুলি ট্র্যাক করতে আপডেট যুক্তিকে কিছুটা সংশোধন করে, তারপরে আসলে যুক্ত করার জন্য মূল ক্রমের উপর ভিত্তি করে অন্য লুপটি সম্পাদন করে।

উপরে মেগির উত্তরের মতো একটি সামঞ্জস্যযুক্ত ওয়াকথ্রো এখানে :


পদক্ষেপ 1: একটি নতুন মডিউল নিবন্ধন করুন

দ্রষ্টব্য: আপনার যদি ইতিমধ্যে একটি থাকে তবে বিদ্যমানটি পুনরায় ব্যবহার করুন।

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

পদক্ষেপ 2: মডিউলটির কনফিগারেশন তৈরি করুন

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

পদক্ষেপ 3: রিসোর্স মডেল এক্সটেনশন যুক্ত করুন

# 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: আপনার ক্যাশে সাফ করুন


রেফারেন্সের জন্য , একটিতে মূল শ্রেণিতে আসল পরিবর্তন git diffনীচে হবে (সরাসরি কোর ফাইলগুলি সম্পাদনা করবেন না!):

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

এই GitHub থেকে হয় কেউ যদি রেফারেন্সের জন্য এটা চায়।

সম্পাদনা করুন: আমি এটিকে ম্যাগেন্টোর সাথে একটি বাগ হিসাবে লগ ইন করেছি ।


1
দারুণ অবদান আমার বন্ধু। +1 (হ্যাঁ, ধন্যবাদ বলার জন্য এই মন্তব্যগুলি ব্যবহার করার কথা নয় তবে আপনি এটি মেরেছেন তাই আমাকে হাহাহা করতে হবে)
ড্যারেন ফেল্টন

আমি এটি ম্যাজেন্টো ১.৯.২ দিয়ে চেষ্টা করেছি - মনে হচ্ছে দুর্ভাগ্যজনকভাবে কাজ করা হয় না। এবং আমি বুঝতে পারি না কেন এই ত্রুটিটি এখনও ম্যাজেন্টো দ্বারা স্থির করা হয়নি।
পুনরায় দিন

আপনি কি নিশ্চিত করেছেন যে আপনার মডিউলটি সঠিকভাবে কনফিগার হয়েছে? আমি নিশ্চিত যে তারা এটি সম্পর্কে সচেতন, তবে এটি সম্ভবত এমন কিছু যা তারা কোনও প্যাচ সিস্টেমের খুব গুরুত্বপূর্ণ অংশটি প্রকাশ করার আগে যাচাই করতে সময় নিতে পারে। সম্পাদনা করুন: আপনি সরাসরি (এবং অস্থায়ীভাবে) ফিক্সটি পরীক্ষা করতে পারেন কিন্তু প্যাচটি সরাসরি মূল শ্রেণিতে অনুলিপি করতে (অস্থায়ীভাবে)
রবি অ্যাভারিল

1
@ রিন্সচ আমার সাথে সিই ১.৯.২-এর সাথে বেমানানতা সম্পর্কিত কোনও ইমেইল এসেছিল - আমার গিথুব সংগ্রহস্থলের একটি আপডেট ঠেলে দিয়েছেন এবং ম্যাগেন্টো নমুনা ডেটার সাথে সিই ১.৯.২ এ পরীক্ষা করেছেন এবং এটি এখন সঠিকভাবে কাজ করছে
রবি অ্যাভারিল

1
@ রবিএভারিল - দুর্দান্ত কাজ পরীক্ষিত এবং একটি Magento 1.9.2.1 ওয়েবসাইটে কাজ নিশ্চিত করেছেন।
জিগোজাকো

3

এটি আসলে কোনও যথাযথ সমাধান নয় তবে পরবর্তী ম্যাজেন্টো রিলিজ না হওয়া পর্যন্ত আশা করি সমস্যাটি সঠিকভাবে সমাধান না করা পর্যন্ত আমি অস্থায়ীভাবে 1.9.0.1 এ ফিরে যেতে এড়াতে এটি করেছি। এটি বিকল্পের বর্ণমালা অনুসারে বাছাই করবে, আপনি অবশ্যই যে কোনও কিছু অনুসারে বাছাই করতে পারেন তবে আমি জানি না কীভাবে ব্যাকএন্ডে সেট করা বাছাই করা ক্রমটি অ্যাক্সেস করতে হবে এবং বর্ণানুক্রমিকভাবে আমার উদ্দেশ্যগুলির পক্ষে যথেষ্ট ভাল।

ফাইলটি পরিবর্তন করুন

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

215 লাইন পরিবর্তন করুন

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

থেকে

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

2
দয়া করে এমন উত্তরের জন্য আমার উত্তর দেখুন যা সঠিকভাবে ম্যাগেন্টোর কোর লাইব্রেরিটি সরাসরি সংশোধন করার চেয়ে প্রসারিত করে। তবুও, এই উত্তরের জন্য স্টিভের কাছে কুডোস কারণ এটি যে সমাধানটি আমি নিয়ে এসেছি সেটির সমাধান কোথায় বানাতে হবে তা জেনে আমাকে সাহায্য করেছিল।
ড্যারেন ফেলটন

আপনি আমার দিনটি বাঁচানোর জন্য একটি টনকে ধন্যবাদ এমনকি এন্টারপ্রাইজে আকর্ষণীয়ের মতো দুর্দান্ত কাজ করেছেন ..
ভারতথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.