PROBLEMAS COM FILTROS PERSONALIZADOS



  • Olá !

    Possuo filtros personalizados em minha loja, feito por um programador há alguns anos atrás, um deles chama-se "MENOR PREÇO". Após adicionar produtos na categoria e clicar neste filtro, alguns produtos não respeitam a ordenação do menor preço ao maior.

    Estou com dúvidas se é o código personalizado que está gerando conflito na página category.html ou se é um problema e / ou configuração dos produtos.

    Para variar o XTECH não sabe me responder o que seria este problema, então estou procurando dicas, e se alguém puder ajudar ficarei super grata.

    Obrigada pela atenção

    Deixo o código category.html aqui abaixo

    {% extends _layout %}
    {% block content %}
    {% set type = request.get.type %}

    {# Produtos por linha (a homepage possui outras definicoes) #}
    {% if template_settings('select:cat_list_prod_cols') == '2' %}
    	{% set col_width = '6' %}
    {% elseif template_settings('select:cat_list_prod_cols') == '3' %}
    	{% set col_width = '4' %}
    {% elseif template_settings('select:cat_list_prod_cols') == '4' %}
    	{% set col_width = '3' %}
    {% elseif template_settings('select:cat_list_prod_cols') == '6' %}
    	{% set col_width = '2' %}
    {% endif %}
    
    {# Colunas de Produto na Busca #}
    {% if term is not empty %}
    	{% if template_settings('select:cat_list_prod_cols') == '2' %}
    		{% set col_width = '3' %}
    	{% elseif template_settings('select:cat_list_prod_cols') == '3' %}
    		{% set col_width = '3' %}
    	{% endif %}	
    {% endif %}	
    
    {% import 'product_listing.html' as product_listing %}
    <div class="row">
    	<div class="col-xs-12 visible-lg visible-md">
    		{% include 'breadcrumbs.html' %}
    	</div>
    </div>
    <div class="row">
        {% if template_settings('if:sidebar') %}
    		{% if term is empty %}
    			<div class="col-lg-3 sidebar visible-lg visible-md visible-sm">
    				<div class="row">
    					{# Categorias #}
    				    {% if categories[category.root_category].children|length > 0 %}
        					
        					<div style="display:none;" class="col-xs-12">
        						<div class="side-header"><i class="glyphicon glyphicon-th-list"></i> ESCOLHA O MODELO</div>
        						<ul>
        						    {% for category_group in categories[category.root_category].children %}
            							<li class="{{ category_group.category.id == category.id ? 'active' : 'inactive' }}">
            								<a href="{{ site_url(categories[category.root_category].category.slug ~ '/' ~ category_group.category.slug) }}">{{ category_group.category.name }}</a>
            							</li>
            							{% for cgc in category_group.children %}
            							    <li class="child {{ cgc.category.id == category.id ? 'active' : 'inactive' }}">
                								<a href="{{ site_url(categories[category.root_category].category.slug ~ '/' ~ category_group.category.slug ~ '/' ~ cgc.category.slug) }}">{{ cgc.category.name }}</a>
                							</li>
            							{% endfor %}
        						    {% endfor %}
        						</ul>
        					</div>
        					
        				{% endif %}
    					{# Filtros Selecionados #}
    					<div class="col-xs-12">
    						{% if selected_properties|length > 0 or selected_options|length > 0 or price_max > 0 %}
    						<div class="side-header"><i class="glyphicon glyphicon-ok"></i> {{ 'Filtros Selecionados'|trans({'en':'Selected Filters'}) }}</div>
    						<ul class="active-filters list-unstyled buffer-bottom-md" style="display:none;">
    							{% for property in selected_properties %}
    							<li><a class="sub" href="#filter_{{ property }}"></a></li>
    							{% endfor %}
    							{% for option in selected_options %}
    							<li><a class="sub" href="#filter_{{ option }}"></a></li>
    							{% endfor %}
    							{% if price_max %}
    							<li><a class="price-max" href="#">{{ price_max }}</a></li>
    							{% endif %}
    						</ul>
    						<script type="text/javascript">
    							$(document).ready(function(){
    								$('.active-filters .price-max').html('<i class="glyphicon glyphicon-remove"></i> ' + $('.price-filters .active').text());
    								$('.active-filters .price-max').click(function(e){
    									e.preventDefault();
    									$('.price-filters .all').trigger('click');
    								});
    								$('.active-filters .sub').each(function(){
    									$filter = $($(this).attr('href'));
    									$(this).html('<i class="glyphicon glyphicon-remove"></i> ' + $filter.text());
    									$(this).click(function(e){
    										e.preventDefault();
    								 		$($(this).attr('href') + '.sub').trigger('click');
    									});
    								});
    								$('.active-filters').show();
    							});
    						</script>
    						{% endif %}
    					</div>
    					{# Filtros #}
    					<div class="col-xs-12">
    						<div class="side-header"><i class="glyphicon glyphicon-filter"></i> {{ 'Filtrar Por'|trans({'en':'Filter by'}) }}</div>
    	   		 			<ul class="filters-side filters price-filters">
    						{% for property in properties %}
    						    {% if category.id in property.category.on_category_ids or property.category.on_category_ids[0] == '' %}
        						    {% if property.children|count > 0 %}
        				          	  	{% for child in property.children %}
        				          	  	    {% if category.id in child.category.on_category_ids or child.category.on_category_ids[0] == '' %}
        					          	  	    {% if cat_set == 0 %}
        					          	  	        {% set property_name = property.category.name %}
        					          	  	        {% set cat_set = 1 %}
        					          	  	    {% endif %}
        					          	  	    {% if child.category.product_count > 0 %}
            					          	  	    {% if property_name is not empty %}
                									    <li><span>{{ property_name }}</span></li>
                									    {% set property_name = '' %}
            									    {% endif %}
                				          	    	<li class="child">
                				          	    		<a id="filter_{{ child.category.id }}" class="sub" href="#filter_property{{ child.category.id }}">{{ child.category.name }}</a>
                				          	    	</li>
        									    {% endif %}
    									    {% endif %}
        				          	  	{% endfor %}
        						    {% endif %}
    						    {% endif %}
    						{% endfor %}
    
    						{% for option in global_options %}
    						    {% if option.values|count > 0 %}
    			          	  		{% if option.name|lower|trim != 'cor' and option.name|lower|trim != 'cores' %}
    					          	  	{% for value in option.values %}
    					          	  	    {% if loop.first %}
    					          	  	        {% set option_name = option.name %}
    					          	  	    {% endif %}
    					          	  	    {% if value.product_count > 0 %}
        					          	  	    {% if option_name is not empty %}
        									    <li><span>{{ option_name }}</span></li>
        									    {% set option_name = '' %}
        									    {% endif %}
        					          	    	<li class="child">
        					      			   		<a id="filter_{{ value.id }}" class="sub" href="#filter_option{{ value.id }}">{{ value.name }}</a>
        				          	    		</li>
        				          	    		{% endif %}
    					          	  	{% endfor %}
    		          	    		{% endif %}
    						    {% endif %}
    						{% endfor %}
    
    						{% set range = pricerange.max - pricerange.min %}
    						{% set first_range = pricerange.min + (range / 3) %}
    						{% set second_range = pricerange.min + (range / 2) %}
    
    						{% if range > 0 %}
    							<li><span>{{ 'Preço'|trans({'en':'Price Range'}) }}</span></li>
    					  		<li class="child">
    					  			<a class="sub{{ price_max ? '' : ' active' }} all" href="#" data-min="" data-max="">{{ 'Todos'|trans({'en':'All'}) }}</a>
    				  			</li>
    					  	    <li class="child">
    					  	    	<a class="sub{{ price_max == first_range|round ? ' active' : '' }}" href="#" data-min="{{ pricerange.min }}" data-max="{{ first_range|round }}">{{ pricerange.min|format_currency }} - {{ first_range|round|format_currency }}</a>
    				  	    	</li>
    					  	    <li class="child">
    					  	    	<a class="sub{{ price_max == second_range|round ? ' active' : '' }}" href="#" data-min="{{ first_range|round }}" data-max="{{ second_range|round }}">{{ first_range|round|format_currency }} - {{ second_range|round|format_currency }}</a>
    				  	    	</li>
    					  	    <li class="child">
    					  	    	<a class="sub{{ price_max == pricerange.max ? ' active' : '' }}" href="#" data-min="{{ second_range|round }}" data-max="{{ pricerange.max }}">{{ second_range|round|format_currency }} - {{ pricerange.max|format_currency }}</a>
    				  	    	</li>
    						{% endif %}
    						</ul>
    					</div>
    				</div>
    			</div>
    		{% endif %}
    	{% endif %}
    	{# Se for busca, a listagem e full #}
    	{% if term is not empty or template_settings('if:sidebar') == 0 %}
    	<div class="col-xs-12">
    	{% else %}
    	<div class="col-lg-9 col-xs-12">
    	{% endif %}
    		<div class="row">
    			<div class="col-xs-12">
    				{# Titulo da Página #}
    				{% if term is not empty %}
    					<h2 class="category-header">{{ "Resultado da busca por"|trans({'en':'Results with'}) }} {{ term }}</h2>
    				{% else %}
    					<h2 class="category-header">{{ category.name }}</h2>
    				{% endif %}
    			</div>
    			{% if category.image is not empty %}
    				<div class="col-xs-12 category-img hidden-xs">
    					{{ category_img(category, 'full', true) }}
    				</div>
    			{% endif %}
    		</div>
    		
    		
    		
    
    		<div class="row">
    			<div id="filter-widget" class="col-xs-12">
    				{{ global_css('filters.css', true) }}
    				{{ global_js('filters.js', true) }}
    				{# Visivel #}
    				{% if template_settings('if:catalog') == 0 %}
    				<nav class="cat_options">
    					<ul class="filters order">
    					    <li>{{ "Organizar por:"|trans({'en':'Order by:'}) }}</li>
    					    <li><a class="sub" href="#order_price">{{"Menor Preço"|trans({'en':'Cheapest'})}}</a></li>
    					    <li><a class="sub" href="#order_bestseller">{{"Mais Vendidas"|trans({'en':'Most Sold'})}}</a></li>
    					    <li><a class="sub" href="#order_rating">{{"Melhor Nota"|trans({'en':'Best Rating'})}}</a></li>
    					</ul>
    				</nav>
    				{% endif %}
    				{# Invisivel #}
    				{{ form_open(current_url(), {'id': 'filter_form', 'style': 'display:none;', 'method': 'get'}) }}
    				    {% for prop in properties %}
    				        {% for child in prop.children %}
    				            <input type="checkbox" name="properties[]" value="{{ child.category.id }}" id="filter_property{{ child.category.id }}" {{ selected_properties and child.category.id in selected_properties ? ' checked' : '' }}/>
    				        {% endfor %}
    				    {% endfor %}
    				    {% for option in global_options %}
    				        {% for value in option.values %}
    				            <input type="checkbox" name="options[]" value="{{ value.id }}" id="filter_option{{ value.id }}" {{ selected_options and value.id in selected_options ? ' checked' : '' }}/>
    				        {% endfor %}
    				    {% endfor %}
    				    <input type="checkbox" name="price_max" value="{{ price_max ? price_max : '' }}"{{ price_max ? ' checked' : '' }} />
    				    <input type="checkbox" name="price_min" value="{{ price_min ? price_min : '' }}"{{ price_min ? ' checked' : '' }} />
    				    <input class="order_by_hidden" type="checkbox" name="by" value="price/asc" id="order_price" {{ sort_by == 'sort_price' ? 'checked' : '' }}/>
    				    <input class="order_by_hidden" type="checkbox" name="by" value="bestsellers/asc" id="order_bestseller" {{ sort_by == 'quantity_order' ? 'checked' : '' }}/>
    				    <input class="order_by_hidden" type="checkbox" name="by" value="rating/desc" id="order_rating" {{ sort_by == 'rating' ? 'checked' : '' }}/>
    				{{ form_close() }}
    			</div>
    		</div>
    		<div class="row prod-list cat-prod-list">
    			{{ product_listing.script() }}
    			{% for product in products %}
    				{{ product_listing.item(product, category, col_width) }}
    			{% else %}
    				<div class="col-xs-12">
    					<p class="no-prod">
    						{% if term is not empty %}
    							{{ 'Não foi encontrado resultados para sua busca.'|trans({'en':'No results found using this terms.'}) }}
    						{% else %}
    							{{ lang('no_products') }}
    						{% endif %}
    					</p>
    				</div>
    			{% endfor %}
    		</div>

  • Dev

    Olá @cigm, isso é provável de alguns itens na sua loja para estar com esse problema:

    • Produtos do tipo "compre junto" não tem efeito desse filtro;
    • Produtos indisponíveis e/ou de estoque 0, não tem esse efeito, geralmente eles aparecem por último na lista.

    OSB: Olhando o código, ele está tudo certo na questão do filtro, ele está padrão da plataforma.