Заказчик поставил задачу сделать возможным выборку в CRM по нескольким значениям в простых ( не мульти) полях.
Со строковыми полями оказалось всё просто. В фильтре можно использовать | для разделения нескольких значений.
А вот с селектами оказалось немного сложнее.
В принципе фильтр готов принимать несколько значений для селекта, но надо дать возможность их внести.
При этом не хотелось пилить шаблоны, чтобы не усложнять дальнейшую поддержку.
Именно поэтому решил использовать JS.
Для решения задачи надо
1. добавить атрибут "multiple" селекту.
2. добавить в name селекта [] чтобы он мог передать несколько значений.
3. получить из адресной строки значения и внести их в value селекта.
<? $APPLICATION->AddHeadString(' <sc ript> BX.ready(function(){ var fieldNames = ["UF_CRM_1467537289","UF_CRM_14675372892"]; for (i = 0; i < fieldNames.length; ++i) { if ($("[name=\'"+fieldNames[i]+"\']").length < 1) continue; $("[name=\'"+fieldNames[i]+"\']").attr({"multiple":"", "name": $("[name=\'"+fieldNames[i]+"\']").attr("name")+"[]"}); $("[name=\'"+fieldNames[i]+"[]\']").val($_GET(fieldNames[i]+"%5B%5D")); } }); function $_GET(key) { var index = 0, ret = [], s = window.location.search.match(new RegExp(key + "=([^&=]+)", "g")); for (index = 0; index < s.length; ++index) {ret[ret.length] = s[index].substring(s[index].indexOf("=")+1);} return ret.length > 0 ? ret : false; } </sc ript> ');?> |