[Решено] Акции - вывод товаров случайным образом

Тема в разделе "OpenCart", создана пользователем Павел_Б, 10 мар 2013.

Статус темы:
Закрыта.
  1. Павел_Б

    Павел_Б

    Регистрация:
    12 янв 2013
    Сообщения:
    67
    Симпатии:
    7
    Здравствуйте.
    Подскажите пожалуйста, как сделать вовод случайных акционных товаров в модуль АКЦИИ.
    Сейчас выводятся первые 5 акционных товара, которые сортируются по названию. Как сделать Rendom?
    Всем спасибо :wink: и конечно + в репутацию))
    Вот пациент
     
  2. ruslan216455

    ruslan216455

    Регистрация:
    6 ноя 2012
    Сообщения:
    220
    Симпатии:
    22
    можно сделать простую выборку из базы написать на php
     
    Павел_Б нравится это.
  3. Bnopen

    Bnopen Команда форума

    Регистрация:
    3 мар 2013
    Сообщения:
    1.264
    Симпатии:
    534
    Павел_Б, ищем файл у себя - catalog/model/catalog/product.php
    Там находим функцию - getProductSpecials
    В этой функции ищем код:
    Код:
    if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
    if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
    $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
    } else {
    $sql .= " ORDER BY " . $data['sort'];
    }
    } else {
    $sql .= " ORDER BY p.sort_order";
    }
    Здесь меняем в помледнем else $sql .= " ORDER BY p.sort_order"; на $sql .= " ORDER BY RAND()";
    Т.О получаем код -
    Код:
    if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
    if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
    $sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
    } else {
    $sql .= " ORDER BY " . $data['sort'];
    }
    } else {
    $sql .= " ORDER BY RAND()";
    }
    Таким образом, по умолчанию должно выводится в случайном порядке.
    Отпишитесь как работает - т.к. случайный вывод товаров делал в категории - но такое же и должно работать для модуля акции - прописав по аналогии для этой функции.
     
    cereberlum нравится это.
  4. stifutkin

    stifutkin

    Регистрация:
    22 дек 2012
    Сообщения:
    172
    Симпатии:
    43
    Как вариант найти модуль JV_Products in module. Там реализована данная возможность.
     
  5. namza80

    namza80

    Регистрация:
    22 янв 2014
    Сообщения:
    1
    Симпатии:
    0
    ---
    Это что, прикол такой?
    Неужели ни кто не знает как сделать акции в 1.5.5.1 рандомно?
    Зря регистрировался что ли?
    ---
    Вот так можно сделать в рекомендуемых:
    В catalog/controller/module/featured.php перед строкой 21
    $products = array_slice($products, 0, (int)$setting['limit']);
    Вставляем функцию перемешивания массива в случайном порядке
    shuffle ($products);
     
  6. surlan

    surlan

    Регистрация:
    13 окт 2014
    Сообщения:
    1
    Симпатии:
    0
    В файле catalog/controller/module/special.php фрагмент:
    $this->data['products'][] = array(
    'product_id' => $result['product_id'],
    'thumb' => $image,
    'name' => $result['name'],
    'price' => $price,
    'special' => $special,
    'rating' => $rating,
    'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
    'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])
    );
    }

    Заменяете на:
    $this->data['products'][] = array(
    'product_id' => $result['product_id'],
    'thumb' => $image,
    'name' => $result['name'],
    'price' => $price,
    'special' => $special,
    'rating' => $rating,
    'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
    'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])
    );
    shuffle($this->data['products']);
    }

    Работает на 1.5.6.4
     
  7. Allaur

    Allaur

    Регистрация:
    5 дек 2013
    Сообщения:
    31
    Симпатии:
    1
    Нужно решение по сортировки товара в модуле акции ?
    Чтоб новые акции были первыми.
    Прописал в файле

    /catalog/controller/module/special.php

    Код:
    $data = array(
                'sort'  => 'p.date_added',
                'order' => 'DESC',
                'start' => 0,
                'limit' => $setting['limit']
            );
    Не помогло
     
  8. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Надо ещё в модели /catalog/model/catalog/product.php поправить метод getProductSpecials - добавить этот вариант сортировки в список разрешённых. Поскольку в ОК параметры сортировки передаются GET параметрами, список разрешённых значений - это защита от передачи инъекций.
     
    Allaur нравится это.
  9. Allaur

    Allaur

    Регистрация:
    5 дек 2013
    Сообщения:
    31
    Симпатии:
    1
    Да, заработало, благодарю
     
Статус темы:
Закрыта.