“请在Magento 1.9.2中指定产品的选项”

时间:2017-04-16 10:14:46

标签: php magento magento-1.9 configurable-product

我有一台Magento 1.9服务器并且产品已经开启,简单产品添加到购物车中工作顺利而且很好,但是当我尝试添加可配置产品时,此消息会返回。

  

请指定产品的选项。

现在我正在跟踪代码并继续处理它,直到我到达这里。

  

应用程序/代码/核心/法师/结帐/控制器/ CartController

在此文件中,此代码用于添加产品:

/**
 * Add product to shopping cart action
 *
 * @return Mage_Core_Controller_Varien_Action
 * @throws Exception
 */
public function addAction()
{
    if (!$this->_validateFormKey()) {
        $this->_goBack();
        return;
    }
    $cart   = $this->_getCart();
    $params = $this->getRequest()->getParams();

    try {
        if (isset($params['qty'])) {
            $filter = new Zend_Filter_LocalizedToNormalized(
                array('locale' => Mage::app()->getLocale()->getLocaleCode())
            );
            $params['qty'] = $filter->filter($params['qty']);


        }

        $product = $this->_initProduct();
        $related = $this->getRequest()->getParam('related_product');


        /**
         * Check product availability
         */
        if (!$product) {
            $this->_goBack();
            return;
        }
        echo 'here';
        ?>
            <pre>
                <?php print_r($params); ?>
            </pre>
        <?php
            exit;
        ?>
        <?php

        $cart->addProduct($product, $params);
        if (!empty($related)) {
            $cart->addProductsByIds(explode(',', $related));
        }

        $cart->save();

        $this->_getSession()->setCartWasUpdated(true);

        /**
         * @todo remove wishlist observer processAddToCart
         */
        Mage::dispatchEvent('checkout_cart_add_product_complete',
            array('product' => $product, 'request' => $this->getRequest(), 'response' => $this->getResponse())
        );

        if (!$this->_getSession()->getNoCartRedirect(true)) {
            if (!$cart->getQuote()->getHasError()) {
                $message = $this->__('%s was added to your shopping cart.', Mage::helper('core')->escapeHtml($product->getName()));
                $this->_getSession()->addSuccess($message);
            }
            $this->_goBack();
        }
    } catch (Mage_Core_Exception $e) {
        if ($this->_getSession()->getUseNotice(true)) {
            $this->_getSession()->addNotice(Mage::helper('core')->escapeHtml($e->getMessage()));
        } else {
            $messages = array_unique(explode("\n", $e->getMessage()));
            foreach ($messages as $message) {
                $this->_getSession()->addError(Mage::helper('core')->escapeHtml($message));
            }
        }

        $url = $this->_getSession()->getRedirectUrl(true);
        if ($url) {
            $this->getResponse()->setRedirect($url);
        } else {
            $this->_redirectReferer(Mage::helper('checkout/cart')->getCartUrl());
        }
    } catch (Exception $e) {
        $this->_getSession()->addException($e, $this->__('Cannot add the item to shopping cart.'));
        Mage::logException($e);
        $this->_goBack();
    }
}

在这段代码中,我使用这个简单的代码来实现我的位置以及我拥有的数据。

echo 'here';
?>
    <pre>
        <?php print_r($params); ?>
    </pre>
<?php
    exit;
?>
<?php

这个简单的代码返回我对可配置产品的参数。

Array
(
    [uenc] => aHR0cDovL3N0YWdpbmcudmF0dHJlbmEuY29tL2luZGV4LnBocC9nZW5lcmFsLWplYW5zMTMuaHRtbA,,
    [product] => 65
    [form_key] => qIGyp6YDp7kQjibA
    [related_product] => 
    [super_attribute] => Array
        (
            [168] => M
        )

    [qty] => 1
)

这意味着选择了所有属性,但是当我到达

时,在这个简单的代码之后
$cart->addProduct($product, $params);

它假设要转到此文件

  

应用程序/代码/核心/法师/结帐/型号/ Cart.php

关于此功能

/**
 * Add product to shopping cart (quote)
 *
 * @param   int|Mage_Catalog_Model_Product $productInfo
 * @param   mixed $requestInfo
 * @return  Mage_Checkout_Model_Cart
 */
