VM – Losowe produkty pokrewne

Jako że ostatnio często wdrażam strony oparte i Joomlę i VirtueMart postanowiłem zrobić na blogu kategorię, w której będę umieszczał rozwiązania, myślę że dosyć popularnych, problemów związanych z dostosowaniem VM do potrzeb zleceniodawcy. Można by polemizować czy to dobry system, czy nie, dla mnie podstawowymi zaletami jest to że jest darmowy, ma logiczną strukturę, fajny system szablonów, przez co szybko się go wdraża i jest sporo dodatków, dzięki czemu nie trzeba marnować czasu na pisanie swoich funkcjonalności.

Zagadnienie:
VirtueMart ma w swojej funkcjonalności wyświetlenie na karcie produktu skrótowych informacji o produktach spokrewnionych. Żeby to zrobić wystarczy podczas dodawania produktu przejść na zakładkę “Produkty pokrewne” i tam wybrać pozycje spokrewnione. Rozwiązanie dobre, jeżeli łączymy produkty np. w zestawy, jednak klient zażyczył sobie żeby zamiast ręcznego wybierania produkty z tej samej kategorii pokazywały się losowo.

Rozwiązanie:
Przechodzimy do pliku: administrator/components/com_virtuemart/html/shop.product_details.php i odnajdujemy w nim linię ok 82, powinna się zaczynać tak:

// Let's have a look wether the product has related products.

i pod nią mamy zapytanie odpowiedzialne za wyświetlanie wybranych, spokrewnionych produktów. Jeżeli spojrzymy kilka linijek niżej zauważymy że programiści też wzięli pod uwagę sytuację że ktoś by chciał wyświetlać losowe produkty(ale o tym żeby można było to ustawić z poziomu panelu administracyjnego już nie pomyśleli). Żeby produkty wyświetlały się losowo wystarczy od komentować to zapytanie i za komentować standardowe. Trzeba jednak zwrócić uwagę, że wtedy, wyświetlały będą się losowo produkty z CAŁEGO asortymentu. Aby wyświetlać produkty z tej samej kategorii, co aktualny produkt trzeba zamienić zapytanie na poniższe:

$q = "SELECT product_sku FROM #__{vm}_product,#__{vm}_product_category_xref ";
$q .= "WHERE product_publish='Y' AND #__{vm}_product.product_id != $product_id";
$q .= " AND (#__{vm}_product_category_xref.category_id = '$category_id' AND #__{vm}_product_category_xref.product_id = #__{vm}_product.product_id) ";
$q .= "ORDER BY RAND() LIMIT 0, 4";

i problem rozwiązany :)

Dodaj komentarz