1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
item.php
См. документацию.
1<?php
2
3class CSearchItem extends CDBResult
4{
5 function GetList($arOrder = [], $arFilter = [], $arSelect = [])
6 {
7 global $DB;
8
9 $strSearchContentAlias = 'sc';
10 $sqlSelect = [];
11 $sqlOrder = [];
12 $sqlWhere = '';
13
14 if (!is_array($arSelect))
15 {
16 $arSelect = [];
17 }
18
19 if (is_array($arOrder))
20 {
21 foreach ($arOrder as $key => $ord)
22 {
23 $ord = mb_strtoupper($ord) <> 'ASC' ? 'DESC' : 'ASC';
24 $key = mb_strtoupper($key);
25 switch ($key)
26 {
27 case 'ID':
28 $sqlOrder[$key] = $strSearchContentAlias . '.' . $key . ' ' . $ord;
29 $arSelect[] = 'ID';
30 break;
31 }
32 }
33 }
34
35 $arSelect[] = 'ID';
36 $arSelect[] = 'SITE_ID';
37 $arSelect[] = 'MODULE_ID';
38 $arSelect[] = 'ITEM_ID';
39 $arSelect[] = 'PARAM1';
40 $arSelect[] = 'PARAM2';
41
42 foreach ($arSelect as $field)
43 {
44 $field = mb_strtoupper($field);
45 switch ($field)
46 {
47 case 'ID':
48 case 'MODULE_ID':
49 case 'ITEM_ID':
50 case 'BODY':
51 case 'PARAM1':
52 case 'PARAM2':
53 case 'CUSTOM_RANK':
54 case 'USER_ID':
55 case 'ENTITY_TYPE_ID':
56 case 'ENTITY_ID':
57 case 'TITLE':
58 case 'TAGS':
59 $sqlSelect[$field] = $strSearchContentAlias . '.' . $field;
60 break;
61 case 'URL':
62 $sqlSelect[$field] = $strSearchContentAlias . '.' . $field;
63 $sqlSelect['SITE_URL'] = 'scsite.' . $field . ' SITE_URL';
64 break;
65 case 'SITE_ID':
66 $sqlSelect['SITE_ID'] = 'scsite.' . $field;
67 break;
68 }
69 }
70
71 if (is_array($arFilter))
72 {
73 $obQueryWhere = new CSQLWhere;
74 $obQueryWhere->SetFields([
75 'MODULE_ID' => [
76 'TABLE_ALIAS' => $strSearchContentAlias,
77 'FIELD_NAME' => $strSearchContentAlias . '.MODULE_ID',
78 'MULTIPLE' => 'N',
79 'FIELD_TYPE' => 'string',
80 'JOIN' => false,
81 ],
82 'ITEM_ID' => [
83 'TABLE_ALIAS' => $strSearchContentAlias,
84 'FIELD_NAME' => $strSearchContentAlias . '.ITEM_ID',
85 'MULTIPLE' => 'N',
86 'FIELD_TYPE' => 'string',
87 'JOIN' => false,
88 ],
89 'PARAM1' => [
90 'TABLE_ALIAS' => $strSearchContentAlias,
91 'FIELD_NAME' => $strSearchContentAlias . '.PARAM1',
92 'MULTIPLE' => 'N',
93 'FIELD_TYPE' => 'string',
94 'JOIN' => false,
95 ],
96 'PARAM2' => [
97 'TABLE_ALIAS' => $strSearchContentAlias,
98 'FIELD_NAME' => $strSearchContentAlias . '.PARAM2',
99 'MULTIPLE' => 'N',
100 'FIELD_TYPE' => 'string',
101 'JOIN' => false,
102 ],
103 'USER_ID' => [
104 'TABLE_ALIAS' => $strSearchContentAlias,
105 'FIELD_NAME' => $strSearchContentAlias . '.USER_ID',
106 'MULTIPLE' => 'N',
107 'FIELD_TYPE' => 'int',
108 'JOIN' => false,
109 ],
110 'ENTITY_TYPE_ID' => [
111 'TABLE_ALIAS' => $strSearchContentAlias,
112 'FIELD_NAME' => $strSearchContentAlias . '.ENTITY_TYPE_ID',
113 'MULTIPLE' => 'N',
114 'FIELD_TYPE' => 'string',
115 'JOIN' => false,
116 ],
117 'ENTITY_ID' => [
118 'TABLE_ALIAS' => $strSearchContentAlias,
119 'FIELD_NAME' => $strSearchContentAlias . '.ENTITY_ID',
120 'MULTIPLE' => 'N',
121 'FIELD_TYPE' => 'string',
122 'JOIN' => false,
123 ],
124 'DATE_FROM' => [
125 'TABLE_ALIAS' => $strSearchContentAlias,
126 'FIELD_NAME' => $strSearchContentAlias . '.DATE_FROM',
127 'MULTIPLE' => 'N',
128 'FIELD_TYPE' => 'datetime',
129 'JOIN' => false,
130 ],
131 'DATE_TO' => [
132 'TABLE_ALIAS' => $strSearchContentAlias,
133 'FIELD_NAME' => $strSearchContentAlias . '.DATE_TO',
134 'MULTIPLE' => 'N',
135 'FIELD_TYPE' => 'datetime',
136 'JOIN' => false,
137 ],
138 'DATE_CHANGE' => [
139 'TABLE_ALIAS' => $strSearchContentAlias,
140 'FIELD_NAME' => $strSearchContentAlias . '.DATE_CHANGE',
141 'MULTIPLE' => 'N',
142 'FIELD_TYPE' => 'datetime',
143 'JOIN' => false,
144 ],
145 'SITE_ID' => [
146 'TABLE_ALIAS' => 'scsite',
147 'FIELD_NAME' => 'scsite.SITE_ID',
148 'MULTIPLE' => 'N',
149 'FIELD_TYPE' => 'string',
150 'JOIN' => true,
151 ],
152 ]);
153 $sqlWhere = $obQueryWhere->GetQuery($arFilter);
154 }
155
156 $strSql = 'SELECT
157 ' . implode(', ', $sqlSelect) . '
158 FROM
159 b_search_content ' . $strSearchContentAlias . '
160 INNER JOIN b_search_content_site scsite on scsite.SEARCH_CONTENT_ID = ' . $strSearchContentAlias . '.ID
161 ' . ($sqlWhere ? 'WHERE ' . $sqlWhere : '') . '
162 ' . (!empty($sqlOrder) ? 'ORDER BY ' . implode(', ', $sqlOrder) : '') . '
163 ';
164
165 $res = $DB->Query($strSql);
166 $res = new CSearchItem($res);
167 return $res;
168 }
169
170 function Fetch()
171 {
172 static $arSite = [];
173
174 $r = parent::Fetch();
175 if ($r)
176 {
177 $site_id = $r['SITE_ID'];
178 if (!isset($arSite[$site_id]))
179 {
180 $rsSite = CSite::GetList('', '', ['ID' => $site_id]);
181 $arSite[$site_id] = $rsSite->Fetch();
182 }
183 $r['DIR'] = $arSite[$site_id]['DIR'];
184 $r['SERVER_NAME'] = $arSite[$site_id]['SERVER_NAME'];
185
186 if ($r['SITE_URL'] <> '')
187 {
188 $r['URL'] = $r['SITE_URL'];
189 }
190
191 if (mb_substr($r['URL'], 0, 1) == '=')
192 {
193 foreach (GetModuleEvents('search', 'OnSearchGetURL', true) as $arEvent)
194 {
195 $newUrl = ExecuteModuleEventEx($arEvent, [$r]);
196 if (isset($newUrl))
197 {
198 $r['URL'] = $newUrl;
199 }
200 }
201 }
202
203 $r['URL'] = str_replace(
204 ['#LANG#', '#SITE_DIR#', '#SERVER_NAME#'],
205 [$r['DIR'], $r['DIR'], $r['SERVER_NAME']],
206 $r['URL']
207 );
208 $r['URL'] = preg_replace("'(?<!:)/+'s", '/', $r['URL']);
209
210 unset($r['SITE_URL']);
211 }
212
213 return $r;
214 }
215}
$DB
Определения dbresult.php:40
SetFields($arFields)
Определения sqlwhere.php:239
Определения sqlwhere.php:1359
Определения item.php:4
GetList($arOrder=[], $arFilter=[], $arSelect=[])
Определения item.php:5
Fetch()
Определения item.php:170
$res
Определения filter_act.php:7
ExecuteModuleEventEx($arEvent, $arParams=[])
Определения tools.php:5214
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
Определения tools.php:5177
if(empty($signedUserToken)) $key
Определения quickway.php:257
$site_id
Определения sonet_set_content_view.php:9
$arFilter
Определения user_search.php:106