Перейти к содержанию

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

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

Спасибо.

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


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

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

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


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

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

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


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

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

нет не надо!

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


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

Допишите уже запрос свой на выборку товаров status = 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

 

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

 

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

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

 

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

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

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


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

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

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

ORDER BY name - 0.00007

ORDER BY RAND() - 0.05...

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


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

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

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

ORDER BY name - 0.00007

ORDER BY RAND() - 0.05...

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

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


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

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

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


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

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

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

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

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


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

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

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

 

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

 

 

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

Спасибо)

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


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

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

http://joxi.ru/8AnNk43tWjZ3AO

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

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

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


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

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

 

 

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


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

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

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

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

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


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

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

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.