Автор Тема: Передача своих параметров в tpl файл шаблона  (Прочитано 316 раз)

22 Июня 2015, 18:45:42
  • Новичок
  • *
  • Сообщений: 23
  • Репутация: +0/-0
  • Вольный фрилансер
    • Просмотр профиля
    • Интернет-магазин ToBeMom
Доброе время суток, уважаемые форумчане. Надеюсь на вашу помощь...

Проблема в следующем: магазин на престе 1.6, несколько товаров в корзине. Один из товаров до момента нажатия кнопки метода оплаты и формирования заказа имелся в 1-м экземпляре, и был оплачен другим пользователем (одновременно закинули его в корзину), соответственно списался из количества доступных товаров, а в корзине текущего пользователя светится в наличии. Текущий пользователь переходит к оплате, оплачивает, и ждет доставки. Но ведь это не правильно!? :-\

Идея по решению проблемы: на 5-м шаге оформления заказа, где пользователю предоставляются варианты оплаты, необходимо осуществить проверку наличия товаров в столбце списка товаров "наличие",и если хотя бы один товар из списка имеет статус "нет в наличии"  - спрятать кнопки оплаты, а вместо них вывести поле с инструкциями для пользователя...

Как прятать/выводить - знаю, как осуществлять проверку в .tpl разбираюсь. А вот как и где хранить сведения о наличии товаров - знаний не хватает! Прошу помощи!

Возможно ли ввести переменную (массив) в которую при формировании списка товаров заказа будут записываться "ОК" или "NO" в соответствии  с наличием, а затем проверка:   если массив содержит "NO" - прячем кнопки.

Ваши идеи? Что и где можно подправить?  ???
22 Июня 2015, 18:59:25
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 13623
  • Репутация: +14563/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Пока заказ не завершен количество не обновится. После того как покупатель нажал подтвердить заказ происходит валидация заказа. При положительном ответе будет созранен заказ и списано количество товара. Количество и так проверяется при валидации, поэтому проверять при выборе оплаты нет необходимости. Вариантов может быть много, покупатель выбрал метод оплаты, пока ждал ответ сервера, кто-то купит товар.
Единсвеное что можно сделать, это блокировку товара при помещении в корзину. Но тогда будут проблемы с брошенными корзинами.
22 Июня 2015, 19:14:55
Ответ #2
  • Новичок
  • *
  • Сообщений: 23
  • Репутация: +0/-0
  • Вольный фрилансер
    • Просмотр профиля
    • Интернет-магазин ToBeMom
Пока заказ не завершен количество не обновится. После того как покупатель нажал подтвердить заказ происходит валидация заказа. При положительном ответе будет созранен заказ и списано количество товара. Количество и так проверяется при валидации, поэтому проверять при выборе оплаты нет необходимости. Вариантов может быть много, покупатель выбрал метод оплаты, пока ждал ответ сервера, кто-то купит товар.
Единсвеное что можно сделать, это блокировку товара при помещении в корзину. Но тогда будут проблемы с брошенными корзинами.

Суть Вашего ответа понятна!

Но данный факт случился при демонстрации работоспособности магазина заказчику с одновременным заказам одно товара в наличии. Причем пока первый раздумывал и оценивал красоту оформления страницы с 5-м шагом, второй сотрудник уже оплатил товары собранные в корзине. Тут первый опомнился и нажал кнопку платежного модуля, ввел реквизиты, оплатил, получил подтверждение, и обрадывался. Но в управлении запасами напротив этого товара запись "-1"/

Вот теперь и требуется ПОЛНОСТЬЮ исключить возможность нажатия кнопки оплаты, если хотябы один товар корзины "Не в наличии"
22 Июня 2015, 20:08:08
Ответ #3
  • Новичок
  • *
  • Сообщений: 23
  • Репутация: +0/-0
  • Вольный фрилансер
    • Просмотр профиля
    • Интернет-магазин ToBeMom
