В системе компонентов реализована встроенная система поиска и выборки. Поиск можно производить по любым полям. Так, по текстовым и строковым (а также файловым – т.к. в базе данных хранится URL файла) полям производится поиск подстроки (без морфологии), по числовым – по диапазону значений, по логическим – да/нет, по спискам (классификаторам) – по конкретному значению.
Прежде всего, выборку можно осуществлять только по тем полям компонента, у которых установлен атрибут «возможен поиск по данному полю». При включении данной опции, поле будет участвовать в поиске по компоненту, а также в базе данных для данного поля будет создан индекс. При выключении опции индекс также будет удалён.
Каждому из таких полей соответствует элемент (или два элемента) массива srchPat[], значения которого нужно подавать на страницу, чтобы произвести выборку. Для того чтобы лучше понять принцип работы механизмов выборки, приведём примерный алгоритм осуществления поиска:
Приведём примеры набора полей и соответствия им элементов srchPat[].
Из 20 полей включены для поиска пять, соответственно каждое поле по порядку будет увеличивать число в srchPat[х],
на 1 строка или текст, на 2 число(целое или дробное) и мультилист, на 12 поле даты.
Приоритет | Поле / Название поля | Тип поля | Элементы | Параметры |
---|---|---|---|---|
1 | Имя / Name | Строка | srchPat[0] | Подаётся искомая подстрока |
5 | Возраст / Age | Целое число | srchPat[1], srchPat[2] | Подаётся начало (1) и конец (2) диапазона поиска. Если один из параметров пуст, соответствующей границы диапазона нет. |
6 | Отдел / Depart | Список | srchPat[3] | Подаётся номер записи классификатора. Если |
18 | Пол мужской? / IsMale | Логическая переменная | srchPat[4] | Подается единица («да») или ноль («нет»). |
19 | Дата регистрации | Дата | srchPat[5] srchPat[6] srchPat[7] srchPat[8] srchPat[9] srchPat[10] srchPat[11] srchPat[12] srchPat[13] srchPat[14] srchPat[15] srchPat[16] |
Передаются числа для начала и конца диапазона, могут быть пустыми, но должно быть передано 12 параметров. $date_from['d'] $date_from['m'] $date_from['Y'] $date_from['H'] $date_from['i'] $date_from['s'] $date_to['d'] $date_to['m'] $date_to['Y'] $date_to['H'] $date_to['i'] $date_to['s'] |
Если любой из параметров оказывается пустым, поиск по нему не производится.
Например, для вывода всех людей с именем «Дмитрий» от 20 до 30 лет необходимо подать на страницу параметры:
<a href="http://site.name/page_url/?srchPat[0]=Дмитрий&srchPat[1]=20&srchPat[2]=30">Все Дмитрии</a>
Полю «Множественный выбор» соответствует два элемента массива srchPat[]
Первый элемент — это массив всех искомых элементов( либо строка с элементами, разделенными дефисом), второй — тип поиска.
Для этого типа поля существует три типа поиска:
Для наглядности рассмотрим пример: пусть имеются четыре объекта: cites1, cites2, cites3, cites4 компонента, содержащего поле «Множественный выбор» формата Region (города). Для простоты, будем считать, что только по этому полю возможен поиск.
Содержание объектов:
cites1 : 1.Москва, 59.Екатеринбург, 110.Магадан
cites2 : 1.Москва, 84.Керчь, 110.Магадан
cites3 : 1.Москва, 93. Ковров
cites4 : 216. Челябинск, 110.Магадан
При типе поиска «Неполное совпадение» и искомых элементов «Москва», «Магадан» выберутся объекты cites1 и cites2.
В этом случае srchPat[0][]=1&srchPat[0][]=110&srchPat[1]=0, что аналогично srchPat[0][0]=1&srchPat[0][1]=110&srchPat[1]=0 или srchPat[0]=1-110&srchPat[1]=0
При типе поиска «Полное совпадение» искомых элементов «Москва», «Магадан» ничего не найдется, а если искомые элементами будут «Москва», «Ковров», то найдется только объект cites3.
Здесь srchPat[0][]=1&srchPat[0][]=93&srchPat[1]=1
При типе поиска «Хотя бы один»и при искомом элементе «Москва» найдутся cites1, cites2, cites3;
при искомых элементах «Москва», «Магадан» выберутся все объекты.
В форме поиска по умолчанию используется первый тип поиска, тип поиска в этом случае передается через скрытое поле:
<input type='hidden' name='srchPat[x]' value='0'>
Если вы используете свою форму поиска, то можете сами выбрать тип поиска и тоже передать его через скрытое поле, например:
<input type='hidden' name='srchPat[х]' value='2'>
Возможен вариант, когда пользователь сам может выбрать тип поиска, для этого в форму поиска вставьте:
<input type='radio' name='srchPat[x]' value='0'> Неполное совпадение <input type='radio' name='srchPat[x]' value='1'> Полное совпадение <input type='radio' name='srchPat[x]' value='2'> Хотя бы один из выбранных
По умолчанию поиск ведется в режиме И, тоесть должны быть выполнены все переданные условия.
Можно переключить выборку в режим ИЛИ, чтобы достаточно было выполнения хотябы одного из условий, для этого нужно передать 'srchPat[OR]' со значением '1'
Эти параметры можно также подавать в функции nc_objects_list() (третьим параметром). Кроме того, их можно использовать в форме фильтра (например, в префиксе списка объектов компонента).