newjey

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

Рекомендуемые сообщения

newjey    1

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

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
texxnik    5

Модуль рекомендуемые товары(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;
    }
Изменено пользователем texxnik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
newjey    1

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
texxnik    5

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

нет не надо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
timedontwait    100

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
newjey    1

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
texxnik    5

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

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

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.

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

 

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

Изменено пользователем texxnik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
timedontwait    100

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

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

ORDER BY name - 0.00007

ORDER BY RAND() - 0.05...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
texxnik    5

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

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

ORDER BY name - 0.00007

ORDER BY RAND() - 0.05...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
timedontwait    100

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
texxnik    5

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

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

Изменено пользователем texxnik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
newjey    1

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

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

 

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

 

 

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

Спасибо)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
timedontwait    100

С нулем ошибочка вышла с одним, но суть остается

http://joxi.ru/8AnNk43tWjZ3AO

http://myprintscreen.com/s/bqyz/1a2e13880c

Изменено пользователем timedontwait

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
timedontwait    100

окей)) а как сделать на кеш 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;

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
newjey    1

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу