Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

[Подгдержка] FilterPro Mega


Recommended Posts

Добрый вечер.

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

Необходимо добавить код, предложенный Tom :

В файле category.tpl

 

найти

<div class="cart">
        <input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" />
</div>

заменить на

<div class="cart">
     <script type="text/javascript">
     function addQtyToCart(product_id) {
  var qty = $('.item-' + product_id).val();
  if ((parseFloat(qty) != parseInt(qty)) || isNaN(qty)) {
    qty = 1;
  }
  addToCart(product_id, qty);
}
</script>
   Кол-во:
       <input type="text" value="1" size="2" class="item-<?php echo $product['product_id']; ?>" />
      <input type="button" value="<?php echo $button_cart; ?>" onclick="addQtyToCart('<?php echo $product['product_id']; ?>');" class="button" />
</div>

Код синдартного category.tpl перезаписывается кодом из файла /catalog/view/theme/default/template/module/filterpro.tpl.

 

У меня никак не получается адаптировать вышеприведённый код к коду в /catalog/view/theme/default/template/module/filterpro.tpl:

<div class="cart"><a onclick="addToCart('${product_id}');" class="button"><span><?php echo $button_cart; ?></span></a></div>

Подсиновка значения ${product_id} в добавляемом когде почему-то не происходит.

Подскажите, пожалуйси, куда копать.

Разобрался сам.

<div class="cart"><a onclick="addToCart('${product_id}');" class="button"><span><?php echo $button_cart; ?></span></a></div>

Меняем на

<div class="cart">
  <input type="text" value="1" size="1" class="item-${product_id}" />
  <input type="button" value="<?php echo $button_cart; ?>" onclick="addQtyToCart('${product_id}');" class="button" />
</div>

А скрипт

<script type="text/javascript">
    function addQtyToCart(product_id) {
        var qty = $('.item-' + product_id).val();
        if ((parseFloat(qty) != parseInt(qty)) || isNaN(qty)) {
            qty = 1;
        }
        addToCart(product_id, qty);
    }
</script>

Выносим за прегделы скрипи с корзиной, добавляя код в самый конец файла /catalog/view/theme/default/template/module/filterpro.tpl перед

</div>
<?php } ?>
Link to comment
Share on other sites


Привет.

 

У меня тут сложилась довольно интересная ситуация.

 

На сайте усиновлен фильтр Про. На всех браузерах рилииет норм. А вот на айпад эйр в браузере Сафари при выпотому чторе бренда в фильтре , и все товары синовятся одинаковыми

crhby - http://prntscr.com/2dtavi

 

  сайт ifeelbe.com

  версия модуля filterpro_v2.4.2.4.2(seo)-encoded

Link to comment
Share on other sites

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

Link to comment
Share on other sites


Не хваиет сортировки товаров на страниэто фильтра по дате изменения (и, что в админке руками назначаеться):

В категориях я это реализовал вписал соответствующие изменения p.date_available

Вот как это было реализовано

Ув freelancer - помогите пожалуйси с допилом этот фили.

Link to comment
Share on other sites


 

 

первый ответ в теме

 

В первом ответе по этот теме описано как убрать скобки у атрибутов, производителей и в опциях, а как убираются скобки у КАТЕГОРИЙ я не нашел.

Код формиравания строки вывода в файле filterpro.min.js для атрибутов, производителей и опций отличаеться от вывода категорий, если для первых все наглядно понятно то для категорий формирования строки вывода я не нашел ни в filterpro.min.js ни в осильных файлах фильра возможно просмотрел. К сожнонию у меня сейчас нет времени разбираться в исходниках, я вас очень прошу написать ггде формируется строка вывода и как её исправить.

 

Зарание спасипотому что за понимание.

Link to comment
Share on other sites


Добрый гдень. 

Подскажите ггде нужно и что добавить.

 

Нужно добавить  в список товара переменной в вигде названия производителя. 

Добавил , усиновив модуль Product Display Settings v.1.1 

 

Пока не накладываю фильтр то название выводиться, а вот после наложения фильтра на месте названия выводиться null.

 

У меня опенкар 1.5.6

