Всем привет!!!
В общем обратились с задачей такой:
У товара изначально цена 0 и она формируется от выбора опций. Нужно вывести в товаре минимальную сумму опции на странице категорий
Порывшись ради интереса в сети набрел на вот такую дич
причем много где так советуют.
Я считаю что запросы SELECT в цикле это зло, но вот опенкарт прямо пестрит ими. Допустим для вывода товаров на стр категорий в запросе и так есть цикл с запросом внутри, а тут еще добавляют вот такую шляпу.
В общем вот решение:
1. Идем в модель model/catalog/product. php, находим метод getProducts. Нужно добавить в запрос данные
в первых строках видим вот такое
можно после p.product_id добавить, допустим вот так чтоб было
вот это pov.product_id AS pid по сути не обязательно, но может кому надо будет
2. Далее идем чуть ниже и находим вот такую строку
и перед ней или после нее, я ставил перед ней, поставить вот такой доп запрос
3. Далее опять спускаемся еще ниже до самого цикла
и в цикле вставляем
4. Идем в контроллер категории controller/product/category.php . Примерно 189 строка, на нужен цикл который формирует данные на вывод
и в формирование массива $data['products'] добавить получение наших данных по опции, допустим после
добавить
Ну собственно и всё, теперь min_sum будет доступна в шаблоне в цикле формирования данных
В дальнейшем хочу составить нормальный вариант запроса на получение опций для продукта на страницу категорий и не лепить ту дичь которую советуют как скрин выше. Еще попытаюсь переделать запрос в методе getProducts без запроса в цикле посмотрим что выйдет.
В общем обратились с задачей такой:
У товара изначально цена 0 и она формируется от выбора опций. Нужно вывести в товаре минимальную сумму опции на странице категорий
Порывшись ради интереса в сети набрел на вот такую дич
причем много где так советуют.
Я считаю что запросы SELECT в цикле это зло, но вот опенкарт прямо пестрит ими. Допустим для вывода товаров на стр категорий в запросе и так есть цикл с запросом внутри, а тут еще добавляют вот такую шляпу.
В общем вот решение:
1. Идем в модель model/catalog/product. php, находим метод getProducts. Нужно добавить в запрос данные
в первых строках видим вот такое
php:
SELECT p.product_id, (SELECT AVG
можно после p.product_id добавить, допустим вот так чтоб было
php:
SELECT p.product_id, MIN(pov.price) AS sums, pov.product_id AS pid, (SELECT AVG
вот это pov.product_id AS pid по сути не обязательно, но может кому надо будет
2. Далее идем чуть ниже и находим вот такую строку
php:
$sql .= " LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id)";
и перед ней или после нее, я ставил перед ней, поставить вот такой доп запрос
php:
$sql .= " LEFT JOIN ".DB_PREFIX."product_option_value pov ON (pov.product_id = p.product_id)";
3. Далее опять спускаемся еще ниже до самого цикла
php:
foreach ($query->rows as $result) {
и в цикле вставляем
php:
$product_data[$result['product_id']]['min_opt'] = $result['sums'];
4. Идем в контроллер категории controller/product/category.php . Примерно 189 строка, на нужен цикл который формирует данные на вывод
php:
$results = $this->model_catalog_product->getProducts($filter_data);
foreach ($results as $result) {
и в формирование массива $data['products'] добавить получение наших данных по опции, допустим после
php:
'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url),
php:
'min_sum' => number_format($result['min_opt'], 2)
Ну собственно и всё, теперь min_sum будет доступна в шаблоне в цикле формирования данных
В дальнейшем хочу составить нормальный вариант запроса на получение опций для продукта на страницу категорий и не лепить ту дичь которую советуют как скрин выше. Еще попытаюсь переделать запрос в методе getProducts без запроса в цикле посмотрим что выйдет.