Подскажите, хотя бы, можно это реализовать средствами только правки в .tpl или надо закладывать логику и параметры в php контроллер?
Надо ли делать запрос к базе и проверять остатки там?

А то в описанной ситуации получается что деньги списаны, статус ОПЛАЧЕНО, а пользователю ждать неделю, пока поставщик отгрузит товар, и пока администраторы магазина отправят его клиенту ...
23 Июня 2015, 09:39:43
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 13623
  • Репутация: +14563/-1
  • Сообщество PrestaShop
    • Просмотр профиля
В 1-м шаблоне tpl этого не сделать. Нужно вносить изменния в
/controllers/front/OrderController.php
/classes/PaymentModule.php
и в шаблонах tpl платежных модулей.
23 Июня 2015, 09:56:14
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86326
  • Репутация: +25417/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Достаточно в классе PaymentModule.php в методе validateOrder.
23 Июня 2015, 13:08:53
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 20885
  • Репутация: +25279/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Подскажите, хотя бы, можно это реализовать средствами только правки в .tpl или надо закладывать логику и параметры в php контроллер?
Надо ли делать запрос к базе и проверять остатки там?

А то в описанной ситуации получается что деньги списаны, статус ОПЛАЧЕНО, а пользователю ждать неделю, пока поставщик отгрузит товар, и пока администраторы магазина отправят его клиенту ...
Для проверки остатков запрос в базу необходим. Также нужно еще проверять правила корзины, разрешено или нет покупать товары с нулевым остатком.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
24 Июня 2015, 18:20:20
Ответ #7
  • Новичок
  • *
  • Сообщений: 23
  • Репутация: +0/-0
  • Вольный фрилансер
    • Просмотр профиля
    • Интернет-магазин ToBeMom
Спасибо за советы!  :)

Для проверки остатков запрос в базу необходим. Также нужно еще проверять правила корзины, разрешено или нет покупать товары с нулевым остатком.
Товары с нулевым остатком покупать разрешено для некоторых позиций.

Достаточно в классе PaymentModule.php в методе validateOrder.

А можно поподробнее? Что и куда писать?   :-\

В указанном методе класса нашел строки (~ 330)
               // Creating order
               $result = $order->add();
Так понимаю на этом моменте происходит создание заказа.

И далее редирект формы с параметрами на страницу оплаты платежного модуля
24 Июня 2015, 19:59:03
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 33026
  • Репутация: +26761/-0
    • Просмотр профиля
После загрузки объекта корзины
$this->context->cart = new Cart($id_cart);добавляйте проверку количества, если количестов меньше нуля возврат ошибки.
24 Июня 2015, 20:10:06
Ответ #9
  • Новичок
  • *
  • Сообщений: 23
  • Репутация: +0/-0
  • Вольный фрилансер
    • Просмотр профиля
    • Интернет-магазин ToBeMom
После загрузки объекта корзины
$this->context->cart = new Cart($id_cart);добавляйте проверку количества, если количестов меньше нуля возврат ошибки.

но ведь это будет проверка общего количества товаров в корзине а мне нужно количество товаров в каждой позиции, или я что то не так понимаю в коде?  :-\
24 Июня 2015, 20:59:48
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 1280
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Заказ создается из корзины. Поэтому после инициализации объекта корзина в в методе validateOrder. можно получить все товары и сделать проверку по каждой позиции.
28 Июня 2015, 21:31:25
Ответ #11
  • Новичок
  • *
  • Сообщений: 23
  • Репутация: +0/-0
  • Вольный фрилансер
    • Просмотр профиля
    • Интернет-магазин ToBeMom
Заказ создается из корзины. Поэтому после инициализации объекта корзина в в методе validateOrder. можно получить все товары и сделать проверку по каждой позиции.

Приношу извинение за нескромную просьбу, но можно ли всё это поподробнее и желательно в коде?  :) Своими силами не осилить ...
29 Июня 2015, 09:05:25
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 2708
  • Репутация: +64/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Могу сделать модуль для проверки количества заказов. Если сами не справитесь, обращайтесь.