Автор Тема: Получение произвольной переменной из product.tpl в cart.php  (Прочитано 366 раз)

07 Октября 2015, 12:53:40
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
За страницу продукта отвечают
ProductController.php
product.php
product.tpl
За управление корзиной покупателя
CartController.php
cart.php
ajax-cart.js
shopping-cart-product-line.tpl
На странице продукта product.tpl имеется произвольная текстовая  переменная textklient  для ввода информации,  это не поле в таблице базы, а простое поле ввода. Эти данные нужны для последующего сравнения в cart.php
При нажатии в корзину, производиться запись, соответственно начинают работать модули отвечающие за управление корзиной
Вопрос: Как получить значение этой переменной textklient  из product.tpl  при записи в корзину в cart.php,
что-бы там ее сравнить.
Есть кастомизация,но это не устраивает.Нужно сравнить свою переменную.
07 Октября 2015, 13:19:48
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 13147
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
/themes/default-bootstrap/js/modules/blockcart/ajax-cart.js
$(document).on('click', '#add_to_cart button', function(e){
        // значение из поля с ид=textklient
        $('#textklient').val();
        // значение из поля с class=textklient
        $('.textklient').val();
        // сравнить переменные
        if ($('#textklient').val() == 'ваша переменная')
{
07 Октября 2015, 13:42:41
Ответ #2
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо за ответ.
Но хотелось бы понять...
Вы подсказали сравнение в ajax-cart.js.
А в cart.php эту переменную как получить? Мне ее надо там получить и сравнить а не ajax-cart.js
В cart.php  типа так
if ($this->textklient)
Или
$this->context->cookie->textklient;
Или
$this->context->textklient;
Как то так. Это возможно?
07 Октября 2015, 13:53:18
Ответ #3
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Я прописал в сюда в конец
   $(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, $('#textklient').val());
      });

А теперь как в cart.php ее получить $('#textklient').val() или как..
07 Октября 2015, 14:00:20
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 13147
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вы изменили объект ajaxCart.add.Тогда нужно менять и описание объекта
add : function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist, myvar, instructions, instructions_id){передача в перемненной в контроллер корзины
$.ajax({
type: 'POST',
headers: { "cache-control": "no-cache" },
url: baseUri + '?rand=' + new Date().getTime(),
async: true,
cache: false,
dataType : "json",
data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&my_var=' + myvar + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): ''),
в контроллере корзины получите эту переменную.
07 Октября 2015, 14:21:21
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32991
  • Репутация: +26759/-0
    • Просмотр профиля
07 Октября 2015, 14:34:35
Ответ #6
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Да вы правы. Обсуждали. Но там другой момент.
Добавление данных в поле базы в таблицу ps_cart_product, новое добавленное поле
Это все получил.
Но этот момент без формирования поля в базе и записи в базу, а просто сравнение поля из страници товара в cart.php Я попробовал проделать так-же как и в первом обсуждении как у меня производиться запись данных, - но без формирования и записи, у меня не получается. Решил уточнить почему, где ошибка . Делаю вроде так-же.
Может что не так.. Хотя вроде все одинаково.
07 Октября 2015, 14:39:33
Ответ #7
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32991
  • Репутация: +26759/-0
    • Просмотр профиля
Файл /classes/Cart.php описывает модель корзины. В нем не нужно что-то сравнивать. Сравнивать нужно в контроллере /controllers/front/CartController.php. В зависимости от результата сравниния производить какие-то действия.
07 Октября 2015, 15:22:53
Ответ #8
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Да, Вы опять правы, но вот и проблема что надо сравнение сделать в Cart.php
В нем тоже сравнения- например кастомизация.
if ($product->customizable)
Понятно что это жестко в параметрах продукта.
Но хотелось получить также для сравнения свою переменную , как разовую .. при каждой записи
Как пример так
if ($product->customizable == моя переменная )
Тогда как? Возможно?
07 Октября 2015, 15:42:35
Ответ #9
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32991
  • Репутация: +26759/-0
    • Просмотр профиля
Цитировать
if ($product->customizable == моя переменная )
Тогда как? Возможно?
Можно и так, тогда нужно описать вашу переменную в классе Product.php

Что это за переменная? Она где-то хранится? Откуда она берется?
07 Октября 2015, 15:53:10
Ответ #10
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Переменная на странице  карточке товара
<input type="text" name="textklient" id="textklient" class="text"  value="" >
Она, ни где не храниться, ни где не записывается, гаситься после записи в корзину.
Каждый раз при открытии страницы товара (другого товара), она разная.
Не связана ни с какими параметрами товара. Просто типа определенного кода кода.
07 Октября 2015, 16:21:16
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 13147
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если сравнивать вам нужно в Cart.php создайте метод для сравнения
public function myMethod($var_template, $this->'переменная из класса Cart')
{
        //сравнение переменных
        if(...) $res = '...';
        // возврат результата
        return $res;
}
После это можете вызывать этот метод в контроллере CartController.php и сравнивать любую переменную класса Cart с переданной переменной из шаблона product.tpl.
07 Октября 2015, 16:43:12
Ответ #12
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо.Но подробней можно, применительно к моим данным.
<input type="text" name="textklient" id="textklient" class="text"  value="" >
Я толко начал с престой.... Хочеться самому добиться, но учиться у хороших людей ни когда не поздно.
Куда прописать этот метод и как получить данную textklient в Cart.php
07 Октября 2015, 16:46:51
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 13147
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
С какой переменной нужно сравнить textklient?
07 Октября 2015, 17:38:28
Ответ #14
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нет , не сравнивать а получить.
А сравнивать с  пусто, но только в самом Cart.php
Ну как то так..
if ($textklient)
,,,чтото делаем,,,