1. Нужно нажимать "Сохранить" перед тем как отправить товар в корзину (после нажатия "сохранить" происходит перезагрузка страницы, и становится возможным добавить в корзину).
Выполнить доработку для автомат сохранения данного поля при нажатии на кнопку "добавить в корзину".
Необходимо немного переписать
ajax-cart.js (забирать данные из необходимых полей) и в файле
/controllers/front/CartController.php до:
Код:
if (!$product->hasAllRequiredCustomizableFields() && !$this->customization_id)
добавить:
Код:
if ($field_ids = $product->getCustomizationFieldIds())
{
$authorized_text_fields = array();
foreach ($field_ids as $field_id)
if ($field_id['type'] == Product::CUSTOMIZE_TEXTFIELD)
$authorized_text_fields[(int)$field_id['id_customization_field']] = 'textField'.(int)$field_id['id_customization_field'];
$indexes = array_flip($authorized_text_fields);
foreach ($_POST as $field_name => $value)
if (in_array($field_name, $authorized_text_fields) && $value != '')
{
if (!Validate::isMessage($value))
$this->errors[] = Tools::displayError('Invalid message');
else
$this->context->cart->addTextFieldToProduct($product->id, $indexes[$field_name], Product::CUSTOMIZE_TEXTFIELD, $value);
}
else if (in_array($field_name, $authorized_text_fields) && $value == '')
$this->context->cart->deleteCustomizationToProduct((int)$this->product->id, $indexes[$field_name]);
}
2. Данное поле отображается только на странице товара. Хотелось бы что бы оно было или в "быстром просмотре" товара или в списке товаров (product-list.tpl), например под названием товара.
Добавить отображение полей в файл
product-list.tpl:
Код:
{if $product.customizable}
<div class="customizableProductsText">
<h5 class="product-heading-h5">{l s='Text'}</h5>
<ul id="text_fields">
{foreach from=$product.customizationFields item='field' name='customizationFields'}
{if $field.type == 1}
<li class="customizationUploadLine{if $field.required} required{/if}">
<label for ="textField{$customizationField}">
{assign var='key' value='textFields_'|cat:$product.id_product|cat:'_'|cat:$field.id_customization_field}
{if !empty($field.name)}
{$field.name}
{/if}
{if $field.required}<sup>*</sup>{/if}
</label>
<textarea name="textField{$field.id_customization_field}" class="form-control customization_block_input" id="textField{$customizationField}" rows="3" cols="20">{strip}
{if isset($textFields.$key)}
{$textFields.$key|stripslashes}
{/if}
{/strip}</textarea>
</li>
{counter}
{/if}
{/foreach}
</ul>
</div>
{/if}
и в файле
/controllers/front/CategoryController.php
после:
Код:
$this->assignProductList();
добавить:
Код:
foreach ($this->cat_products as &$product)
{
if ($product['customizable'])
{
$p = new Product($product['id_product'], true, $this->context->language->id, $this->context->shop->id);
$product['customizationFields'] = $p->getCustomizationFields($this->context->language->id);
}
}