1 Отредактировано Andrei_Ts (09-10-2016 22:05:35)

Тема: Рандомный вывод товаров в виджете new_products

Есть такой виджет. На главной выводит новые товары. Выводится одно и тоже постоянно. Нужно рандомно сортировать массив продуктов-новинок, чтобы появлялись новые товары. Как это сделать?

P.S. в виджете вывода брендов на главной сделал так - shuffle($brands) - а вот в виджете новых продуктов не срабатывает, видимо потому что там не массив ))

Thumbs up Thumbs down

2

Re: Рандомный вывод товаров в виджете new_products

Давно хотел об этом спросить на форуме. Задача очень актуальна!

Thumbs up Thumbs down

3

Re: Рандомный вывод товаров в виджете new_products

Вы правы, там объект, а не массив) И шафл не выход, лучше рандомно доставать сразу из базы.
Находите, где происходит запрос и меняете, например:

->orderByCreated(Criteria::DESC)

на

->orderByRand()

А в модель SProductsQuery.php нужно добавить метод:

public function orderByRand() { 
    return $this->addAscendingOrderByColumn('RAND()'); 
}
Профессиональное создание сайтов любой сложности, аудит, продвижение, а также поддержка вашего интернет ресурса - web2life.ru

TIMEWEB > Всегда больше, чем просто хостинг для ImageCMS!

4 Отредактировано Andrei_Ts (14-10-2016 17:49:18)

Re: Рандомный вывод товаров в виджете new_products

Ok, поставлю вопрос по-другому.

В виджете вывод новинок

{if count($products) > 0}
    <div class="horizontal-carousel">
        <section class="special-proposition special-proposition-new">
            <div class="frame-title title-fluid2">
                <div class="title">{$title}</div>
            </div>
            <ul class="items items-catalog table items-product animateListItems">
                {getOPI($products, array('opi_wishlist'=>true, 'opi_codeArticle' => true, 'opi_is' => true))}
            </ul>
        </section>
    </div>
{/if}

getOPI формирует какой-то массив выбранных товаров с меткой "новинка", я правильно понимаю? Если так, может есть смысл производить манипуляции именно с этим массивом? Что вообще это за функция getOPI?

Thumbs up Thumbs down

5

Re: Рандомный вывод товаров в виджете new_products

Из контроллера приходит огромный объект $products (на некоторых хостинга при попытке вардампа страница валится с ошибкой превышения памяти smile ). Этот объект передается в метод getOPI, который рендерит из товаров в этом объекте блок (виджет, категорию и т.д.). Поэтому нужно не с этим объектом манипулировать в представлении, а в контроллере или модели сразу делать рандомную выборку из БД.

Профессиональное создание сайтов любой сложности, аудит, продвижение, а также поддержка вашего интернет ресурса - web2life.ru

TIMEWEB > Всегда больше, чем просто хостинг для ImageCMS!