Новое поле в ps_cart_product

Автор sus, 27 января 2016, 21:47:21

« назад - далее »

sus

Добрый вечер всем кто на форуме!
Прочитал на форуме по передаче значения с страницы продукта в поле базы  ps_cart_product.
Делал вроде все так-же с учетом советов по данной теме.

На странице продукта добавил переменную
<input type="text" name="razmer" id="quantity_razmer" class="text"  value="" ">

В ajax-cart.js  поставил
//for product page 'add' button...
$(document).on('click', '#add_to_cart button', function(e){
e.preventDefault();
ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null, $('#quantity_razmer').val() );
});

Ее видно она есть.

И вот тут тормознулся, пробовал как советы, прописывал в CartController.php
   public function init()
{...

$this->razmer = Tools::getValue('razmer');
Ее в контроллере не видно.


Прошу подскажите как получить
<input type="text" name="razmer" id="quantity_razmer" class="text"  value="" ">
в Cart.php
Все советы прочитал, пробовал но что-то не идет, недопонимаю.
Прову вашей помощи.
Спасибо!






coder

В базе еще нужно добавть поле для новой переменной.

sus

Да в базе это само собой.

sus

#3
Тут вопрос такой. В ajax-cart.js  ее видно заполнение есть
ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null, $('#quantity_razmer').val() );

Что дальше делать? Как в Cart.php ее получить. Имя - razmer id- quantity_razmer



sus

#5
Большое спасибо. Как раз по ним и делал.
Вроде делал все по выкладкам..
Я недавно изучаю престу, что-то не так у меня, вот мои действия..

Добавил в  ps_cart_product  поле  razmer
В карточке товара, product.tpl,  поле ввода name- razmer id - quantity_razmer тип текст
Поле формы добавления товара.

В контроллере CartController.php прописал получение значение из этого поля
$this->razmer = Tools::getValue('razmer');

В ajax-cart.js добавлена эта переменная quantity_razmer

//for product page 'add' button...
$(document).on('click', '#add_to_cart button', function(e){
e.preventDefault();
ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null, $('#quantity_razmer').val() );
});

Объявил переменную и прописал в классе Cart.php - razmer
/** @var string Object creation razmer */
public $razmer;

/**
* Update product quantity
*/
public function updateQty($razmer, $quantity, $id_product, $id_product_attribute = null, $id_customization = false,
$operator = 'up', $id_address_delivery = 0, Shop $shop = null, $auto_add_cart_rule = true)

Результат такой, в ajax-cart.js переменную  $('#quantity_razmer').val() - вижу,есть.
В CartController.php в $this->razmer = Tools::getValue('razmer') - пусто.
В Cart.php в $razmer - пусто.

В чем ошибка?
Помогите.
Спасибо.

DarinSr

Может у вас уже переопределены класс и контроллер?

Цитата: Виталий от 04 октября 2015, 13:56:29
Потому что нужно вносить измения в переопределнные класс и контроллер
/override/controllers/front/CartController.php
/override/classes/Cart.php

sus

Нет не переопределены. Там все нормально.

sus

#8
Добрый день!
По передаче данных вопрос закрыт.

Осталось одно, в Cart.php есть строка замены в базе данных

/* Delete product from cart */
if ($new_qty <= 0)
return $this->deleteProduct((int)$id_product, (int)$id_product_attribute, (int)$id_customization);
else if ($new_qty < $minimal_quantity)
return -1;
else

Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'cart_product`
SET `quantity` = `quantity` '.$qty.', `razmer` = '.(string)$razmer.', `date_add` = NOW()
WHERE `id_product` = '.(int)$id_product.
(!empty($id_product_attribute) ? ' AND `id_product_attribute` = '.(int)$id_product_attribute : '').'
AND `id_cart` = '.(int)$this->id.(Configuration::get('PS_ALLOW_MULTISHIPPING') && $this->isMultiAddressDelivery() ? ' AND `id_address_delivery` = '.(int)$id_address_delivery : '').'
LIMIT 1'
);


Значение переменной $razmer есть, в строке
SET `quantity` = `quantity` '.$qty.', `razmer` = '.(string)$razmer.', `date_add` = NOW()
но запись производится только если значение число, то-есть если
$razmer = '123456';
То запись есть, если
$razmer = 'Нет записи';
То выдает ошибку сервера.

Невозможно добавить товар в корзину.
textStatus: 'ошибка'
errorThrown: 'Внутренняя ошибка сервера'
свойство responsetext:
'Нет записи'


Параметры
`razmer` varchar(200)
В чем ошибка.
Спасибо!


DarinSr

В классе как декларировали $razmer ?

sus


sus

Ставлю $razmer = 'hjhkk';
перед
Db::getInstance()->execute('
выдает ошибку.
Ставлю  $razmer = '1234';
все нормально.

DarinSr

Цитата: sus от 29 января 2016, 11:30:36
Как class="text"
Полностью как это выглядит?
'razmer' => array('type' => self::TYPE_STRING /* 'validate' => 'проверка есть? ' */ )

sus

'razmer' =>array('type' => self::TYPE_STRING, 'size' => 200)

sus

Самое интересное что в
/* Add product to the cart */
elseif ($operator == 'up')
         {.........
$result_add = Db::getInstance()->insert('cart_product', array(
               'id_product' =>          (int)$id_product,
               'id_product_attribute' =>    (int)$id_product_attribute,
               'id_cart' =>             (int)$this->id,
               'id_address_delivery' =>    (int)$id_address_delivery,
               'id_shop' =>             $shop->id,
               'quantity' =>             (int)$quantity,
               'razmer' =>             $razmer,      
               'date_add' =>             date('Y-m-d H:i:s')
            ));

Все нормально, запись в 'razmer' текст.