Перейти к содержанию
Официальный форум поддержки Simpla

Как для страниц категорий вывести в title цену самого дешевого товара


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

Всем привет!

 

Предположим у нас есть категория Майки, в которой 100 товаров, самая дешевая стоит 250 руб.

 

Как вывести в title этой категории "Цена от 250 руб."?

 

Насколько я вижу, title формируется в index.tpl, можно ли в нем получить минимальное значение цены из категории или это серьёзная доработка?

 

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

Всем привет!

 

Предположим у нас есть категория Майки, в которой 100 товаров, самая дешевая стоит 250 руб.

 

Как вывести в title этой категории "Цена от 250 руб."?

 

Насколько я вижу, title формируется в index.tpl, можно ли в нем получить минимальное значение цены из категории или это серьёзная доработка?

 

Значение $title

title формируется для разных страниц в view, то есть

  • Для категориии — /view/ProductsView.php
  • Для товара — /view/ProductView.php
  • Для главной — /view/MainView.php

в index.tpl он выводится (а не формируется), 

можно поменять примерно так задаь условие дял вывода на определенных страницах:  

{if $module=='ProductsView' } выводи чего-то своего {/if}

 

По наименьшей цене

На страница твоаров выводится только ограниченнео число товаров (например 20 из 3000), соответственно взять наименьшее — не верно, нужно брать наименьшее от 3000 :)

Для этого лучше сделать отдельный запрос в БД

 

 

Доработка пустяковая, но нужно понимать — что и где делать в коде

Изменено пользователем Maksclub
Ссылка на сообщение
Поделиться на другие сайты

Принцип такой: нужно перебрать товары с сортировкой от минимальной цены и на первом же товаре прервать цикл.

Если непонятно, напишите. 

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

Принцип такой: нужно перебрать товары с сортировкой от минимальной цены и на первом же товаре прервать цикл.

Если непонятно, напишите.

 

Вы хотите выбрать все товары с категории при сортировке от мин цены и взять у него цену? Тогда это самый нерациональный способ...

Уже хотя бы  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}
Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Опробовал предложенную функцию.

Во многих простых случаях дает неверные максимум и минимум.

Kors, я рад что тебе понравилось...
Ссылка на сообщение
Поделиться на другие сайты

Опробовал предложенную функцию.

Во многих простых случаях дает неверные максимум и минимум.

Пример таковых случаев\условий...

P.S. Он быстрее придумает свое платное решение нежели поможет кому-либо. Цыган ей богу!

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

 

Вы хотите выбрать все товары с категории при сортировке от мин цены и взять у него цену? Тогда это самый нерациональный способ...

Уже хотя бы  limit=1 ставили

Прошу прощения. Не break, а limit = 1, вы абсолютно правы. Не знаю, почему это решение по-вашему нерационально, ведь не нужно лезть в движок, всё решается на уровне шаблона, да и на базу почти нет дополнительных нагрузок - в запросе выбор всего одного товара.

Плюс этого метода в том, что можно выбрать несколько категорий. Например, у вас несколько разделов - уличные майки, майки с принтом, однотонные майки и т.д., а вывести нужно минимальную цену из всех маек.

Или другой пример: вывести минимальную цену рекомендованных маек.

Короче, всё от задач зависит.

Изменено пользователем question
Ссылка на сообщение
Поделиться на другие сайты

Попробуйте такую конструкцию в шаблоне

 

                                    {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

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

Пример таковых случаев\условий...

P.S. Он быстрее придумает свое платное решение нежели поможет кому-либо. Цыган ей богу!

Как-то даже неудобно на такой вопрос отвечать, если он от знатока...

Пример легко получить, даже если в категории всего 2 товара. Или даже один товар с двумя вариантами...

Если этих подсказок недостаточно и надо еще подробнее, сообщайте...

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

Прошу прощения. Не break, а limit = 1, вы абсолютно правы. Не знаю, почему это решение по-вашему нерационально, ведь не нужно лезть в движок, всё решается на уровне шаблона, да и на базу почти нет дополнительных нагрузок - в запросе выбор всего одного товара.

 

А Вы попробуйте практически выложить этот самый способ, где "всё решается на уровне шаблона". Наверняка завязнете в многочисленных ошибках и будете потом долго исправлять...

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...