Изменение стандартного выпадающего списка настраиваемого товара

Как его можно изменить?

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Кирилл
  • Группа: Пользователь
  • Сообщений: 3
  • Регистрация: 21.09.2011

21.09.2011 23:35

Есть настраиваемый товар из простых товаров. Каждый простой товар представляет из себя один и тот же товар с разными размерами. Как можно сделать так, что бы на сборном товаре при заказе был не выпадающий список, а, к примеру, радиокнопка, что бы сделать как здесь -
http://www.sapato.ru/catalog/detail/474377/
, тогда можно было бы показывать и товары, которых нет на складе, но под заказ.
Через регулярные выражения вытащил значения из массива – id, label, price, products, можно остальные так же вытащить. Или есть адрес ссылки, по которой можно сделать заказ по типу как здесь описано для простого товара - http://magento-forum.ru/topic/844/. А то из корзины хотел посмотреть через суперглобальные массивы , которые передаёт страница с заказом, но что то не пойму, какие значения задают формирование товара.
Выпадающий список формируется средствами javaScript, а вот в нём я очень слабо разбираюсь. Или хотя бы укажите направление, в котором копать.
Спасибо.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

21.09.2011 23:50

Вам надо перекрыть (переопределить) стандартный шаблон настраиваемого товара на свой.

#3 Кирилл
  • Группа: Пользователь
  • Сообщений: 3
  • Регистрация: 21.09.2011

22.09.2011 00:34

Это я понял, пошел копать в данную сторону -
\app\design\frontend\default\my_templates\template\catalog\product\view\type\options\configurable.phtml

Здесь поменял код:
 <script type="text/javascript">
        var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
</script>

на пхпешный:
        <?php 
		$atribut_tovara = $this->getJsonConfig();
$atribut_tovara = explode(",{",$atribut_tovara);	
for ($i = 0; $i<count($atribut_tovara); $i++)
{
preg_match_all('/"id":"(.\d{1,5})","label":"(.*)","price":"(.*)","products":\["(.\d{1,5})"\]/isU', $atribut_tovara[$i], $matches);
echo "id - ".$matches[1][0]." label - ".$matches[2][0]." price - ".$matches[3][0]." products - ".$matches[4][0]."<br />";
echo '<p><input type="radio" name="products" value="'.$matches[4][0].'">'.$matches[2][0].'</p>';
}
?>

Получилось что то типа:
Изображение
Форма соответственно не работает, потому что нужно передать какие то дополнительные параметры, но вот какие именно - я не могу догнать. Может в скрытом поле надо что то передать.
У формы action равен
/checkout/cart/add/uenc/aHR0cDovL21hZ24xL21hbGVqYWNrZXRzL2t1cnRrYS1zYm9ybnlqLmh0bWw,/product/180/
Тут id настраиваемого товара (и если не сложно, не могли бы подсказать, что значит параметр aHR0cDovL21hZ24xL21hbGVqYWNrZXRzL2t1cnRrYS1zYm9ybnlqLmh0bWw, или это типа внутренней сессии и смысла в нём искать нету). А вот как формируется связь между id настраиваемого товара и id простого товара - не пойму. Может ещё каких то параметров не хватает. Не знаю.
Понимаю, что решение где то близко, ну что то встал в тупик.
Может я не понял, какой именно файл обрабатывает эту форму. Можно поинтересоваться, какой именно.
А то в первый раз столкнулся с этой кмской. Опыта с ней ещё мало.
Или всё таки стараться разобраться с явой, формирующей выпадающий список и стараться как то её переопределить под мой дизайн?

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

22.09.2011 01:19

Чтобы увидеть полный перечень параметров, передаваемых браузером серверу, используйте, например, расширение Live HTTP Headers для Firefox.

#5 Кирилл
  • Группа: Пользователь
  • Сообщений: 3
  • Регистрация: 21.09.2011

22.09.2011 02:04

Спасибо Вам огромное! Теперь понял, что и куда!

Если вдруг кому нибудь понадобится данное решение - в
\app\design\frontend\default\my_templates\template\catalog\product\view\type\options\configurable.phtml
убираем
 <script type="text/javascript">
        var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
</script>
, убираем селекты, связанные с выпадающим списком, вставляем


<?php 
	$atribut_tovara = $this->getJsonConfig();
	preg_match('/\{"id":"(.\d{1,10})",/isU', $atribut_tovara, $super_attribute);
	$super_attribute = $super_attribute[1];
	$atribut_tovara = explode(",{",$atribut_tovara);	
	for ($i = 0; $i<count($atribut_tovara); $i++)
		{
			preg_match_all('/"id":"(.\d{1,5})","label":"(.*)","price":"(.*)","products":\["(.\d{1,5})"\]/isU', $atribut_tovara[$i], $matches);
			//echo "id - ".$matches[1][0]." label - ".$matches[2][0]." price - ".$matches[3][0]." products - ".$matches[4][0]."<br />"; // Если понадобятся дополнительные данные о каждом простом товаре
			echo '<p><input type="radio" name="super_attribute['.$super_attribute.']" value="'.$matches[1][0].'">'.$matches[2][0].'</p>';
		}
?>	
в то место шаблона, где у нас должно отображаться и всё должно заработать. По крайней мере у меня заработало. Magento вер. 1.4.1.1

Поделиться темой: