Перейти к содержимому


Фото
- - - - -

UI Slider с фильтрацией цен

цена фильтр диапазон ui slider

  • Чтобы отвечать, сперва войдите на форум
111 ответов в теме

#41 DarAmal

DarAmal
  • Пользователь
  • 703 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 13.04.2013 - 12:56

а как сделать так, что бы и на главной работала? а то поставил в main.tpl, а там в инбоксах NaN



#42 VladP

VladP
  • Пользователь
  • 46 сообщений

Опубликовано 13.04.2013 - 18:02

взять код для определения минимальной и максимальной цены из ProductsView и вставить в MainView



#43 DarAmal

DarAmal
  • Пользователь
  • 703 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 13.04.2013 - 19:43

взять код для определения минимальной и максимальной цены из ProductsView и вставить в MainView

В этом случай я так понял будут отображаться максимум и минимум цен, что находятся на главной?

Мне нужно чтобы на главной отображались цены максимум и минимум всего каталога.



#44 VladP

VladP
  • Пользователь
  • 46 сообщений

Опубликовано 14.04.2013 - 00:26

это зависит от параметров которые передаются при получении товаров, если не указывать category_id, то будут учитываться все товары



#45 DarAmal

DarAmal
  • Пользователь
  • 703 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 14.04.2013 - 08:44

Я сделал так, как сказали - скопировал код, что в ProductView и поставил в MainView и вот как выглядеть:

<?PHP

require_once('View.php');


class MainView extends View
{

	function fetch()
	{
		$current_min_price = $this->request->post('min_price');
		$current_max_price = $this->request->post('max_price');
		
		$filter = array();
		$filter['visible'] = 1;	

		$filter['min_price'] = $current_min_price;
		$filter['max_price'] = $current_max_price;
		
		
		if($this->page)
		{
			$this->design->assign('meta_title', $this->page->meta_title);
			$this->design->assign('meta_keywords', $this->page->meta_keywords);
			$this->design->assign('meta_description', $this->page->meta_description);
		}

		
		unset($filter['min_price']);
		unset($filter['max_price']);
		unset($filter['limit']);
		foreach($this->products->get_products($filter) as $p)
			$products_prices[$p->id] = $p;
		
		if(!empty($products_prices))
		{
			$prices_products_ids = array_keys($products_prices);
			$prices_variants = $this->variants->get_variants(array('product_id'=>$prices_products_ids));
			foreach($prices_variants as &$prices_variant)
				$prices[] = $prices_variant->price;
		}
		
		$min_price = 0;
		$max_price = 0;
		$min_price = min($prices);
		$max_price = max($prices);
		
		if(!isset($current_min_price) && empty($current_min_price))
			$current_min_price = $min_price;
		if(!isset($current_max_price) && empty($current_max_price))
			$current_max_price = $max_price;
			
		$this->design->assign('minprice', $min_price);
		$this->design->assign('maxprice', $max_price);
		$this->design->assign('current_minprice', $current_min_price);
		$this->design->assign('current_maxprice', $current_max_price);
		
		return $this->design->fetch('main.tpl');
	}
}

также в main.tpl вставил код отображения.

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

В чем тут может быть сбой? Подскажите, пожалуйста!



#46 VladP

VladP
  • Пользователь
  • 46 сообщений

Опубликовано 14.04.2013 - 14:17

Здесь нет выбора товаров, только максимальная-минимальная цены. Если используется смарти функция для новых(или рекомендуемых) товаров, то нужно использовать фильтр мин-макс в View.php



#47 iodjin

iodjin
  • Пользователь
  • 58 сообщений
  • Дизайн
  • Версия CMS:2.x

Опубликовано 22.04.2013 - 12:22

Добрый день. Вроде поставил. Вроде работает, но выводит не так, как хотелось бы.

676ef88e60b4.jpg

 

+на странице категории перестал отображаться слайдер, хотя на главной и других страницах работает. 

 

Помогите, пожалуйста. Заранее благодарен.



#48 iodjin

iodjin
  • Пользователь
  • 58 сообщений
  • Дизайн
  • Версия CMS:2.x

Опубликовано 22.04.2013 - 12:27

Добрый день. Вроде поставил. Вроде работает, но выводит не так, как хотелось бы.

676ef88e60b4.jpg

 

+на странице категории перестал отображаться слайдер, хотя на главной и других страницах работает. 

 

Помогите, пожалуйста. Заранее благодарен.

 

Может, кто-нибудь свои стили скинет? Видать он конфликтует(пересекается) со стилями слайдера, поэтому слайдер картинок не отображается.



#49 DarAmal

DarAmal
  • Пользователь
  • 703 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 22.04.2013 - 13:35

Тут не в стилях дело, а в конфликте JavaScript-ов.

видимо 2 раза jquery-скрипт идет.



#50 iodjin

iodjin
  • Пользователь
  • 58 сообщений
  • Дизайн
  • Версия CMS:2.x

Опубликовано 22.04.2013 - 13:44

Тут не в стилях дело, а в конфликте JavaScript-ов.

видимо 2 раза jquery-скрипт идет.

А стили как поменять, а то на всю страницу растянуто. ?

И цена из-за этого сверху и снизу получается.



#51 DarAmal

DarAmal
  • Пользователь
  • 703 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 22.04.2013 - 13:53

Я вставил коды в products.tpl :

в самом начале:

{* Список товаров *}
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
<link rel="stylesheet" href="design/{$settings->theme|escape}/css/slider-filt.css" />

<script type="text/javascript">
	$(document).ready(function() {
		var minprice = parseInt($('#minprice').val());
		var maxprice = parseInt($('#maxprice').val());

		var current_minprice = parseInt($('#current_minprice').val());
		var current_maxprice = parseInt($('#current_maxprice').val());
		$("input#minCost").val(current_minprice);
		$("input#maxCost").val(current_maxprice);
		$("#slider").slider({
		    min: minprice,
		    max: maxprice,
		    values: [current_minprice,current_maxprice],
		    range: true,
		    slide: function(event, ui){
				$("input#minCost").val($("#slider").slider("values",0));
				$("input#maxCost").val($("#slider").slider("values",1));
		    }
		});
	});

	
</script>

и там где будет отображаться фильтр:

{* Сортировка *}
{if $products|count>0}
<div class="sort">
	Сортировать по 
	<a {if $sort=='position'} class="selected"{/if} href="{url sort=position page=null}">умолчанию</a>/
	<a {if $sort=='price'}    class="selected"{/if} href="{url sort=price page=null}">цене</a>/
	<a {if $sort=='name'}     class="selected"{/if} href="{url sort=name page=null}">названию</a>/
    
    <div id="slider-filtr">
    <input type="hidden" value="{$minprice}" id="minprice">
    <input type="hidden" value="{$maxprice}" id="maxprice">
    <input type="hidden" value="{$current_minprice}" id="current_minprice">
    <input type="hidden" value="{$current_maxprice}" id="current_maxprice">
    
    <form method="post">
    <div class="cena">от:</div>
    <input type="text" class="slider-input" name="min_price" id="minCost" />
    <div id="slider"></div>
    <div class="cena">до:</div><input type="text" class="slider-input" name="max_price" id="maxCost">
    <div class="cena"><span class="currency">{$currency->sign|escape}</span> </div><input type="submit" class="slider-submit" value="Применить">
    </form>
    </div>
</div>
{/if}

а в css-папку закинул вот этот файл: slider-filtr.css



#52 iodjin

iodjin
  • Пользователь
  • 58 сообщений
  • Дизайн
  • Версия CMS:2.x

Опубликовано 22.04.2013 - 14:07

Я вставил коды в products.tpl :

в самом начале:

{* Список товаров *}
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.js"></script>
<link rel="stylesheet" href="design/{$settings->theme|escape}/css/slider-filt.css" />

<script type="text/javascript">
	$(document).ready(function() {
		var minprice = parseInt($('#minprice').val());
		var maxprice = parseInt($('#maxprice').val());

		var current_minprice = parseInt($('#current_minprice').val());
		var current_maxprice = parseInt($('#current_maxprice').val());
		$("input#minCost").val(current_minprice);
		$("input#maxCost").val(current_maxprice);
		$("#slider").slider({
		    min: minprice,
		    max: maxprice,
		    values: [current_minprice,current_maxprice],
		    range: true,
		    slide: function(event, ui){
				$("input#minCost").val($("#slider").slider("values",0));
				$("input#maxCost").val($("#slider").slider("values",1));
		    }
		});
	});

	