Использую ваш модуль filterpro_v2.4.2.4.2(seo)-encoded

Сайт ifeelbe.com

Link to comment
Share on other sites

Может уже спрашивали. Как вклюлить Html теги в описании страницы в Seo версии фильтра. когда создаю сео страницу фильтра нужно описание нормальным сгделать.

Link to comment
Share on other sites


В первом ответе по этот теме описано как убрать скобки у атрибутов, производителей и в опциях, а как убираются скобки у КАТЕГОРИЙ я не нашел.

Код формиравания строки вывода в файле filterpro.min.js для атрибутов, производителей и опций отличаеться от вывода категорий, если для первых все наглядно понятно то для категорий формирования строки вывода я не нашел ни в filterpro.min.js ни в осильных файлах фильра возможно просмотрел. К сожнонию у меня сейчас нет времени разбираться в исходниках, я вас очень прошу написать ггде формируется строка вывода и как её исправить.

 

Зарание спасипотому что за понимание.

 

Уважаемый freelancer прошу вас ответить на мой вопрос ик как для меня он сил критичен!

Link to comment
Share on other sites


Доброго времени суток. Поздравляю всех с прошедшим Новым Годом!

 

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

 

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

Link to comment
Share on other sites


Огромная просьба сгделать редактор ручной сортировки опций/артибутов, по алфавиту это совсем не то.

Необходимо задавать порядок вывода в фильтре аттрибутов через админку - ик как порядок аттрибутов может влиять на продажи. 

 

Да же если это глобальная категория для товаров - скажем есть магазин в котором все под заказ, но есть категория "В налилии" - в ней товары из всего магазина.

Очень нужен фильтр именно по категориям для икого случая - сейчас извращаемся аттрибуими с названиями категорий.

Link to comment
Share on other sites


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

 

jju62WDQ.jpg

Link to comment
Share on other sites


var fIID = 0;
var interval = 1;
var $cookie = false;
var container = ".product-{view}";
jQuery.fn.exists = function(){return this.length > 0;}
/**
 * fixs for IE
 */
if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(obj, start) {
        for (var i = (start || 0), j = this.length; i < j; i++) {
            if (this[i] === obj) {
                return i;
            }
        }
        return -1;
    }
}
 
