Magento 1.9 меняет значение пользовательской опции в зависимости от номера акции - PullRequest
0 голосов
/ 26 марта 2019

У меня есть пользовательский код, который определяет, существует ли значение пользовательского кода и выбирает ли он эту опцию вместо опции порядка сортировки по умолчанию в конфигурации продукта.

Что я хочу сделать, так это добавить логику, что если sku продукта начинается с «F», то он покажет значение порядка сортировки по умолчанию для этого продукта.

Пользовательский код находится в этом файле ..

Приложение \ код \ Local \ Mage \ Каталог \ Block \ Продукт \ Вид \ Параметры \ Тип \ Select.php

Вот код вопроса

            // Set Default for the following cases:
            // Ring Size for Men = T, Women = M
            // Price for Custom Option is $0 and is the last, unless defaulted by Men or Women.
            // if ($_value->getTitle() == 'M' && $isFemale) {
            //     $select->setValue($_value->getOptionTypeId());  
            // }
            // else if ($_value->getTitle() == 'T' && $isMale) {
            //     $select->setValue($_value->getOptionTypeId());  
            // } 
            // else if ($_value->getPrice() == 0.0000 && $hasNoPrice && !$isFemale && !$isMale) {
            //     $select->setValue($_value->getOptionTypeId());  
            // } 

            if ($_value->getTitle() == 'M') {
               $select->setValue($_value->getOptionTypeId());  
            }
            else if ($_value->getTitle() == 'T') {
                $select->setValue($_value->getOptionTypeId());  
            } 
        }

Этот код в порядке, как есть ... но я хочу добавить к утверждениям, что если код акции начинается с 'F', тогда присвойте значение по умолчанию.

что-то вроде

if ($sku_code == 'F') { $select->setValue($configValue); }

, где будет показано значение порядка сортировки по умолчанию для опции.

Я просто не могу заставить это работать.

Любая помощь в кодировании, и вы получите мгновенное признание и хорошую карму!

ура

обновление Вот полный код из Select.php

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @category    Mage
 * @package     Mage_Catalog
 * @copyright   Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */


/**
 * Product options text type block
 *
 * @category   Mage
 * @package    Mage_Catalog
 * @author     Magento Core Team <core@magentocommerce.com>
 */
class Mage_Catalog_Block_Product_View_Options_Type_Select
    extends Mage_Catalog_Block_Product_View_Options_Abstract
{
    /**
     * Return html for control element
     *
     * @return string
     */
    public function getValuesHtml()
    {
        $_option = $this->getOption();
        $configValue = $this->getProduct()->getPreconfiguredValues()->getData('options/' . $_option->getId());
        $store = $this->getProduct()->getStore();

        if ($_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN
            || $_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_MULTIPLE) {
            $require = ($_option->getIsRequire()) ? ' required-entry' : '';
            $extraParams = '';
            $select = $this->getLayout()->createBlock('core/html_select')
                ->setData(array(
                    'id' => 'select_'.$_option->getId(),
                    'class' => $require.' product-custom-option'
                ));
            if ($_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN) {
                $select->setName('options['.$_option->getid().']');
                    // ->addOption('', $this->__('Please Select'));
            } else {
                $select->setName('options['.$_option->getid().'][]');
                $select->setClass('multiselect'.$require.' product-custom-option');
            }

            // This is a very specific case for Ring Size
            // $isMale = $isFemale = $hasNoPrice = false;
            // foreach ($_option->getValues() as $_value) {
            //     if ($_value->getTitle() == 'I' && $_value->getPrice() == 0.0000) {
            //         $isFemale = true;
            //     } 
            //     else if ($_value->getTitle() == 'M' && $_value->getPrice() == 0.0000) {
            //         $isMale = true;
            //     }

            //     if ($_value->getPrice() == 0.0000) {
            //         $hasNoPrice = true;
            //     }
            // } 

            foreach ($_option->getValues() as $_value) {
                $priceStr = $this->_formatPrice(array(
                    'is_percent'    => ($_value->getPriceType() == 'percent'),
                    'pricing_value' => $_value->getPrice(($_value->getPriceType() == 'percent'))
                ), false);
                $select->addOption(
                    $_value->getOptionTypeId(),
                    $_value->getTitle() . ' ' . $priceStr . '',
                    array('price' => $this->helper('core')->currencyByStore($_value->getPrice(true), $store, false))
                );

                // Set Default for the following cases:
                // Ring Size for Men = T, Women = M
                // Price for Custom Option is $0 and is the last, unless defaulted by Men or Women.
                // if ($_value->getTitle() == 'M' && $isFemale) {
                //     $select->setValue($_value->getOptionTypeId());  
                // }
                // else if ($_value->getTitle() == 'T' && $isMale) {
                //     $select->setValue($_value->getOptionTypeId());  
                // } 
                // else if ($_value->getPrice() == 0.0000 && $hasNoPrice && !$isFemale && !$isMale) {
                //     $select->setValue($_value->getOptionTypeId());  
                // }

                //not sure about this line

                if ($sku_code[0] == 'F') {
                    $select->setValue($configValue);
                }

                else if ($_value->getTitle() == 'M') {
                   $select->setValue($_value->getOptionTypeId());  
                }
                else if ($_value->getTitle() == 'T') {
                    $select->setValue($_value->getOptionTypeId());  
                } 
            }

            if ($_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_MULTIPLE) {
                $extraParams = ' multiple="multiple"';
            }
            if (!$this->getSkipJsReloadPrice()) {
                $extraParams .= ' onchange="opConfig.reloadPrice()"';
            }
            $select->setExtraParams($extraParams);

            if ($configValue) {
                $select->setValue($configValue);
            } 

            return $select->getHtml();
        }

        if ($_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_RADIO
            || $_option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_CHECKBOX
            ) {
            $selectHtml = '<ul id="options-'.$_option->getId().'-list" class="options-list">';
            $require = ($_option->getIsRequire()) ? ' validate-one-required-by-name' : '';
            $arraySign = '';
            switch ($_option->getType()) {
                case Mage_Catalog_Model_Product_Option::OPTION_TYPE_RADIO:
                    $type = 'radio';
                    $class = 'radio';
                    if (!$_option->getIsRequire()) {
                        $selectHtml .= '<li><input type="radio" id="options_' . $_option->getId() . '" class="'
                            . $class . ' product-custom-option" name="options[' . $_option->getId() . ']"'
                            . ($this->getSkipJsReloadPrice() ? '' : ' onclick="opConfig.reloadPrice()"')
                            . ' value="" checked="checked" /><span class="label"><label for="options_'
                            . $_option->getId() . '">' . $this->__('None') . '</label></span></li>';
                    }
                    break;
                case Mage_Catalog_Model_Product_Option::OPTION_TYPE_CHECKBOX:
                    $type = 'checkbox';
                    $class = 'checkbox';
                    $arraySign = '[]';
                    break;
            }
            $count = 1;
            foreach ($_option->getValues() as $_value) {
                $count++;

                $priceStr = $this->_formatPrice(array(
                    'is_percent'    => ($_value->getPriceType() == 'percent'),
                    'pricing_value' => $_value->getPrice($_value->getPriceType() == 'percent')
                ));

                $htmlValue = $_value->getOptionTypeId();
                if ($arraySign) {
                    $checked = (is_array($configValue) && in_array($htmlValue, $configValue)) ? 'checked' : '';
                } else {
                    $checked = $configValue == $htmlValue ? 'checked' : '';
                }

                $selectHtml .= '<li>' . '<input type="' . $type . '" class="' . $class . ' ' . $require
                    . ' product-custom-option"'
                    . ($this->getSkipJsReloadPrice() ? '' : ' onclick="opConfig.reloadPrice()"')
                    . ' name="options[' . $_option->getId() . ']' . $arraySign . '" id="options_' . $_option->getId()
                    . '_' . $count . '" value="' . $htmlValue . '" ' . $checked . ' price="'
                    . $this->helper('core')->currencyByStore($_value->getPrice(true), $store, false) . '" />'
                    . '<span class="label"><label for="options_' . $_option->getId() . '_' . $count . '">'
                    . $_value->getTitle() . ' ' . $priceStr . '</label></span>';
                if ($_option->getIsRequire()) {
                    $selectHtml .= '<script type="text/javascript">' . '$(\'options_' . $_option->getId() . '_'
                    . $count . '\').advaiceContainer = \'options-' . $_option->getId() . '-container\';'
                    . '$(\'options_' . $_option->getId() . '_' . $count
                    . '\').callbackFunction = \'validateOptionsCallback\';' . '</script>';
                }
                $selectHtml .= '</li>';
            }
            $selectHtml .= '</ul>';

            return $selectHtml;
        }
    }

}

1 Ответ

0 голосов
/ 02 апреля 2019

возможно я не правильно понимаю, но вы хотите увидеть, начинается ли sku_code с "f"?

EDIT:

if ($sku_code == 'F') { 
    $select->setValue($configValue); 
}

Попробуйте:

if (strpos($sku_code, 'F') === 0) { 
    $select->setValue($configValue); 
}

Или, возможно:

if (substr($sku_code, 0, 1) === 'F') { $select->setValue($configValue); }

Надеюсь, это поможет:)

...