БЛОГОДЖУМЛА - БЛОГ О ДЖУМЛА

Как добавить фото товара в корзину и оптимизировать запросы в корзине

  • Категория: Virtuemart 1
  • Автор:
  • Просмотров: 8994
 

Корзина

Очередной проект - оптовый магазин, в корзине будет очень много позиций и необходимо выводить фото товара. Делаем.

Открываем \administrator\components\com_virtuemart\html\basket.php

И ужасаемся - практически все поля для корзины вызываются через $ps_product->get_field()

например: 

	$ps_product->get_field($cart[$i]["product_id"],"product_parent_id")

А что делает get_field ? Смотрим в ps_product.php - при каждом вызове происходит запрос:





	$q = 'SELECT product_id, `#__{vm}_product`.* FROM `#__{vm}_product` WHERE `product_id`='.(int)$product_id;

То есть сколько раз у нас в basket.php встречается get_field - столько запросов мы делаем заходя в корзину.

Смысл? Никакого - все эти данные мы можем получить сразу одним запросом, а не дергать базу 6 раз. Да, когда у Вас в корзине 5 товаров это не страшно. А когда 105? Исправляем недоразумение.

 

Вместо 





	for ($i=0;$i<$cart["idx"];$i++) {

пишем





	$db = new ps_DB;

	for ($i=0;$i<$cart["idx"];$i++) {

	$q = "SELECT * FROM #__{vm}_product " ;

	$q .= "WHERE product_id= " . $cart[$i]["product_id"];

	$db->query( $q ) ;

	$db->next_record() ;

далее везде меняем, например





	$ps_product->get_field($cart[$i]["product_id"],"название поля")

на





	$db->f("название поля ");

Мы вроде хотели фото в корзину добавить?

находим





	$product_rows[$i]['product_sku'] = $db->f("product_sku");

и ниже добавляем





	$product_rows[$i]['product_thumb_img'] = $db->f("product_thumb_image");

Сохраняем. Открываем \components\com_virtuemart\ themes\default\templates\basket\basket_b2b.html.php

и куда хотим добавляем фото - например перед названием - находим





	<td><?php echo $product['product_name'] . $product['product_attributes'] ?></td>

и меняем на 

 


	<td> <img src="/components/com_virtuemart/shop_image/product/<?php echo $product['product_thumb_img']; ?>" alt="<?php echo strip_tags($product['product_name']);?>" /><?php echo $product['product_name'] . $product['product_attributes'] ?></td>

Чтобы наши изменения были и на последних шагах заказа - те же манипуляции надо проделать с ro_basket.php и ro_basket_b2b.html.php.


 

Back to top