Magento 1.9根据库存数量更改自定义选项值 [英] Magento 1.9 change custom option value depending on stock number

查看:60
本文介绍了Magento 1.9根据库存数量更改自定义选项值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有自定义代码,用于确定是否存在自定义代码值,以及是否确实要在产品配置中的默认排序顺序选项上选择此选项.

I have custom code that determines if a custom code value exists and if it does to select this option over the default sort order option in the product config.

我想要做的是进一步添加逻辑,即如果产品sku以"F"开头,那么它将显示该产品的默认排序顺序值.

What I am wanting to do is further add logic that if the product sku starts with "F" then it will show the default sort order value for that product.

自定义代码在此文件中.

The custom code is in this file..

app \ code \ local \ Mage \ Catalog \ Block \ Product \ View \ Options \ Type \ Select.php

app\code\local\Mage\Catalog\Block\Product\View\Options\Type\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'开头,则指定默认值.

This code is ok as is.. but what I am wanting to add to the statements is that if the Stock code starts with 'F' then assign the default value.

类似

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

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

其中将显示该选项的默认排序顺序值.

where this will show the default sort order value for the option..

我似乎无法正常工作.

任何帮助编码的内容,您都将获得即时的赞誉和良好的业力!

Any help coding this and you get instant kudos and good Karma!

欢呼

更新这是Select.php的完整代码

update Here is full code from 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;
        }
    }

}

推荐答案

也许我听不懂,但是您想看看sku_code是否以"f"开头?

maybe I don't understand right but you want to see if the sku_code starts with "f"?

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

希望它会有所帮助:)

这篇关于Magento 1.9根据库存数量更改自定义选项值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