</script>

и там где будет отображаться фильтр:

{* Сортировка *}
{if $products|count>0}
<div class="sort">
	Сортировать по 
	<a {if $sort=='position'} class="selected"{/if} href="{url sort=position page=null}">умолчанию</a>/
	<a {if $sort=='price'}    class="selected"{/if} href="{url sort=price page=null}">цене</a>/
	<a {if $sort=='name'}     class="selected"{/if} href="{url sort=name page=null}">названию</a>/
    
    <div id="slider-filtr">
    <input type="hidden" value="{$minprice}" id="minprice">
    <input type="hidden" value="{$maxprice}" id="maxprice">
    <input type="hidden" value="{$current_minprice}" id="current_minprice">
    <input type="hidden" value="{$current_maxprice}" id="current_maxprice">
    
    <form method="post">
    <div class="cena">от:</div>
    <input type="text" class="slider-input" name="min_price" id="minCost" />
    <div id="slider"></div>
    <div class="cena">до:</div><input type="text" class="slider-input" name="max_price" id="maxCost">
    <div class="cena"><span class="currency">{$currency->sign|escape}</span> </div><input type="submit" class="slider-submit" value="Применить">
    </form>
    </div>
</div>
{/if}

а в css-папку закинул вот этот файл: slider-filtr.css

Вот спасибо большое! Помогло :)



#53 DarAmal

DarAmal
  • Пользователь
  • 703 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 22.04.2013 - 14:08

Всегда пожалуйста ;)



#54 iodjin

iodjin
  • Пользователь
  • 58 сообщений
  • Дизайн
  • Версия CMS:2.x

Опубликовано 23.04.2013 - 16:47

DarAmal, не подскажешь еще почему слайдер не отображается картинок. js как-то конфликтуют?

#55 DarAmal

DarAmal
  • Пользователь
  • 703 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 23.04.2013 - 16:53

какие именно картинки Вы имеете ввиду?



#56 iodjin

iodjin
  • Пользователь
  • 58 сообщений
  • Дизайн
  • Версия CMS:2.x

Опубликовано 23.04.2013 - 17:15

DarAmal, все, разобрался. Просто слайдер от Noxton'a конфликтовал с этим слайдером цен. js конфликтовали. 

#57 DarAmal

DarAmal
  • Пользователь
  • 703 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 23.04.2013 - 17:16

ок тогда. Удачи!



#58 just_simao

just_simao
  • Пользователь
  • 192 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 24.04.2013 - 16:05

Автору респект. Не пожадничал и выложил готовую реализацию бесплатно.



#59 digimon

digimon
  • Пользователь
  • 68 сообщений
  • Версия CMS:2.x

Опубликовано 29.04.2013 - 07:33

Можно ли реализовать? На главной стоит обычный поиск а справа фильтр цен....

к примеру в поиск вбиваешь HTC и выставляешь ценовой диапазон и жмякаешь применить....и выдается соответсвующая инфа! типа HTC от 1700-5000 руб



#60 bondj136

bondj136
  • Пользователь
  • 9 сообщений
  • Версия CMS:2.x

Опубликовано 01.05.2013 - 15:12

Добрый день. Слайдер установил, работает, автору спасибо. Только вот если зайти в категорию, где товаров нет или еще не заполнены, вылезает следующая ошибка:

 

Warning: Wrong parameter count for min() in .../view/ProductsView.php on line 206

Warning: Wrong parameter count for max() in .../view/ProductsView.php on line 207

Warning: Cannot modify header information - headers already sent by (output started at ...l/view/ProductsView.php:206) in .../index.php on line 33

 

 

ProductsView.php


$min_price = 0;
$max_price = 0;
$min_price = min($prices);
$max_price = max($prices);

 

 

 

index.php

// Выводим результат
    header("Content-type: text/html; charset=UTF-8");    
    print $res;

 

Буду крайне благодарен за помощь в устранении ошибки.







Также с меткой «цена, фильтр, диапазон, ui, slider»

0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых