Jump to content
  • 0

Related Products Pro - recenzja wtyczki i kilka uwag


hakeryk2

Question

Witam,

 

Chciałbym zrecenzować bardzo przydatną wtyczkę od mypresta.eu czyli Related Products Pro oraz wytknąć jej jeden błąd :)

 

Wtyczki znajdziecie tutaj https://mypresta.eu/pl/modules/funkcjonalnosci-sklepu/podobne-produkty-pro.html i jej cena jest bardzo dobra w stosunku do tego co oferuje. Ja najbardziej cenie ją sobie za możliwość wyświetlenia dowolnie wybranej ilości losowych produktów z dowolnej kategorii i wyświetlić je w każdym produkcie z wybranej kategorii. Brzmi zagmatwanie ale przykładowo wygląda to tak:

 

Mam kategorię krzeseł i chcę w każdym krześle wyświetlić np 8 losowych innych krzeseł z tej samej kategorii tak wtyczka pozwala zrobić to niespełna w minutę dla wszystkich krzeseł. Oczywiście da się zrobić własną listę produktów itp. Wszystkie funkcje opisane są na stronie wtyczki. Uważam ją za must-have dla każdego sklepu.

 

Jest tylko jeden minus który znacznie, ale to znacznie psuje odbiór tej wtyczki. Wtyczka działa świetnie gdy korzysta z list przygotowanych ręcznie, natomiast przy stosowaniu jej właśnie do wyświetlania losowych produktów z kategorii tak wtyczka zwalnia niemiłosiernie i czasy ładowania podstrony z produktem są stanowczo za długie. Wyświetlam tylko 8 produktów losowych, ponieważ zwiększanie ich ilości również odbija się na czasie ładowania podstrony.

 

Bardzo bym prosił aby twórca coś z tym zrobił, nie wiem - dodał jakieś dobowe cachowanie, nie wiem, cokolwiek. Może ładowanie produktów dopiero gdy znajdą się w viewporcie? Sam próbowałem coś wykombinować, ale prestę poznaję dopiero i średnio mi to idzie. Zgłaszałem problem już ponad miesiąc temu i rozumiem, że Vekia ma na prawdę dużo pracy, ale nie otrzymałem żadnej odpowiedzi. Źle to wpływa na SEO mojego sklepu. Wtyczki dodatkowo nie da się używać z żadnym z systemów cache'owania typu system plików itp - czas ładowania wtedy wynosi ponad 40 sekund i ze strony po prostu nie da się korzystać.

 

Tutaj screen prezentujący jak źle to wpływa na czasy ładowania poprzez tryb debugowania

post-1146962-0-29098600-1462876833_thumb.jpg

 

Przyśpieszyłem prawie dwukrotnie działanie wtyczki (redukcja z 8000ms na 4000ms) poprzez zastosowanie zmiany tego jak presta generuje losowość https://www.prestashop.com/forums/topic/515046-order-by-rand-in-categoryphp-is-pure-evil-way-to-optimize-rand-queries/

 

Podsumowując:

+ ułatwia dodawanie podobnych lub powiązanych produktów

+ oszczędza czas pracowników

+ pozwala tworzyć mnóstwo różnych kombinacji

+ da się utworzyć kilka list które mają się wyświetlić na stronie produktów

+ cena

+ łatwość konfiguracji

+ ogrom funkcji dodatkowych

 

- czas działania funkcji losowego wyświetlania produktów

- brak cache

 

Ogólna ocena: 8 / 10

 

----------------------------------------

EDIT: po dosyć długim studiowaniu tego jak wtyczka działa sam poprawiłem sobie jej wydajność i mam nadzieję, że i Wam to pomoże:

 

zmieńcie funkcję getAllBlocksByPosition w modules\ppb\models\block.php na tą którą podałem tutaj i sprawdźcie czy wszystko śmiga u was dobrze.Ilość Queries spadła z 16 000 do 2000. Czas wykonywania skryptu z 8000 ms do 1000ms. Napisałem to autorowi i może to wprowadzi do swojej wersji. Uwaga - ja wykorzystuję wtyczkę tylko do wyświetlania podobnych produktów jeśli produkt znajduje się w danej kategorii.

public static function getAllBlocksByPosition($position) {
        $context = new Context;
        $context = $context->getContext();
        $whereshop = '';
        if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE') == 1) {
            $whereshop = 'AND shop="'.$context->shop->id.'"';
        }
        $id_lang = context::getContext()->cookie->id_lang;
        $query = Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'ppbp_block` WHERE block_position='.(string)$position.' AND active=1 AND (product ="'.(int)Tools::getValue('id_product').'" OR global_cat=1 OR global_man=1 OR global_prod=1 OR global_features=1) '.(string)$whereshop.' ORDER BY position');
        $blocks = array();
        
        foreach ($query as $key) {
            if (in_array( $key['categories'], Product::getProductCategories((int)Tools::getValue('id_product')) )) {
                $blocks[$key['id']] = new PpbBlock($key['id']);
                $blocks[$key['id']]->name = $blocks[$key['id']]->name["$id_lang"];
                $blocks[$key['id']]->custom_before = $blocks[$key['id']]->custom_before["$id_lang"];
            }
        }
        
            return $blocks;
    }
Edited by hakeryk2 (see edit history)
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...