Автор Тема: Новое поле в ps_cart_product  (Прочитано 193 раз)

27 Января 2016, 21:47:21
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый вечер всем кто на форуме!
Прочитал на форуме по передаче значения с страницы продукта в поле базы  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
Все советы прочитал, пробовал но что-то не идет, недопонимаю.
Прову вашей помощи.
Спасибо!





28 Января 2016, 11:16:40
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32988
  • Репутация: +26759/-0
    • Просмотр профиля
В базе еще нужно добавть поле для новой переменной.
28 Января 2016, 11:18:43
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Да в базе это само собой.
28 Января 2016, 11:23:17
Ответ #3
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Тут вопрос такой. В 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

28 Января 2016, 11:34:32
Ответ #4
28 Января 2016, 17:47:55
Ответ #5
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Большое спасибо. Как раз по ним и делал.
Вроде делал все по выкладкам..
Я недавно изучаю престу, что-то не так у меня, вот мои действия..

Добавил в  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 - пусто.

В чем ошибка?
Помогите.
Спасибо.
28 Января 2016, 17:57:31
Ответ #6
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85945
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Может у вас уже переопределены класс и контроллер?

Потому что нужно вносить измения в переопределнные класс и контроллер
/override/controllers/front/CartController.php
/override/classes/Cart.php
28 Января 2016, 18:45:09
Ответ #7
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нет не переопределены. Там все нормально.
29 Января 2016, 11:00:59
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день!
По передаче данных вопрос закрыт.

Осталось одно, в 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) В чем ошибка.
Спасибо!

29 Января 2016, 11:17:05
Ответ #9
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85945
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В классе как декларировали $razmer ?
29 Января 2016, 11:30:36
Ответ #10
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
29 Января 2016, 11:39:51
Ответ #11
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ставлю $razmer = 'hjhkk';
перед
Db::getInstance()->execute('
выдает ошибку.
Ставлю  $razmer = '1234';
все нормально.
29 Января 2016, 12:04:37
Ответ #12
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85945
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Как class="text"
Полностью как это выглядит?
'razmer' => array('type' => self::TYPE_STRING /* 'validate' => 'проверка есть? ' */ )
29 Января 2016, 12:27:54
Ответ #13
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
'razmer' =>array('type' => self::TYPE_STRING, 'size' => 200)
29 Января 2016, 12:54:26
Ответ #14
  • Фрилансер
  • *
  • Сообщений: 164
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Самое интересное что в
/* 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' текст.