Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Отправка формы при заказе


Recommended Posts

Добрый день!

Прошу помощи в реализации покупки в кредит на сайте.

Дано:

ocStore 1.5.5.1.2

Модуль Simple

Что нужно сделать:

При выборе варианта оплаты "В кредит" и нажатии кнопки оформления заказа, помимо создания заказа, отправляется форма со следующими значениями:

По каждому продукту в корзине:

  • Наименование
  • Стоимость
  • Количество

 Общее:

  • Сумма заказа (без доставки)
  • Телефон покупателя (не критично)

 

После отправки формы происходит переход на страницу оформления кредита, которая указана в action формы.

Это можно сделать как открыв ее в новом окно, а в старом показать страницу успешного заказа или не показывать окно успешного заказа, а сразу переходит к странице оформления кредита.

 

В данный момент, я думаю над 2 вариантами решения: 

1. Модуль оплаты - пустышка(типа клон оплаты при получении только с другим названием) и прописывание формочки вручную в simplecheckout.tpl и цепляние ее к кнопке оформления заказа.

Уже понял как получить в форму данные о товарах и сумме заказа. Телефон пока достать не могу. Плюс не совсем понимаю как привязать это корректно к кнопке оформления заказа.

Вопросы: как получить в форму телефон клиента, если он заполнен? Как привязать второе действие к кнопке "Оформить заказ"?

 

2. Создание модуля оплаты(переделка из какого-то другого) который будет эту функцию выполнять.

Пока даже не знаю как подступиться. Плохо понимаю как работает модуль оплаты, т.к. в php знаю только самые основы и многое там для меня непонятно.

Если подскажете как реализовать быстро, буду благодарен.

 

 

Надіслати
Поділитися на інших сайтах


14 минут назад, afinalux сказал:

Плохо понимаю как работает модуль оплаты,

 

14 минут назад, afinalux сказал:

в php знаю только самые основы

 

14 минут назад, afinalux сказал:

Если подскажете как реализовать быстро,

в связи в выше перечисленным, заказать написание у профессионала

Надіслати
Поділитися на інших сайтах

19 минут назад, afinalux сказал:

Вопросы: как получить в форму телефон клиента, если он заполнен? Как привязать второе действие к кнопке "Оформить заказ"?

получить все нужные данные на странице success после создания заказа и отобразить форму

Надіслати
Поділитися на інших сайтах


21 час назад, fanatic сказал:

 

 

в связи в выше перечисленным, заказать написание у профессионала

Спасибо, кэп =)

Если бы хотел, я это сделал бы сразу.

В данный момент мне хочется разобраться как это работает, чтобы в дальнейшем решать такие задачи.

С карточке товара и к категории же привязал, значит к корзине тоже смогу подцепить.

Мне не нужно пошаговую инструкцию здесь писать.

Мне будет достаточно примерно такого ответа:

"Возьми стандартный контроллер оплаты такой-то, там в массиве $somearray содержится инфа о покупателе, а в массиве $coolarray содержится инфа о товарах и сумме заказа....."

А дальше, если по ходу вопросы возникнут, я спрошу конкретно.

 

21 час назад, thentru сказал:

получить все нужные данные на странице success после создания заказа и отобразить форму

Либо я не понял ответа, либо вы не поняли вопрос.

Еще раз проверил, на страницу sucsess не передаются данные из корзины.

Мне не нужно заставлять человека заполнять форму еще раз.

Мне нужно передать в форму уже заполненные данные из корзины.

Надіслати
Поділитися на інших сайтах


13 минут назад, afinalux сказал:

Мне нужно передать в форму уже заполненные данные из корзины.

Открываете файл catalog\controller\checkout\success.php
в нем есть $this->session->data['order_id']
это айди, созданного заказа - по нему и получаете информацию о заказе для вывода в форму

Надіслати
Поділитися на інших сайтах


35 минут назад, thentru сказал:

Открываете файл catalog\controller\checkout\success.php
в нем есть $this->session->data['order_id']
это айди, созданного заказа - по нему и получаете информацию о заказе для вывода в форму

Спасибо большое, действительно, нашел в контроллере.

Каюсь, не туда до этого смотрел.

Сейчас попробую вытащить там данные.

 

Надіслати
Поділитися на інших сайтах


1 час назад, thentru сказал:

Открываете файл catalog\controller\checkout\success.php
в нем есть $this->session->data['order_id']
это айди, созданного заказа - по нему и получаете информацию о заказе для вывода в форму

