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

Варианты доставки от типа товара


Recommended Posts

Добрый день!

 

Переделываю штатный вариант доставки, на такой - в магазине есть три типа товаров (условно, можно отобрать по полю модель).

 

1. Загружаю товары из корзины.

2. Перебираю их и определяю какие типы доставок будут. У каждого типа товара может быть от 1 до 3 типов (надо выбрать один).

3. Загоняю нужные данные в $method_data

4. Далее в шаблоне \checkout\shipping_method.tpl пытаюсь сделать их вывод, но, например, самый "тяжёлый" случай - выбрали все товары из 3-х типов, поэтому нужно как минимум 3 разных радиобаттона (3 группы). Вот тут получается, что имена у них должны быть разными, а контроллер (модель) воспринимает только одно имя. 

 

Как проще далее поступить?

Изменить контроллер (модель) под 3 имени радиобаттона?

 

Благодарю заранее.

 

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


В контрллере заменить

if ($quote) {
	$method_data[$result['code']] = array(
		'title'      => $quote['title'],
		'quote'      => $quote['quote'],
		'sort_order' => $quote['sort_order'],
		'error'      => $quote['error']
	);
}
на

if ($quote && isset($quote['title'])) {
	$method_data[$result['code']] = array(
		'title'      => $quote['title'],
		'quote'      => $quote['quote'],
		'sort_order' => $quote['sort_order'],
		'error'      => $quote['error']
	);
} elseif ($quote && $quote[0]) {
	foreach($quote as $quote_row) {
		$method_data[$result['code']] = array(
			'title'      => $quote_row['title'],
			'quote'      => $quote_row['quote'],
			'sort_order' => $quote_row['sort_order'],
			'error'      => $quote_row['error']
		);
	}
}
В моделе своего метода доставки

if (условия1) {
	$method_data[] = array(
		'code'       => 'name1',
		'title'      => 'Первый радиобаттон',
		'quote'      => $quote_data,
		'sort_order' => $this->config->get('flat_sort_order'),
		'error'      => false
	);
}
if (условия2) {
	$method_data[] = array(
		'code'       => 'name2',
		'title'      => 'Второй радиобаттон',
		'quote'      => $quote_data,
		'sort_order' => $this->config->get('flat_sort_order'),
		'error'      => false
	);
}
// и т.д.
В шаблон прикладную логику не засовывайте и вообще не трогайте шаблон без нужды, я считаю
Надіслати
Поділитися на інших сайтах

Интересная задача.

 

Это не проблема интерфейса, а проблема логики. Прежде всего я бы предложил задуматься над структурой хранения данных. По-умолчанию в ОС идет свять заказ - способ доставки. Связь один к одному и в базе данных дополнительных полей нет. Это привычная бизнес-логика и она правильная. Кроме того, что она правильная она ещё прописана везде где только можно: поменяешь связи и будешь потом долго бегать по всем файлам и папкам и вносить правки

 

Надо решить как будут храниться данные в первую очередь.

 

Я бы предложил разбивать один реальный заказ на несколько заказов. Amazon так делают и Rozetka.com.ua тоже. Это позволяет сохранить бизнес-логику: разные поставщики - разные способы доставки и оплаты - клиент. При таком подходе Вы будете затрагивать только интерфейс оформления заказа и его логику, а модели и данные останутся целыми за счет чего Вам не придется ничего править ни в личном кабтинете пользователя ни в админке. Только обработку всяких там Totals надо правильно сделать.... как это "правильно" мне не очевидно - сложный вопрос.

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

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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

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