Jump to content
newjey

Ищу модуль случайны товар

Recommended Posts

Подскажите модуль случайны товар, что бы просто из всей базы брал заданное кол-во товаров на страницу и выводил всё время разные при обновлении страницы.

Спасибо.

Share this post


Link to post
Share on other sites

Модуль рекомендуемые товары(featured), можно немного модифицировать добавить выбор товара через функцию. и каждое обновление будет разные товары!

    public function getFAproducts($limit) {
        
        $sql = "SELECT product_id FROM " . DB_PREFIX . "product Where (quantity>0) ORDER BY RAND() LIMIT ".$limit;         
        
        $product_data = array();
        
        $query = $this->db->query($sql);
        
        foreach ($query->rows as $result) {         
            $product_data[$result['product_id']] = $result['product_id'];
        }
        
        return $product_data;
    }
Edited by texxnik

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

нет не надо!

Share this post


Link to post
Share on other sites

Допишите уже запрос свой на выборку товаров status = 1.

И в админке лимит задать нужно

Share this post


Link to post
Share on other sites

Ещё вопрос в каком файле произвести изменения? Спасибо.

Share this post


Link to post
Share on other sites

Ещё вопрос в каком файле произвести изменения? Спасибо.

в двух) и наверно надо подсказать какие именно места менять))

1. controller/module/featured.php

 

найти             $products = array_slice($setting['product'], 0, (int)$setting['limit']);

поменять на $products = $this->model_catalog_product->getFAproducts((int)$setting['limit']);

 

2. catalog/model/catalog/product.php

 

запрос вставить в любое место в этом файле)

 

Допишите уже запрос свой на выборку товаров status = 1.

И в админке лимит задать нужно

 

я привел свой пример)) дописывать можно много чего)

Edited by texxnik

Share this post


Link to post
Share on other sites

Да главное дописать сохранение результата в кеш, ORDER BY RAND() - тяжелый запрос, если у Вас много товаров - это ощутимо

К примеру протестил, 5 тс товаров. 

ORDER BY name - 0.00007

ORDER BY RAND() - 0.05...

Share this post


Link to post
Share on other sites

Да главное дописать сохранение результата в кеш, ORDER BY RAND() - тяжелый запрос, если у Вас много товаров - это ощутимо

К примеру протестил, 5 тс товаров. 

ORDER BY name - 0.00007

ORDER BY RAND() - 0.05...

 а пример можно?

Share this post


Link to post
Share on other sites

Извините, но тест запрос делал не на опенкарте

Share this post


Link to post
Share on other sites

Извините, но тест запрос делал не на опенкарте

окей)) а как сделать на кеш opencart?

Edited by texxnik

Share this post


Link to post
Share on other sites

в двух) и наверно надо подсказать какие именно места менять))

1. controller/module/featured.php

 

найти             $products = array_slice($setting['product'], 0, (int)$setting['limit']);

поменять на $products = $this->model_catalog_product->getFAproducts((int)$setting['limit']);

 

2. catalog/model/catalog/product.php

 

запрос вставить в любое место в этом файле)

 

 

я привел свой пример)) дописывать можно много чего)

Спасибо)

Share this post


Link to post
Share on other sites

окей)) а как сделать на кеш opencart?

Сори. я про запрос подумал.. плохо прочитал )

 

Ну вот пример стандартный

$product_data = $this->cache->get('product.random.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $customer_group_id . '.' . (int)$limit);
 
if (!$product_data) { 
$query = $this->db->query(Наш запрос);
 
foreach ($query->rows as $result) {
$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
}
 
$this->cache->set('product.random.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id'). '.' . $customer_group_id . '.' . (int)$limit, $product_data);
}
 
return $product_data;

 

 

Share this post


Link to post
Share on other sites

@rand()@ надо делать по минимальной "временной" таблице.

уже обсуждалась оптимизация "случайных товаров" несколько лет назад.

@Yesvik предлагал хороший выход - ищите по его сообщениям.

Share this post


Link to post
Share on other sites

Кстати заметил такой нюанс, у меня на главной в данном переделанном модуле выводится 16 случайных товаров (4 колонки по 4 товара в строку). Так вот при обновлении страницы последний товар может не появляться, то есть может показывать 16 товаров, а может и 15, закономерности не заметил.В чём может быть причина? 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.