1C-Bitrix
25.700.0
Загрузка...
Поиск...
Не найдено
suggest.php
См. документацию.
1
<?php
2
3
class
CSearchSuggest
4
{
5
var
$_filter_md5
=
''
;
6
var
$_phrase
=
''
;
7
8
public
function
__construct
($strFilterMD5 =
''
, $phrase =
''
)
9
{
10
$strFilterMD5 = mb_strtolower($strFilterMD5);
11
if
(preg_match(
'/^[0-9a-f]{32}$/'
, $strFilterMD5))
12
{
13
$this->_filter_md5 = $strFilterMD5;
14
}
15
16
$phrase = mb_strtolower(trim($phrase,
" \t\n\r"
));
17
if
(
$l
= mb_strlen($phrase))
18
{
19
if
(
$l
> 250)
20
{
21
$p
= mb_strrpos($phrase,
' '
);
22
if
(
$p
===
false
)
23
{
24
$phrase = mb_substr($phrase, 0, 250);
25
}
26
else
27
{
28
$phrase = mb_substr($phrase, 0,
$p
);
29
}
30
}
31
$this->_phrase = $phrase;
32
}
33
}
34
35
function
SetResultCount
($result_count)
36
{
37
$DB
= CDatabase::GetModuleConnection(
'search'
);
38
if
(mb_strlen($this->_filter_md5) && mb_strlen($this->_phrase))
39
{
40
$result_count = intval($result_count);
41
$filter_md5 =
$DB
->ForSQL($this->_filter_md5);
42
$phrase =
$DB
->ForSQL($this->_phrase, 250);
43
44
$rsQueryStat =
$DB
->Query(
"
45
SELECT ID, FILTER_MD5, RATE, round((UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(TIMESTAMP_X))/3600/24) DAYS, RESULT_COUNT
46
FROM b_search_suggest
47
WHERE SITE_ID = '"
.
SITE_ID
.
"'
48
AND FILTER_MD5 = '"
. $filter_md5 .
"'
49
AND PHRASE = '"
. $phrase .
"'
50
"
);
51
52
$arQueryStat = $rsQueryStat->Fetch();
53
if
(!$arQueryStat)
54
{
55
$DB
->Add(
'b_search_suggest'
, [
56
'SITE_ID'
=>
SITE_ID
,
57
'FILTER_MD5'
=> $this->_filter_md5,
58
'PHRASE'
=> $this->_phrase,
59
'RATE'
=> 1.0,
60
'~TIMESTAMP_X'
=>
$DB
->CurrentTimeFunction(),
61
'RESULT_COUNT'
=> $result_count,
62
]);
63
}
64
else
65
{
66
$bUpdate = $result_count != $arQueryStat[
'RESULT_COUNT'
];
67
68
$suggest_save_days = COption::GetOptionInt(
'search'
,
'suggest_save_days'
);
69
if
($suggest_save_days <= 0)
70
{
71
$suggest_save_days = 360;
72
}
73
74
if
($arQueryStat[
'DAYS'
] <= 0)
75
{
76
$rate = $arQueryStat[
'RATE'
];
77
$bUpdate = $bUpdate ||
false
;
78
}
79
elseif
($arQueryStat[
'DAYS'
] >= $suggest_save_days)
80
{
81
$rate = 1.0;
82
$bUpdate = $bUpdate ||
true
;
83
}
84
else
85
{
86
$rate = doubleval($arQueryStat[
'RATE'
]) + ($suggest_save_days - $arQueryStat[
'DAYS'
]) / $suggest_save_days;
87
$bUpdate = $bUpdate ||
true
;
88
}
89
90
if
($bUpdate)
91
{
92
$DB
->Query(
'
93
UPDATE
94
b_search_suggest
95
SET
96
RESULT_COUNT = '
. $result_count .
',
97
RATE = '
. $rate .
',
98
TIMESTAMP_X = '
.
$DB
->CurrentTimeFunction() .
'
99
WHERE
100
ID = '
. $arQueryStat[
'ID'
] .
'
101
'
);
102
}
103
}
104
105
while
($arQueryStat = $rsQueryStat->Fetch())
106
{
107
$DB
->Query(
'DELETE FROM b_search_suggest WHERE ID = '
. $arQueryStat[
'ID'
]);
108
}
109
}
110
}
111
112
function
GetList
($nTopCount,
$site_id
=
null
)
113
{
114
$DB
= CDatabase::GetModuleConnection(
'search'
);
115
if
(!isset(
$site_id
))
116
{
117
$site_id
=
SITE_ID
;
118
}
119
120
if
($this->_phrase <>
''
)
121
{
122
$nTopCount = intval($nTopCount);
123
if
($nTopCount <= 0)
124
{
125
$nTopCount = 10;
126
}
127
128
$phrase =
$DB
->ForSQL($this->_phrase);
129
$site_id
=
$DB
->ForSQL(
$site_id
);
130
131
if
($this->_filter_md5 <>
''
)
132
{
133
$filter_md5 =
$DB
->ForSQL($this->_filter_md5, 32);
134
return
$DB
->Query(
$DB
->TopSql(
"
135
SELECT PHRASE, RESULT_COUNT CNT, RATE
136
FROM b_search_suggest
137
WHERE SITE_ID = '"
.
$site_id
.
"'
138
AND FILTER_MD5 = '"
. $filter_md5 .
"'
139
AND PHRASE LIKE '"
. $phrase .
"%'
140
ORDER BY RATE DESC, PHRASE ASC
141
"
, $nTopCount));
142
}
143
else
144
{
145
return
$DB
->Query(
$DB
->TopSql(
"
146
SELECT PHRASE, max(RESULT_COUNT) CNT, max(RATE) RATE
147
FROM b_search_suggest
148
WHERE SITE_ID = '"
.
$site_id
.
"'
149
AND PHRASE LIKE '"
. $phrase .
"%'
150
GROUP BY PHRASE
151
ORDER BY RATE DESC, PHRASE ASC
152
"
, $nTopCount));
153
}
154
}
155
else
156
{
157
return
false
;
158
}
159
}
160
161
public
static
function
CleanUpAgent
()
162
{
163
$DB
= CDatabase::GetModuleConnection(
'search'
);
164
$cleanup_days = COption::GetOptionInt(
'search'
,
'suggest_save_days'
);
165
if
($cleanup_days > 0)
166
{
167
$arDate = localtime(time());
168
$date = mktime(0, 0, 0, $arDate[4] + 1, $arDate[3] - $cleanup_days, 1900 + $arDate[5]);
169
$DB
->Query(
'DELETE FROM b_search_suggest WHERE TIMESTAMP_X <= '
.
$DB
->CharToDateFunction(ConvertTimeStamp($date,
'FULL'
)));
170
}
171
return
'CSearchSuggest::CleanUpAgent();'
;
172
}
173
}
CSearchSuggest
Определения
suggest.php:4
CSearchSuggest\__construct
__construct($strFilterMD5='', $phrase='')
Определения
suggest.php:8
CSearchSuggest\GetList
GetList($nTopCount, $site_id=null)
Определения
suggest.php:112
CSearchSuggest\CleanUpAgent
static CleanUpAgent()
Определения
suggest.php:161
CSearchSuggest\$_filter_md5
$_filter_md5
Определения
suggest.php:5
CSearchSuggest\SetResultCount
SetResultCount($result_count)
Определения
suggest.php:35
CSearchSuggest\$_phrase
$_phrase
Определения
suggest.php:6
$p
$p
Определения
group_list_element_edit.php:23
$DB
global $DB
Определения
cron_frame.php:29
$l
$l
Определения
options.php:783
elseif
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения
prolog_main_admin.php:393
$site_id
$site_id
Определения
sonet_set_content_view.php:9
SITE_ID
const SITE_ID
Определения
sonet_set_content_view.php:12
bitrix
modules
search
classes
mysql
suggest.php
Создано системой
1.14.0