public function addProduct($productInfo, $requestInfo=null)
{
    $product = $this->_getProduct($productInfo);
    $request = $this->_getProductRequest($requestInfo);

    $productId = $product->getId();

    if ($product->getStockItem()) {
        $minimumQty = $product->getStockItem()->getMinSaleQty();
        //If product was not found in cart and there is set minimal qty for it
        if ($minimumQty && $minimumQty > 0 && $request->getQty() < $minimumQty
            && !$this->getQuote()->hasProductId($productId)
        ){
            $request->setQty($minimumQty);
        }
    }

    if ($productId) {
        try {
            $result = $this->getQuote()->addProduct($product, $request);
        } catch (Mage_Core_Exception $e) {
            $this->getCheckoutSession()->setUseNotice(false);
            $result = $e->getMessage();
        }
        /**
         * String we can get if prepare process has error
         */
        if (is_string($result)) {
            $redirectUrl = ($product->hasOptionsValidationFail())
                ? $product->getUrlModel()->getUrl(
                    $product,
                    array('_query' => array('startcustomization' => 1))
                )
                : $product->getProductUrl();
            $this->getCheckoutSession()->setRedirectUrl($redirectUrl);
            if ($this->getCheckoutSession()->getUseNotice() === null) {
                $this->getCheckoutSession()->setUseNotice(true);
            }
            Mage::throwException($result);
        }
    } else {
        Mage::throwException(Mage::helper('checkout')->__('The product does not exist.'));
    }

    Mage::dispatchEvent('checkout_cart_product_add_after', array('quote_item' => $result, 'product' => $product));
    $this->getCheckoutSession()->setLastAddedProductId($productId);
    return $this;
}

但是当我尝试echo此功能中的任何内容时,它都不会显示,并会显示并重定向到包含此消息的可配置产品页面:

  

请指定产品的选项。

更新1:

$_helper = $this->helper('catalog/product');
$_product = $this->getProduct();
$_attributes = Mage::helper('core')->decorateArray($this->getAllowAttributes());
<?php if (count($_attributes) > 0):?>
    <dl>
    <?php foreach($_attributes as $_attribute):?>
    <div class="row">
        <h2 class="gws_p_title" style="border-top:  none;"><?php echo $this->__($_attribute->getLabel()) ?><em>*</em></h2>
        <dd class="last">
            <div class="input-box">
                <select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select js-example-basic-single">
                    <option><?php echo $this->__('Choose an Option...') ?></option>
                  </select>
              </div>
        </dd>
        </div>
    <?php endforeach; ?>
    </dl>

2 个答案:

答案 0 :(得分:1)

请指定产品的选项。

如果您的产品有一些必需的自定义选项,但在添加到购物车时没有选择,或者在添加到购物车时未选择可配置的产品可配置选项(如颜色或尺寸),则会出现此错误。确保已正确创建可配置选项。

您是否通过导入创建了产品,因为magento导入配置文件不会导入可配置选项。你需要在你的管理中检查这个东西 - > catalog-&gt;产品打开不工作的产品。您需要检查该产品是否具有一些可配置选项。

如果产品有选项,则需要检查分配给该选项的产品是否应该为该商店启用并有库存。

如果您对可配置产品没有任何自定义,那么这么多操作就足以为您的问题找到解决方案。

答案 1 :(得分:1)

这对我来说是个问题,因为我刚接触到magento,所以我需要花很多时间。

在文件前面添加此行

  

应用程序/设计/前端/ yourtheme /默认/模板/目录/产品/视图/类型/选项/ cofigurable.phtml

$attValConfig = $_product->getTypeInstance(true)->getConfigurableAttributesAsArray($_product);

所以在搜索并检查我的每个代码之后,我在这些行中找到了错误。

<select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select js-example-basic-single">
    <option><?php echo $this->__('Choose an Option...') ?></option>
</select>

它应该像这样

<select name="super_attribute[<?php echo $_attribute->getAttributeId() ?>]" id="attribute<?php echo $_attribute->getAttributeId() ?>" class="required-entry super-attribute-select js-example-basic-single">
<option><?php echo $this->__('Choose an Option...') ?></option>
<?php
foreach ($attValConfig as $values) {
    foreach ($values['values'] as $value) {
       ?>
       <option value="<?php echo $value['value_index']; ?>"><?php echo $this->__($value['label']); ?></option>
       <?php

    }
}
?>
</select>

现在一切都很精细