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


Фото
- - - - -

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

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

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

#61 VladP

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

Опубликовано 02.05.2013 - 18:50

bondj136

 

 

вместо 

 

 

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

 

вставить

 

 

if(count($prices) > 0){
   $min_price = min($prices);
   $max_price = max($prices);
}
 


#62 bondj136

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

Опубликовано 02.05.2013 - 22:30

VladP спасибо, помогло



#63 Delious

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

Опубликовано 07.05.2013 - 17:34

До сих пор выводит запись NaN. С чем может быть связано??
Уже все перепроверил, как только мог.



#64 DarAmal

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

Опубликовано 07.05.2013 - 17:41

До сих пор выводит запись NaN. С чем может быть связано??
Уже все перепроверил, как только мог.

У меня такое же было. И это оказалось из-за версии. Ранее была версия 2.1.0.. но после обновления до 2.2 все стало нормально отображаться. Мой Вам совет, с начало обновитесь.



#65 chubr

chubr
  • Пользователь
  • 73 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Псков

Опубликовано 11.05.2013 - 06:58

После того, как синхронизировал с 1с или перенес на новый хостинг слайдер стал вести себя оч. странно: если кликаешь по ползунку, цена обновляется не сразу и может меняться хоть в большую хоть в меньшую сторону, хотя кликаешь правее… попытался объяснить)

+делаешь выборку, переходишь на следующую страницу с товаром и выборка пропадает

 

в чем может быть проблема? передобавил слайдер заново, поведение не изменилось



#66 artbe

artbe
  • Пользователь
  • 187 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 15.05.2013 - 10:10

ДД! Такая же ситуация, пытаюсь вывести сортировку по цене на главной странице.

 

В index.tpl вставил все что надо. Сам код + скрипт js + подключил jquery + стили + вставил саму форму:

<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>

+ еще в MainView.php сделал следующее:

<?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');
	}
}

Так вот цену он в поля заполняет! А вот сортировку по кнопке применить не делает! В чем проблема?!



#67 VladP

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

Опубликовано 18.05.2013 - 10:33

Судя по этому коду, то выбор товаров для вывода у вас в принципе не происходит, только для определения минимальной и максимальной цен



#68 playboy

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

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

Идиотека в голове 

Parse error: syntax error, unexpected T_REQUIRE_ONCE in /home/godrivec/public_html/api/Products.php on line 1

Все ввожу по инструкции 100%

делаю каждый шаг 

в итоге эта ошибка

Автор можешь помочь? Насыплю пару баксов только укажи ошибку ?



#69 osben

osben
  • Фрилансер
  • 795 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:UA, RU

Опубликовано 23.05.2013 - 21:19

кавычки забыли где то закрыть



#70 playboy

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

Опубликовано 24.05.2013 - 10:14

Я как бы руками ничего не делал, все по инструкции, скопировал вставил %)

Кто то может помочь с установкой ? 

 

кавычки забыли где то закрыть



#71 VladP

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

Опубликовано 24.05.2013 - 10:16

скопируй всё из api/Products.php и покажи здесь



#72 playboy

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

Опубликовано 25.05.2013 - 13:51

VladP

Разобрался

Вначале были ошибки в products.php  взял файл который был в вашем архиве

Но заметил не корректную работу фильтра

Например захожу в подкатегорию планшеты, у меня их на 2 листа, выставляю диапазон цен, в итоге фильтр отсеивает только те которые на первой странице, вторую страницу не трогает

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

 

 

Добавлено :

 

+ заметил что в разных подкатегориях ведет себя по разному, например видеорегистраторы работает корректно

Бытовая техника вообще не работает

 

Телефоны частично

 

Планшеты как описано выше что только на текущей странице

 

Могу выложить файлы что я редактировал

 

 

 

Делал по инструкции частично:

вначале отредактировал products.php

productsview.php

index.tpl - вставил java скрипт

хотел сначала реализовать на главное этот фильтр, после понял что он там не нужен

засунул

 

код по подсказке DarAmal

в 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

 

 

Итог фильтр отображается, красиво с ползунком в отличном стиле, но работает не корректно



#73 VladP

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

Опубликовано 26.05.2013 - 22:32

Ага, нужно хранить в куках или передавать не через POST, а GET

попробуйте в <form method="post"> убрать method="post",

 

$current_min_price = $this->request->post('min_price');
$current_max_price = $this->request->post('max_price');

 

заменить на 

 

$current_min_price = $this->request->get('min_price');

$current_max_price = $this->request->get('max_price');

 

 

если не поможет, завтра покажу как с куками сделать



#74 yoshkin

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

Опубликовано 17.06.2013 - 23:06


 

Сообщение удалено.

 

Сам все исправил)



#75 Robert

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

Опубликовано 21.06.2013 - 11:45

А как побороть ситуацию, когда товар уже отфильтрован и его на несколько страниц и при переходе на следующую страницу параметры диапазона цен в фильтре сбрасываются и нужно заново их вводить?



#76 VladP

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

Опубликовано 21.06.2013 - 13:48

использовать куки

 

что-то типа такого(в ProductsView.php сразу после $filter['visible'] = 1;):

 

 

        $path = '/products/';
        if(!empty($category_url))
            $path = '/catalog/'.$category_url;
        if(!empty($brand_url)
            $path = '/brands/'


        if(!isset($current_min_price) && empty($current_min_price)){
            if(isset($_COOKIE['min_price']))
                $current_min_price = $_COOKIE['min_price'];
            else
                unset($current_min_price);
        }
        else{
            setcookie("min_price", $current_min_price, time()+60*60*24*30, $path);
        }


        if(!isset($current_max_price) && empty($current_max_price)){
            if(isset($_COOKIE['max_price']))
                $current_max_price = $_COOKIE['max_price'];
            else
                unset($current_max_price);
        }
        else{
            setcookie("max_price", $current_max_price, time()+60*60*24*30, $path);
        }
 

 

сохраняет значения для каждой категории отдельно


#77 quiz

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

Опубликовано 30.06.2013 - 16:32

я застрял на последнем пункте, где написано 

 
"в файле с JS кодом"
куда текст вставлять надо?


#78 Александр Маттэ

Александр Маттэ
  • Пользователь
  • 113 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Екатеринбург

Опубликовано 01.07.2013 - 11:17

Спасибо, VladP, инструкция очень понятная, все работает! 



#79 partamelon

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

Опубликовано 03.07.2013 - 18:53

А как быть, если в категории более 5000 товаров? Страница попросту не открывается. Я пока так и не нашёл почему так сильно возрастает нагрузка на сервер. С отключённой фильтрацией категории открываются нормально. Помогает, если восстановить строку $limit = 100; в api/Products.php но лишь отчасти. Страницы открываются, но стоит зайти насколько раз и сервак ложится.
 



#80 Shpion

Shpion
  • Пользователь
  • 20 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:1.x, 2.x

Опубликовано 04.07.2013 - 15:57

Что - то я мучился, мучился так и неполучилось.(((







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

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

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