В самом начале контроллера, идет функция с unset всех переменных, относящихся к данному заказу.

Следовательно, мне перед этой функцией следует воткнуть примерно такую конструкцию:

if ($this->session->data['payment_method'] == *myMethod*) {
$orderId = $this->session->data['order_id']
$products = $this->cart->getProducts()

}

И потом уже в шаблоне sucsess.tpl начинаю загонять все это в форму:

<form action="site.ru/action.php" name="myform" method=POST>

<input name="orderId" value="<?php echo $orderId; ?>" type="hidden">

<?php $i=0; ?>

<?php foreach ($products as $product) { ?>
<input name="productName_<?php echo $i; ?>" value="<?php echo $product['name']; ?>" type="hidden">
<input name="productPrice_<?php echo $i; ?>" value="<?php echo $product['price']; ?>" type="hidden">
<input name="productQuant_<?php echo $i; ?>" value="<?php echo $product['quantity']; ?>" type="hidden">
<?php $i++; ?>
<?php }  ?>
<input type="submit" value="Submit">
</form>

И отправляем ее

<script type="text/javascript">
window.onload = function() {
    document.forms["myform"].submit();
}
</script>

Так надо примерно делать, или где-то ошибаюсь?

Не могу сообразить как достать по номеру заказа телефон клиента.

Да, и общую сумму без доставки еще надо. Знаю, что где-то есть массив $totals, но как его прицепить сюда и как там называется нужный элемент не знаю.

Пните в нужную сторону, пожалуйста =)

Змінено користувачем afinalux
Надіслати
Поділитися на інших сайтах


Первое с чем столкнулся.

Почему-то sucsess.tpl не видит переменных, которые я создал в контроллере sucsess.php

 

Пример:

sucsess.php:

$ordid = 1;

sucsess.tpl:

<?php if (isset($ordid)) {echo $ordid} else {echo "none"} ?>

Вывод: none

 

Или я чего-то не понимаю...

Змінено користувачем afinalux
Надіслати
Поділитися на інших сайтах


1 минуту назад, afinalux сказал:

Пример:

sucsess.php:

$ordid = 1;

sucsess.tpl:

<?php is (isset($ordid)) {echo $ordid} else {echo "none"} ?>

в контроллере

$data['my_val'] = 'hello world';

в шаблоне

<?php echo $my_val; ?>

 

Надіслати
Поділитися на інших сайтах

5 минут назад, afinalux сказал:

Или я чего-то не понимаю..

да.  а именно -  как данные из контроллера, попадают в шаблон.

Надіслати
Поділитися на інших сайтах

если интересно

загрузка шаблона

$this->load->view('product/category', $data)

$data  массив с данными для шаблона

далее

	public function view($route, $data = array()) {
		$output = null;
		
		// Sanitize the call
		$route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route);
		
		// Trigger the pre events
		$result = $this->registry->get('event')->trigger('view/' . $route . '/before', array(&$route, &$data, &$output));
		
		if ($result) {
			return $result;
		}
		
		if (!$output) {
			$template = new Template($this->registry->get('config')->get('template_type'));
			
			foreach ($data as $key => $value) {
				$template->set($key, $value);
			}
		
			$output = $template->render($route . '.tpl');
		}
		
		// Trigger the post events
		$result = $this->registry->get('event')->trigger('view/' . $route . '/after', array(&$route, &$data, &$output));
		
		if ($result) {
			return $result;
		}
		
		return $output;
	}

далее

class Template {
	private $adaptor;

  	public function __construct($adaptor) {
	    $class = 'Template\\' . $adaptor;

		if (class_exists($class)) {
			$this->adaptor = new $class();
		} else {
			throw new \Exception('Error: Could not load template adaptor ' . $adaptor . '!');
		}
	}

	public function set($key, $value) {
		$this->adaptor->set($key, $value);
	}

	public function render($template) {
		return $this->adaptor->render($template);
	}
}

и наконец

namespace Template;
final class PHP {
	private $data = array();
	
	public function set($key, $value) {
		$this->data[$key] = $value;
	}
	
	public function render($template) {
		$file = DIR_TEMPLATE . $template;

		if (is_file($file)) {
// тут вся магия появления переменных в шаблоне
			extract($this->data);

			ob_start();

			require($file);

			return ob_get_clean();
		}

		trigger_error('Error: Could not load template ' . $file . '!');
		exit();
	}	
}

 

Надіслати
Поділитися на інших сайтах

@fanatic Спасибо!

Много чего не понял в приведенных функциях, но главное уловил =)

