Пожалуйста, укажите опции продукта в Magento 1.9.2

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

Укажите параметры продукта.

Теперь я отслеживал код и работал над ним, пока не добрался сюда.

приложение/код/ядро/Mage/Checkout/контроллеры/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);

предполагается перейти к этому файлу

приложение/код/ядро/Mage/Checkout/Model/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>

person Alaa M. Jaddou    schedule 16.04.2017    source источник


Ответы (2)


Укажите параметры продукта.

Эта ошибка возникает, когда у вашего продукта есть некоторые настраиваемые параметры, которые необходимы, но не выбраны во время добавления в корзину, или в случае, если настраиваемые параметры продукта (например, цвет или размер) не выбраны при добавлении в корзину. Убедитесь, что вы правильно создали настраиваемые параметры.

Вы создали продукт путем импорта, потому что настраиваемые параметры не импортируются профилем импорта magento. Вам нужно проверить эту вещь в вашем admin-> catalog-> product открыть продукт, который не работает. Вам нужно проверить, есть ли у продукта настраиваемые параметры или нет.

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

Если у вас нет никаких настроек для настраиваемого продукта, этой большой операции будет достаточно, чтобы найти решение вашей проблемы.

person Surendra Mishra    schedule 28.04.2017
comment
Большое спасибо за ваш комментарий, что здесь происходит, так это то, что мой настраиваемый параметр имеет параметр настраиваемого размера, и когда я выбираю его, выбираю количество и нажимаю добавить в корзину, возникает эта ошибка, я проверил параметр конфигурации, и я проверил продукт и все мне кажется правильным. - person Alaa M. Jaddou; 28.04.2017
comment
и я решаю проблему здесь, со всеми моими исследованиями и проверкой всего кода в файлах phtml. пожалуйста, проверьте обновление и ответ, который я дал. - person Alaa M. Jaddou; 28.04.2017

Это было проблемой для меня и заняло у меня много времени, так как я новичок в magento.

добавление этой строки в начало файла

приложение/дизайн/интерфейс/вашатема/по умолчанию/шаблон/каталог/продукт/представление/тип/параметры/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>

И ТЕПЕРЬ ВСЕ РАБОТАЕТ ОЧЕНЬ ХОРОШО

person Alaa M. Jaddou    schedule 28.04.2017