function escapeHtml(text) {
  return text
      .replace(/&/g, "&")
      .replace(/</g, "<")
      .replace(/>/g, ">")
      .replace(/"/g, """)
      .replace(/'/g, "'");
}
 
String.prototype.hashCode = function(){
    var hash = 0, i, ch;
    if (this.length == 0) return hash;
    for (i = 0; i < this.length; i++) {
        ch = this.charCodeAt(i);
        hash = ((hash<<5)-hash)+ch;
        hash = hash & hash; // Convert to 32bit integer
    }
    return hash;
};
 
function getCont() {
    if ($cookie){
        var view = $cookie("display");
    }
    if (!view) {
        view = "list";
    }
    var cont = container.replace('{view}', view);
    if (!$(cont).exists()){
        cont = container.replace('{view}', 'grid');
    }
    return container.replace('{view}', view);
}
 
 
var tag_tmpl = $.template(null, '<tr><td><input id="tag_${tag}" class="filtered" type="checkbox" name="tags[]" value="${tag}" {{if checked}} checked="checked" {{/if}}></td>' +
    '<td><label for="tag_${tag}">${name}</label></td></tr>');
var cat_tmpl = $.template(null, '<tr><td><input id="cat_${category_id}" class="filtered" type="checkbox" name="categories[]" value="${category_id}" {{if checked}} checked="checked" {{/if}}></td>'+
'<td><label for="cat_${category_id}">${name}</label></td></tr>');
$(".price_limit").live("change", (function () {
    var b = parseInt($("#min_price").val());
    var a = parseInt($("#max_price").val());
    $("#slider-range").slider("values", [b, a]);
    iF()
}));
function synchronizeImgCheckboxes() {
    $("#filterpro input.filtered[type=\"checkbox\"]").each(function() {
        var $img = $(this).next('img');
        if ($img.length) {
            if ($(this).is(":checked")) {
                $img.addClass("selected");
            } else {
                $img.removeClass("selected");
            }
        }
    });
}
$("#filterpro .filtered").live("change", (function () {
    iF();
}));
$(function () {
    $("#slider-range").slider({range:true, min:0, max:0, values:[0, 0], stop:function (a, b) {
        iF()
    }, slide:function (a, b) {
        $("#min_price").val(b.values[0]);
        $("#max_price").val(b.values[1])
    }});
    $("#min_price").val($("#slider-range").slider("values", 0));
    $("#max_price").val($("#slider-range").slider("values", 1))
});
function iF() {
    clearTimeout(fIID);
    $("#filterpro_page").val(0);
    fIID = setTimeout("doFilter(false)", interval)
}
 
function success(g, b) {
 
 
    var hash = window.location.hash.substr(1);
    var cont = getCont();
    if (g.result_html /*&& hash*/) {
        $(cont).html(g.result_html);        
 
if (typeof(display) != "undefined") {
            if ($cookie) { var view = $cookie("display"); }
            if (!view) { view = "list"; }
            view ? display(view) : display("list");
}
    }
    $(".pagination").html(g.pagination);
    if (b && g.min_price == g.max_price) {
        $('.price_slider').hide();
    }
    var d = parseInt(g.min_price);
    var c = Math.ceil(parseFloat(g.max_price));
 
    if (b) {
        $("#slider-range").slider("option", {min:d, max:c});
        if ($("#max_price").val() >= 1) {
            d = parseInt($("#min_price").val());
            c = parseInt($("#max_price").val())
        }
        $("#slider-range").slider("option", {values:[d, c]});
        $("#min_price").val(d);
        $("#max_price").val(c)
    }
    if (g.totals_data) {
        if (g.totals_data.tags.length) {
            $('#filter_tags').html('');
            $.tmpl(tag_tmpl, g.totals_data.tags).appendTo('#filter_tags');
            $('#filter_tags').parents('.option_box').show();
        } else {
            $('#filter_tags').parents('.option_box').hide();
        }
 
        $('#filter_categories').html('');
        if (g.totals_data.categories.length) {
            $.tmpl(cat_tmpl, g.totals_data.categories).appendTo('#filter_categories');
            $('#filter_categories').parents('.option_box').show();
        } else {
            $('#filter_categories').parents('.option_box').hide();
        }
 
        var atts = {};
        $.each(g.totals_data.attributes, function(k, v) {
            atts[(v.id + "_" + v.text).replace(/\s/g, '_')] = v.t;
        });
 
        $('.a_name').each(function (k, v) {
            var at_v_i = $(v).attr('at_v_i').replace(/\s/g, '_');
            var at_v_i_e = escapeHtml(at_v_i);
            if (atts[at_v_i]) {
                $('[at_v_t="' + at_v_i_e + '"]').text($('[at_v_t="' + at_v_i_e + '"]').attr('data-value') + " (" + atts[at_v_i] + ")");
                $(v).removeAttr("disabled");
            } else {
                $('[at_v_t="' + at_v_i_e + '"]').text($('[at_v_t="' + at_v_i_e + '"]').attr('data-value'));
                $(v).attr("disabled", "disabled");
                $(v).removeAttr('checked');
                $(v).removeAttr(':selected');
            }
        });
 
        var h = [];
        $.each(g.totals_data.manufacturers, function (f, k) {
            if (k.id) {
                h[h.length] = k.id;
                var j = $("#manufacturer_" + k.id);
                j.removeAttr("disabled");
                if (j.get(0).tagName == "OPTION") {
                    j.text($("#m_" + k.id).val() + " (" + k.t + ")")
                } else {
                    $('label[for="manufacturer_' + k.id + '"]').text($("#m_" + k.id).val() + " (" + k.t + ")")
                }
            }
        });
        $(".manufacturer_value").each(function (f, k) {
            var j = $(this);
            var l = j.attr("id").match(/manufacturer_(\d+)/);
            if ($.inArray(l[1], h) < 0) {
                j.attr("disabled", "disabled");
                if (this.tagName == "OPTION") {
                    j.text($("#m_" + l[1]).val());
                    j.prop("selected", false)
                } else {
                    $('label[for="manufacturer_' + l[1] + '"]').text($("#m_" + l[1]).val());
                    j.prop("checked", false)
                }
            }
        });
        var e = [];
        $.each(g.totals_data.options, function (j, k) {
            if (k.id) {
                e[e.length] = k.id;
                var f = $("#option_value_" + k.id);
                if (f.length) {
                    f.removeAttr("disabled");
                    if (f.get(0).tagName == "OPTION") {
                        f.text($("#o_" + k.id).val() + " (" + k.t + ")")
                    } else {
                        $('label[for="option_value_' + k.id + '"]').text($("#o_" + k.id).val() + " (" + k.t + ")")
                    }
                }
            }
        });
        $(".option_value").each(function (j, k) {
            var f = $(this);
            var l = f.attr("id").match(/option_value_(\d+)/);
            if ($.inArray(l[1], e) < 0) {
                f.attr("disabled", "disabled");
                if (this.tagName == "OPTION") {
                    f.text($("#o_" + l[1]).val());
                    f.attr("selected", false)
                } else {
                    $('label[for="option_value_' + l[1] + '"]').text($("#o_" + l[1]).val());
                    f.attr("checked", false)
                }
            }
        })
    }
}
var cache = [];
function doFilter(b) {
    var a = $("#filterpro").serialize().replace(/[^&]+=\.?(?:&|$)/g, "").replace(/&+$/, "");
    if (!b) {
        window.location.hash = a
    }
    var h = a.hashCode();
    if (cache[h]){
        success(cache[h]);
    } else {
 
var cont = getCont();
               $.ajax({url:"index.php?route=module/filterpro/getproducts", type:"POST", data:a + (b ? "&getPriceLimits=true" : ""), dataType:"json",
            success:function (g) {
                success(g, b);
                cache[h] = g;
var cont = getCont();
$(cont).unmask();
                $(".filterpro").unmask();
            }});
    }
}
$(document).ready(function () {
    if ($.totalStorage != undefined && $.totalStorage('display') != null) {
        $cookie = $.totalStorage;
    } else if ($.cookie != undefined && $.cookie('display') != null) {
        $cookie = $.cookie;
    }
 
    $(".option_box .option_name").click(function () {
        $(this).siblings(".collapsible").toggle();
        $(this).toggleClass("hided")
    });
    $(".option_box .attribute_group_name").click(function () {
        $(this).siblings(".attribute_box").toggle();
        $(this).toggleClass("hided")
    });
    $(".clear_filter").click(function () {
        $("#filterpro img").removeClass("selected");
        $("#filterpro select").val("");
        $("#filterpro :input").each(function () {
            if ($(this).is(":checked")) {
                $(this).attr("checked", false)
            }
        });
        var b = $("#slider-range").slider("option", "min");
        var a = $("#slider-range").slider("option", "max");
        $("#slider-range").slider("option", {values:[b, a]});
        $("#min_price").val(b);
        $("#max_price").val(a);
$("div[id^=slider-range-]").each(function(index, element) {
   var id = this.id.replace(/[^\d]/g, '');
 
   var b = $(element).slider("option", "min");
   var a = $(element).slider("option", "max");
   
   hs = $(element).slider();
   hs.slider("option", {values:[b, a]});
   hs.slider("option","slide").call(hs, null, { handle: $(".ui-slider-handle", hs), values:[b, a] });
 
   $("#attribute_value_"+id+"_min").val('');
   $("#attribute_value_"+id+"_max").val('');
 
});
        iF()
    });
    $(".pagination .links a").live("click", (function () {
        var a = $(this).attr("href");
        var b = a.match(/page=(\d+)/);
        $("#filterpro_page").val(b[1]);
        doFilter(false);
        $('html, body').animate({ scrollTop: $('.product-filter').offset().top }, 'slow');
        return false;
    }));
 
    if($(".sort select").length){
        $(".sort select").get(0).onchange = null;
        $(".sort select").change(function () {
            vars = $(this).val().split("&");
            $("#filterpro_sort").val(vars[0]);
            $("#filterpro_order").val(vars[1]);
            iF()
        });
        $(".sort select option").each(function () {
            var d = $(this).val();
            var a = gUV(d, "sort");
            $(this).val(a + "&" + gUV(d, "order"))
        });
    }
 
    if ($(".limit select").length) {
        $(".limit select").get(0).onchange = null;
        $(".limit select").change(function () {
            $("#filterpro_limit").val($(this).val());
            iF()
        });
        $(".limit select option").each(function () {
            $(this).val(gUV($(this).val(), "limit"))
        });
    }
 
// deserialize
    var hash = window.location.hash.substr(1);
    if (hash && $('instock').is(':visible') && $('instock').is(':checked')) {
        $('instock').attr("checked", false);
    }
    $("#filterpro").deserialize(hash);
 
    synchronizeImgCheckboxes();
 
    $("#filterpro img").bind("click", function() {
        var $input = $(this).prev("input");
        if ($input.attr("disabled")) {
            return;
        }
        $(this).toggleClass("selected");
        $input.prop('checked', !$input.prop('checked'));
        iF();
    });
 
 
    $("div[id^=slider-range-]").each(function(index, element) {
var id = this.id.replace(/[^\d]/g, '');
var arr = window['attr_arr_'+id];
 
var b = parseInt($("#attribute_value_"+id+"_min").val());
var a = parseInt($("#attribute_value_"+id+"_max").val());
b = arr.indexOf(b);
a = arr.indexOf(a);
if (a >= 0 && b >= 0){
   hs = $(element).slider();
   hs.slider("option", {values:[b, a]});
   hs.slider("option","slide").call(hs, null, { handle: $(".ui-slider-handle", hs), values:[b, a] });
}
    });
 
    if ($(".sort select").length) {
        if ($("#filterpro_sort").val()) {
            $(".sort select").val($("#filterpro_sort").val() + "&" + $("#filterpro_order").val())
        } else {
            vars = $(".sort select").val().split("&");
            $("#filterpro_sort").val(vars[0]);
            $("#filterpro_order").val(vars[1])
        }
    }
    if ($("#filterpro_limit").length) {
        if ($("#filterpro_limit").val()) {
            $(".limit select").val($("#filterpro_limit").val())
        } else {
            $("#filterpro_limit").val($(".limit select").val())
        }
    }
    doFilter(true)
});
function gUV(e,f){var c=String(e).split("?");var a="";if(c[1]){var b=c[1].split("&");for(var g=0;g<=(b.length);g++){if(b[g]){var d=b[g].split("=");if(d[0]&&d[0]==f){a=d[1]}}}}return a}

После каких или вместо каких строк добавлять?

Link to comment
Share on other sites


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

 

Второй вопрос, как сгделать вывод товаров как в самом шаблоне, поскольку после применения фильтра отображение товаров синовится совсем другим (второй скрин).

 

P.S. смотрите прикрепленные скриншоты.

P.S.S. третий скрин - после усиновки.

 

Сам по себе модуль отличный! Автору потому чтольшое спасипотому что!

Link to comment
Share on other sites


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

адрес магазина можно увигдеть?

Link to comment
Share on other sites

как скрывать неактивные атрибуты(checkbox)

catalog/view/javascript/filterpro.min.js

 

Циии

if (atts[at_v_i]) { 

     $('[at_v_t=' + at_v_i_e + ']').text($('[at_v_t=' + at_v_i_e + ']').attr('data-value') + " (" + atts[at_v_i] + ")"); 

     $(v).removeAttr("disabled"); 

     $(v).parent().parent().show();

} else { 

    $('[at_v_t=' + at_v_i_e + ']').text($('[at_v_t=' + at_v_i_e + ']').attr('data-value')); 

    $(v).attr("disabled", "disabled"); 

    $(v).parent().parent().hide();

    $(v).removeAttr('checked'); 

    $(v).removeAttr(':selected'); 

}

 

 

Скажите, пожалуйси, вместо каких или после каких строк всивлять данный код?!
Link to comment
Share on other sites


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

Заместо того что было (краткое описание) появляется слово: null

 

2e87caa58cfd.jpg

у меня и же проблема что нужно гделать

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share


×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.