diff --git a/README.md b/README.md index 60c3bcd..9dec06f 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,7 @@ tovarParams &fp - массив для передачи данных запроса на фильтрацию (по-умолчанию используется массив $_GET)
&submitDocPage=`1` - сабмит формы будет произведен на страницу, заданную в docid &allowZero=`1` - разрешает 0 в значениях чекбокса +&useRegexp=`1` - только для сильных духом:)
**Eсли хотим искать только по заданным документам, то до вызова [!eFilter!] устанавливаем их спискок в плейсхолдер eFilter_search_ids**

diff --git a/assets/snippets/eFilter/README.md b/assets/snippets/eFilter/README.md index 60c3bcd..9dec06f 100644 --- a/assets/snippets/eFilter/README.md +++ b/assets/snippets/eFilter/README.md @@ -78,6 +78,7 @@ tovarParams &fp - массив для передачи данных запроса на фильтрацию (по-умолчанию используется массив $_GET)
&submitDocPage=`1` - сабмит формы будет произведен на страницу, заданную в docid &allowZero=`1` - разрешает 0 в значениях чекбокса +&useRegexp=`1` - только для сильных духом:)
**Eсли хотим искать только по заданным документам, то до вызова [!eFilter!] устанавливаем их спискок в плейсхолдер eFilter_search_ids**

diff --git a/assets/snippets/eFilter/eFilter.class.php b/assets/snippets/eFilter/eFilter.class.php index 0451032..ae94d56 100644 --- a/assets/snippets/eFilter/eFilter.class.php +++ b/assets/snippets/eFilter/eFilter.class.php @@ -750,7 +750,12 @@ public function makeAllContentIDs ($DLparams) } if ($tvid != 0 && isset($this->filter_tv_names[$tvid]) && $val != '') { if ($this->filters[$tvid]['many'] == '1') { - $oper = 'containsOne'; + if (isset($this->params['useRegexp'])) { + $oper = 'regexp'; + $val = '[[:<:]]' . str_replace(array(',', '||'), '[[:>:]]|[[:<:]]', $val) . '[[:>:]]'; + } else { + $oper = 'containsOne'; + } } $val = str_replace(array('(', ')'), array('\(', '\)'), $val); $fltr .= $this->dl_filter_type . ':' . $this->filter_tv_names[$tvid] . ':' . $oper . ':' . $val . ';'; @@ -825,7 +830,14 @@ public function makeCurrFilterValuesContentIDs ($DLparams) $val = ($v == '0' || $v == '') ? '' : $v; } if ($tvid != 0 && isset($this->filter_tv_names[$tvid]) && $val != '') { - if ($this->filters[$tvid]['many'] == '1') {$oper = 'containsOne';} + if ($this->filters[$tvid]['many'] == '1') { + if (isset($this->params['useRegexp'])) { + $oper = 'regexp'; + $val = '[[:<:]]' . str_replace(array(',', '||'), '[[:>:]]|[[:<:]]', $val) . '[[:>:]]'; + } else { + $oper = 'containsOne'; + } + } $val = str_replace(array('(', ')'), array('\(', '\)'), $val); $fltr .= $this->dl_filter_type . ':' . $this->filter_tv_names[$tvid] . ':' . $oper . ':' . $val.';'; }