maxonemore Опубликовано 9 апреля, 2018 Жалоба Поделиться Опубликовано 9 апреля, 2018 Всем привет! Предположим у нас есть категория Майки, в которой 100 товаров, самая дешевая стоит 250 руб. Как вывести в title этой категории "Цена от 250 руб."? Насколько я вижу, title формируется в index.tpl, можно ли в нем получить минимальное значение цены из категории или это серьёзная доработка? Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 9 апреля, 2018 Жалоба Поделиться Опубликовано 9 апреля, 2018 (изменено) Всем привет! Предположим у нас есть категория Майки, в которой 100 товаров, самая дешевая стоит 250 руб. Как вывести в title этой категории "Цена от 250 руб."? Насколько я вижу, title формируется в index.tpl, можно ли в нем получить минимальное значение цены из категории или это серьёзная доработка? Значение $titletitle формируется для разных страниц в view, то естьДля категориии — /view/ProductsView.phpДля товара — /view/ProductView.phpДля главной — /view/MainView.phpв index.tpl он выводится (а не формируется), можно поменять примерно так задаь условие дял вывода на определенных страницах: {if $module=='ProductsView' } выводи чего-то своего {/if} По наименьшей ценеНа страница твоаров выводится только ограниченнео число товаров (например 20 из 3000), соответственно взять наименьшее — не верно, нужно брать наименьшее от 3000 Для этого лучше сделать отдельный запрос в БД Доработка пустяковая, но нужно понимать — что и где делать в коде Изменено 9 апреля, 2018 пользователем Maksclub Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 9 апреля, 2018 Жалоба Поделиться Опубликовано 9 апреля, 2018 Принцип такой: нужно перебрать товары с сортировкой от минимальной цены и на первом же товаре прервать цикл.Если непонятно, напишите. Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 9 апреля, 2018 Жалоба Поделиться Опубликовано 9 апреля, 2018 (изменено) Принцип такой: нужно перебрать товары с сортировкой от минимальной цены и на первом же товаре прервать цикл.Если непонятно, напишите. Вы хотите выбрать все товары с категории при сортировке от мин цены и взять у него цену? Тогда это самый нерациональный способ...Уже хотя бы limit=1 ставили ------------------------------------------------1) в api/Products.php добавляем: /** * Функция возвращает максимальную и минимальную цену * @retval object */ public function max_min_products($filter = array()) { $category_id_filter = ''; $brand_id_filter = ''; $product_id_filter = ''; $keyword_filter = ''; $visible_filter = ''; $is_featured_filter = ''; $in_stock_filter = ''; $discounted_filter = ''; $features_filter = ''; if(!empty($filter['category_id'])) $category_id_filter = $this->db->placehold('INNER JOIN __products_categories pc ON pc.product_id = p.id AND pc.category_id in(?@)', (array)$filter['category_id']); if(!empty($filter['brand_id'])) $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']); if(!empty($filter['id'])) $product_id_filter = $this->db->placehold('AND p.id in(?@)', (array)$filter['id']); if(isset($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) { $kw = $this->db->escape(trim($keyword)); if($kw!=='') $keyword_filter .= $this->db->placehold("AND (p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))"); } } if(isset($filter['featured'])) $is_featured_filter = $this->db->placehold('AND p.featured=?', intval($filter['featured'])); if(isset($filter['in_stock'])) $in_stock_filter = $this->db->placehold('AND (SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock'])); if(isset($filter['discounted'])) $discounted_filter = $this->db->placehold('AND (SELECT 1 FROM __variants pv WHERE pv.product_id=p.id AND pv.compare_price>0 LIMIT 1) = ?', intval($filter['discounted'])); if(isset($filter['visible'])) $visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible'])); if(!empty($filter['features']) && !empty($filter['features'])) foreach($filter['features'] as $feature=>$value) $features_filter .= $this->db->placehold('AND p.id in (SELECT product_id FROM __options WHERE feature_id=? AND value=? ) ', $feature, $value); $query = "SELECT MIN(NULLIF(pv.price, 0)) as min_price, MAX(NULLIF(pv.price, 0)) as max_price FROM __products AS p RIGHT JOIN __variants pv ON pv.product_id=p.id $category_id_filter WHERE 1 $brand_id_filter $product_id_filter $keyword_filter $is_featured_filter $in_stock_filter $discounted_filter $visible_filter $features_filter "; $this->db->query($query); return $this->db->result(); }[/code] 2) view/ProductsView.php добавляем после [code=auto:0]if(!empty($products)) {такой код:$this->design->assign('product_prices', $this->products->max_min_products($filter)); после этого в шаблоне получаем максимальную и минимальную цену {$product_prices->min_price} {$product_prices->max_price} Изменено 9 апреля, 2018 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 9 апреля, 2018 Жалоба Поделиться Опубликовано 9 апреля, 2018 Опробовал предложенную функцию. Во многих простых случаях дает неверные максимум и минимум. Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 9 апреля, 2018 Жалоба Поделиться Опубликовано 9 апреля, 2018 Опробовал предложенную функцию. Во многих простых случаях дает неверные максимум и минимум.Kors, я рад что тебе понравилось... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 9 апреля, 2018 Жалоба Поделиться Опубликовано 9 апреля, 2018 Опробовал предложенную функцию. Во многих простых случаях дает неверные максимум и минимум.Пример таковых случаев\условий... P.S. Он быстрее придумает свое платное решение нежели поможет кому-либо. Цыган ей богу! Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 9 апреля, 2018 Жалоба Поделиться Опубликовано 9 апреля, 2018 (изменено) Вы хотите выбрать все товары с категории при сортировке от мин цены и взять у него цену? Тогда это самый нерациональный способ...Уже хотя бы limit=1 ставилиПрошу прощения. Не break, а limit = 1, вы абсолютно правы. Не знаю, почему это решение по-вашему нерационально, ведь не нужно лезть в движок, всё решается на уровне шаблона, да и на базу почти нет дополнительных нагрузок - в запросе выбор всего одного товара.Плюс этого метода в том, что можно выбрать несколько категорий. Например, у вас несколько разделов - уличные майки, майки с принтом, однотонные майки и т.д., а вывести нужно минимальную цену из всех маек.Или другой пример: вывести минимальную цену рекомендованных маек.Короче, всё от задач зависит. Изменено 9 апреля, 2018 пользователем question Цитата Ссылка на сообщение Поделиться на другие сайты
question Опубликовано 9 апреля, 2018 Жалоба Поделиться Опубликовано 9 апреля, 2018 Попробуйте такую конструкцию в шаблоне {get_products var=cat_pr category_id=тут напишите номер категории featured=0 limit=1 sort=price} {foreach $cat_pr as $product} {$product->variant->price|convert} {/foreach}Номер категории, если вы в ней находитесь, можно получить как $category->id Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 10 апреля, 2018 Жалоба Поделиться Опубликовано 10 апреля, 2018 Пример таковых случаев\условий... P.S. Он быстрее придумает свое платное решение нежели поможет кому-либо. Цыган ей богу!Как-то даже неудобно на такой вопрос отвечать, если он от знатока... Пример легко получить, даже если в категории всего 2 товара. Или даже один товар с двумя вариантами... Если этих подсказок недостаточно и надо еще подробнее, сообщайте... Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 10 апреля, 2018 Жалоба Поделиться Опубликовано 10 апреля, 2018 Прошу прощения. Не break, а limit = 1, вы абсолютно правы. Не знаю, почему это решение по-вашему нерационально, ведь не нужно лезть в движок, всё решается на уровне шаблона, да и на базу почти нет дополнительных нагрузок - в запросе выбор всего одного товара. А Вы попробуйте практически выложить этот самый способ, где "всё решается на уровне шаблона". Наверняка завязнете в многочисленных ошибках и будете потом долго исправлять... Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.