Перейти к содержанию
Viniculo

Корзина методом POST

Рекомендуемые сообщения

Здравствуйте! 

Настиг меня очередной вопрос: как сделать добавление в корзину методом POST? Не спрашивайте для чего мне это надо, главное избежать AJAX. Пробовал через форму, в action прописывал "index.php?route=checkout/cart/add", но в место этого меня кидало на пустую страницу. Упаваю на вас собратья-программисты. Помогите решить эту задачку

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обернуть карточку товара form

Кнопку Купить сделать submit

правильно заполнить поля формы

product_id, quantity и прочие

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обернуть карточку товара form

Кнопку Купить сделать submit

правильно заполнить поля формы

product_id, quantity и прочие

Так в action вот это оставить: index.php?route=checkout/cart/add ?

В корзине надо что-нибудь менять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего не надо

 

а action именно этот

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего не надо

 

а action именно этот

Огромное тебе человеческое спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ничего не надо

 

а action именно этот

Слушай, я в input name поставил product_id[], после foreach соответственно прокручиваю массив, но в итоге ничего не добавляется

<?php
class ControllerCheckoutCombocart extends Controller {

	public function add() {
		$this->load->language('checkout/cart');

		$json = array();
		
		foreach ($this->request->post['product_id'] as $post_pro) {
		if (isset($this->request->post['product_id'])) {
			$product_id = (int)$post_pro;
			print_r ($product_id);
		} else {
			$product_id = 0;
		}

		$this->load->model('catalog/product');

		$product_info = $this->model_catalog_product->getProduct($product_id);

		if ($product_info) {
			if (isset($this->request->post['quantity'])) {
				$quantity = (int)$this->request->post['quantity'];
			} else {
				$quantity = $product_info['minimum'] ? $product_info['minimum'] : 1;
			}

			if (isset($this->request->post['option'])) {
				$option = array_filter($this->request->post['option']);
			} else {
				$option = array();
			}

			$product_options = $this->model_catalog_product->getProductOptions($this->request->post['product_id']);

			foreach ($product_options as $product_option) {
				if ($product_option['required'] && empty($option[$product_option['product_option_id']])) {
					$json['error']['option'][$product_option['product_option_id']] = sprintf($this->language->get('error_required'), $product_option['name']);
				}
			}

			if (isset($this->request->post['recurring_id'])) {
				$recurring_id = $this->request->post['recurring_id'];
			} else {
				$recurring_id = 0;
			}

			$recurrings = $this->model_catalog_product->getProfiles($product_info['product_id']);

			if ($recurrings) {
				$recurring_ids = array();

				foreach ($recurrings as $recurring) {
					$recurring_ids[] = $recurring['recurring_id'];
				}

				if (!in_array($recurring_id, $recurring_ids)) {
					$json['error']['recurring'] = $this->language->get('error_recurring_required');
				}
			}

			if (!$json) {
				$this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id);

				$json['success'] = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'product_id=' . $product_id), $product_info['name'], $this->url->link('checkout/cart'));

				unset($this->session->data['shipping_method']);
				unset($this->session->data['shipping_methods']);
				unset($this->session->data['payment_method']);
				unset($this->session->data['payment_methods']);

				// Totals
				$this->load->model('extension/extension');

				$total_data = array();
				$total = 0;
				$taxes = $this->cart->getTaxes();

				// Display prices
				if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
					$sort_order = array();

					$results = $this->model_extension_extension->getExtensions('total');

					foreach ($results as $key => $value) {
						$sort_order[$key] = $this->config->get($value['code'] . '_sort_order');
					}

					array_multisort($sort_order, SORT_ASC, $results);

					foreach ($results as $result) {
						if ($this->config->get($result['code'] . '_status')) {
							$this->load->model('total/' . $result['code']);

							$this->{'model_total_' . $result['code']}->getTotal($total_data, $total, $taxes);
						}
					}

					$sort_order = array();

					foreach ($total_data as $key => $value) {
						$sort_order[$key] = $value['sort_order'];
					}

					array_multisort($sort_order, SORT_ASC, $total_data);
				}

				$json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), $this->currency->format($total));
			} else {
				$json['redirect'] = str_replace('&', '&', $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']));
			}
		}
		$this->response->addHeader('Content-Type: application/json');
		$this->response->setOutput(json_encode($json));
		}
	}
}

 

Такое впечатление, что я foreach не там где нужно закрываю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема решилась, перенес $json = array(); в foreach

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.