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

[Решено] Добавление выбранной опции в оповещение при заказе товара

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

Здравствуйте, хочу добавить на свой сайт функцию. При добавление товара с опцией в оповещении(что товар добавился в корзину) показывалась выбранная опция. 

Подскажите, что поправить в файле :

controller\checkout\cart.php

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

Чтобы при выборе опции 2-3 года, было примерно так

 

Снимок.PNG

Снимок2.PNG

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


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

добавить название опции к названию товара

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


Ссылка на сообщение
Поделиться на другие сайты
11 минут назад, spectre сказал:

добавить название опции к названию товара

а как? не получается(

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


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, fitdamir сказал:

а как? не получается(

тут, выбранные опции

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']);

перебираем опции товара, с проверкой выбрана или нет.

если выбрана добавляем название в переменную.

добавляем переменную после  $product_info['name'] в json['success']

примерно как-то так.

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


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, fanatic сказал:

перебираем опции товара, с проверкой выбрана или нет.

если выбрана добавляем название в переменную.

добавляем переменную после  $product_info['name'] в json['success']

примерно как-то так.

Спасибо, вас примерно понял.

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

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

help:geek:

 

32.JPG

33.JPG

 

Понимаю, что там должно быть не $product_option['name']

а что то типа $product_option['value'], но как его прикрутить

 

и вот что я имею в файле на тему опций и значений

foreach ($product['option'] as $option) {
					if ($option['type'] != 'file') {
						$value = $option['value'];
					} else {
						$upload_info = $this->model_tool_upload->getUploadByCode($option['value']);

						if ($upload_info) {
							$value = $upload_info['name'];
						} else {
							$value = '';
						}
					}

					$option_data[] = array(
						'name'  => $option['name'],
						'value' => (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value)
					);
				}

 

Изменено пользователем fitdamir
мысли

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


Ссылка на сообщение
Поделиться на другие сайты
12 часов назад, fitdamir сказал:

Передается только название самой опции, а не значение этой опции.

ну да, я и думал что нужно название

если нужно значение, как вариант

		$option_data = array();	
		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(!empty($option[$product_option['product_option_id']])){
				foreach($product_option as $k => $p_o){
				    if($k == 'product_option_value'){
					foreach($p_o as $v_p_o){
					    if(is_array($option[$product_option['product_option_id']])){
						foreach($option[$product_option['product_option_id']] as $val){
						    if($val == $v_p_o['product_option_value_id']){
							$option_data[] = $v_p_o['name'];
						    }
						}
					    }else{
						if($option[$product_option['product_option_id']] == $v_p_o['product_option_value_id']){
						     $option_data[] = $v_p_o['name'];
						}
					    }
					}
				    }
				}
			    }
			}
$json['success'] = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']), $product_info['name'] . '(' . implode(',',$option_data) . ')', $this->url->link('checkout/cart'));

 

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


Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, fanatic сказал:

ну да, я и думал что нужно название

если нужно значение, как вариант


		$option_data = array();	
		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(!empty($option[$product_option['product_option_id']])){
				foreach($product_option as $k => $p_o){
				    if($k == 'product_option_value'){
					foreach($p_o as $v_p_o){
					    if(is_array($option[$product_option['product_option_id']])){
						foreach($option[$product_option['product_option_id']] as $val){
						    if($val == $v_p_o['product_option_value_id']){
							$option_data[] = $v_p_o['name'];
						    }
						}
					    }else{
						if($option[$product_option['product_option_id']] == $v_p_o['product_option_value_id']){
						     $option_data[] = $v_p_o['name'];
						}
					    }
					}
				    }
				}
			    }
			}

 

Выдает ошибку(

12.JPG.28407e0833a8680e7d0409860a35f240.JPG

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


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

Вот какие ошибки выдает

121.thumb.JPG.bc045aa199b897437ce668664f60171a.JPG

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


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

мое решение для 2.3.  на дефолте прекрасно работает. (проверено) 

option.thumb.jpg.c66edeea411fc86046bb8cc8271586e0.jpg

 

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


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, fanatic сказал:

мое решение для 2.3.  на дефолте прекрасно работает. (проверено) 

option.thumb.jpg.c66edeea411fc86046bb8cc8271586e0.jpg

 

Я же правильно понимаю, просто заменить ваш код на этот?

				$option_data = array();

				foreach ($product['option'] as $option) {
					if ($option['type'] != 'file') {
						$value = $option['value'];
					} else {
						$upload_info = $this->model_tool_upload->getUploadByCode($option['value']);

						if ($upload_info) {
							$value = $upload_info['name'];
						} else {
							$value = '';
						}
					}

					$option_data[] = array(
						'name'  => $option['name'],
						'value' => (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value)
					);
				}

 

 

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


Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, fitdamir сказал:

Я же правильно понимаю, просто заменить ваш код на этот?

нет.   смотрите метод add()  после

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

 

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


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

@fanatic

Большое спасибо за помощь. Вопрос закрыт. Решение работает.

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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