У меня есть сервер 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 / Модель / 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>
Пожалуйста, укажите вариант (ы) продукта.
Эта ошибка возникает, когда у вашего продукта есть некоторые пользовательские параметры, которые требуются, но не выбираются во время добавления в корзину, или если настраиваемые параметры продукта (например, цвет или размер) не выбираются при добавлении в корзину. Убедитесь, что вы создали настраиваемые параметры правильно.
Вы создали продукт путем импорта, потому что настраиваемые параметры не импортируются профилем импорта magento. Вы должны проверить эту вещь в вашем админ-> каталог-> продукт открыть продукт, который не работает. Вы должны проверить, что продукт имеет некоторые настраиваемые параметры или нет.
если у продукта есть варианты, вам нужно проверить, что продукт, который назначен для этой опции, должен быть включен и в наличии для этого магазина.
Если у вас нет настроек настраиваемого продукта, этой операции будет достаточно, чтобы найти решение для вашей проблемы.
Это было проблемой для меня и отнимало у меня много времени, так как я новичок в 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>
И сейчас все работает очень хорошо