Очередной проект - оптовый магазин, в корзине будет очень много позиций и необходимо выводить фото товара. Делаем.
Открываем \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.