Не просто объявлять переменную в контроллере, а кидать все это дело в массив из которого потом данные попадают в шаблон.

Буду копать.

Надіслати
Поділитися на інших сайтах


Я справился с выводом ID Заказа и Массива продуктов из корзины и суммы заказа в шаблон success.tpl из контроллера.

Остались непонятки - как выдернуть телефон клиента.

Подскажите, пожалуйста, как его вытащить в контроллер success.php 

Змінено користувачем afinalux
Надіслати
Поділитися на інших сайтах


Итак, все заработало!

Если кому-то понадобится, вот мой вариант решения(спасибо за помощь @fanatic !)

 

 

Для начала, редактируем catalog\controller\checkout\success.php

Прямо в начале есть функция

public function index() {

Туда добавляем вот это:

 

public function index() { 	
		if (isset($this->session->data['order_id'])) {
			//Внесенные изменения:
			if ($this->session->data['payment_method']['title'] == 'Оплата в кредит') {  //Ставим условие, что выбран способ оплаты "В кредит"
			$this->data['ordid'] = $this->session->data['order_id'];  //Добавляем в массив данных для вывода в шаблоне id заказа, переменная будет $ordid
			$this->data['products'] = $this->cart->getProducts();   //Добавляем массив товаров из корзины, массив будет $products
			$this->data['total'] = $this->cart->getTotal();          //Добавляем общую стоимость заказа, переменная будет $total
			$this->data['phone'] = $this->session->data['guest']['telephone'];   //Добавляем телефон клиента, переменная будет $phone
			}
			//Далее идет стандартное содержимое функции, его не трогаем, там убирается из сессии покупателя инфа о заказе
			$this->cart->clear();
			unset($this->session->data['shipping_method']);
			unset($this->session->data['shipping_methods']);
			unset($this->session->data['payment_method']);
			unset($this->session->data['payment_methods']);
			unset($this->session->data['guest']);
			unset($this->session->data['comment']);
			unset($this->session->data['order_id']);	
			unset($this->session->data['coupon']);
			unset($this->session->data['reward']);
			unset($this->session->data['voucher']);
			unset($this->session->data['vouchers']);
		}	

Далее идем в шаблон: \catalog\view\theme\ваша_тема\template\common\success.tpl и добавляем туда нашу форму:

 

<?php if (isset($ordid) && $ordid != false)?>  //Проверяем есть ли такая переменная, т.к. она будет существовать только если выбран нужный способ оплаты и не пустая ли она.
 <div>
 <form name="credform" action="https://loans.tinkoff.ru/api/partners/v1/lightweight/create" method="post">  //Если все ок создаем форму(в данном случае для Тинькофф
<input name="shopId" value="id магазина" type="hidden"/> //выдает тинькофф
<input name="showcaseId" value="id витрины" type="hidden"/> //выдает тинькофф
<input name="promoCode" value="default" type="hidden"/> <br> //выдает тинькофф
<input name="orderNumber" value="<?php echo $ordid; ?>" type="hidden"/>  //Вставляем id заказа
<input name="sum" value="<?php echo $total; ?>" type="text"> //Вставляем общую стоимость заказа
<input name="customerPhone" value="<?php echo $phone; ?>" type="text"> //Вставляем телефон клиента

<?php if (isset($products) && $products != false) { ?> //Проверяем есть ли товары в заказе
<?php $i=0; ?>
<?php foreach ($products as $product) { ?>  //Заносим данные о каждом товаре в форму и указываем номер товара каждому, начиная с 0
<input name="itemName_<?php echo $i; ?>" value="<?php echo $product['name']; ?>" /><br> //Название
<input name="itemQuantity_<?php echo $i; ?>" value="<?php echo $product['quantity']; ?>"/><br> // Количество
<input name="itemPrice_<?php echo $i; ?>" value="<?php echo $product['price']; ?>"/><br> //Цена
<input type="submit" value="Оформить"/><br> 
<?php $i++; ?>
<?php }  ?>
<?php } ?> 
 //У меня в некоторых полях type="text" указан, чтобы мне проще было визуально проверить корректность данных, вообще они все hidden

Далее, в моем случае, я просто с помощью javascript отправляю форму при загрузке страницы:

 

<script type="text/javascript">
window.onload = function() {
    document.forms["credform"].submit();
}
</script>

.

Если более опытные коллеги подскажут что я сделал не так и что можно улучшить, я буду рад, ибо я ооочень зеленый в php и программировании вообще.

Всем спасибо

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.