1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
price.php
См. документацию.
1<?php
2
4
5require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/catalog/general/price.php");
6
7class CPrice extends CAllPrice
8{
20 public static function GetList($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
21 {
22 global $DB, $USER;
23
24 $entityResult = new CCatalogResult('\Bitrix\Catalog\Model\Price');
25
26 // for old execution style
27 if (!is_array($arOrder) && !is_array($arFilter))
28 {
29 $arOrder = (string)$arOrder;
30 $arFilter = (string)$arFilter;
31 $arOrder = ($arOrder != '' && $arFilter != '' ? array($arOrder => $arFilter) : array());
32 $arFilter = (is_array($arGroupBy) ? $arGroupBy : array());
33 $arGroupBy = false;
34 }
35
36 $strUserGroups = (CCatalog::IsUserExists() ? $USER->GetGroups() : '2');
37
38 if (empty($arSelectFields))
39 $arSelectFields = array("ID", "PRODUCT_ID", "EXTRA_ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY", "TIMESTAMP_X", "QUANTITY_FROM", "QUANTITY_TO", "BASE", "SORT", "CATALOG_GROUP_NAME", "CAN_ACCESS", "CAN_BUY");
40
41 $quantityTrace = Option::get('catalog','default_quantity_trace');
42 $canBuyZero = Option::get('catalog','default_can_buy_zero');
43 $amountTrace = Option::get('catalog','allow_negative_amount');
44
46 "ID" => array("FIELD" => "P.ID", "TYPE" => "int"),
47 "PRODUCT_ID" => array("FIELD" => "P.PRODUCT_ID", "TYPE" => "int"),
48 "EXTRA_ID" => array("FIELD" => "P.EXTRA_ID", "TYPE" => "int"),
49 "CATALOG_GROUP_ID" => array("FIELD" => "P.CATALOG_GROUP_ID", "TYPE" => "int"),
50 "PRICE" => array("FIELD" => "P.PRICE", "TYPE" => "double"),
51 "CURRENCY" => array("FIELD" => "P.CURRENCY", "TYPE" => "string"),
52 "TIMESTAMP_X" => array("FIELD" => "P.TIMESTAMP_X", "TYPE" => "datetime"),
53 "QUANTITY_FROM" => array("FIELD" => "P.QUANTITY_FROM", "TYPE" => "int"),
54 "QUANTITY_TO" => array("FIELD" => "P.QUANTITY_TO", "TYPE" => "int"),
55 "TMP_ID" => array("FIELD" => "P.TMP_ID", "TYPE" => "string"),
56 "PRICE_BASE_RATE" => array("FIELD" => "P.PRICE_SCALE", "TYPE" => "double"),
57 "PRICE_SCALE" => array("FIELD" => "P.PRICE_SCALE", "TYPE" => "double"),
58 "BASE" => array("FIELD" => "CG.BASE", "TYPE" => "char", "FROM" => "INNER JOIN b_catalog_group CG ON (P.CATALOG_GROUP_ID = CG.ID)"),
59 "SORT" => array("FIELD" => "CG.SORT", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_group CG ON (P.CATALOG_GROUP_ID = CG.ID)"),
60 "PRODUCT_QUANTITY" => array("FIELD" => "CP.QUANTITY", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)"),
61 "PRODUCT_QUANTITY_TRACE" => array(
62 "FIELD" => "CASE WHEN CP.QUANTITY_TRACE = 'D' THEN '".$DB->ForSql($quantityTrace)."' ELSE CP.QUANTITY_TRACE END",
63 "TYPE" => "char",
64 "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)",
65 ),
66 "PRODUCT_CAN_BUY_ZERO" => array(
67 "FIELD" => "CASE WHEN CP.CAN_BUY_ZERO = 'D' THEN '".$DB->ForSql($canBuyZero)."' ELSE CP.CAN_BUY_ZERO END",
68 "TYPE" => "char",
69 "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)",
70 ),
71 "PRODUCT_NEGATIVE_AMOUNT_TRACE" => array(
72 "FIELD" => "CASE WHEN CP.NEGATIVE_AMOUNT_TRACE = 'D' THEN '".$DB->ForSql($amountTrace)."' ELSE CP.NEGATIVE_AMOUNT_TRACE END",
73 "TYPE" => "char",
74 "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)",
75 ),
76 "PRODUCT_WEIGHT" => array("FIELD" => "CP.WEIGHT", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)"),
77 "ELEMENT_IBLOCK_ID" => array("FIELD" => "IE.IBLOCK_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_iblock_element IE ON (P.PRODUCT_ID = IE.ID)"),
78 "CATALOG_GROUP_NAME" => array("FIELD" => "CGL.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_catalog_group_lang CGL ON (P.CATALOG_GROUP_ID = CGL.CATALOG_GROUP_ID AND CGL.LANG = '".LANGUAGE_ID."')"),
79 );
80
81 $arFields["CAN_ACCESS"] = array(
82 "FIELD" => "CASE WHEN CGG.ID IS NULL THEN 'N' ELSE 'Y' END",
83 "TYPE" => "char",
84 "FROM" => "LEFT JOIN b_catalog_group2group CGG ON (P.CATALOG_GROUP_ID = CGG.CATALOG_GROUP_ID AND CGG.GROUP_ID IN (".$strUserGroups.") AND CGG.BUY <> 'Y')"
85 );
86 $arFields["CAN_BUY"] = array(
87 "FIELD" => "CASE WHEN CGG1.ID IS NULL THEN 'N' ELSE 'Y' END",
88 "TYPE" => "char",
89 "FROM" => "LEFT JOIN b_catalog_group2group CGG1 ON (P.CATALOG_GROUP_ID = CGG1.CATALOG_GROUP_ID AND CGG1.GROUP_ID IN (".$strUserGroups.") AND CGG1.BUY = 'Y')"
90 );
91
92 $arSelectFields = $entityResult->prepareSelect($arSelectFields);
93
94 $arSqls = CCatalog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
95
96 if (array_key_exists("CAN_ACCESS", $arFields) || array_key_exists("CAN_BUY", $arFields))
97 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "DISTINCT", $arSqls["SELECT"]);
98 else
99 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
100
101 if (empty($arGroupBy) && is_array($arGroupBy))
102 {
103 $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_price P ".$arSqls["FROM"];
104 if (!empty($arSqls["WHERE"]))
105 $strSql .= " WHERE ".$arSqls["WHERE"];
106 if (!empty($arSqls["GROUPBY"]))
107 $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
108
109 $dbRes = $DB->Query($strSql);
110 if ($arRes = $dbRes->Fetch())
111 return $arRes["CNT"];
112 else
113 return false;
114 }
115
116 $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_price P ".$arSqls["FROM"];
117 if (!empty($arSqls["WHERE"]))
118 $strSql .= " WHERE ".$arSqls["WHERE"];
119 if (!empty($arSqls["GROUPBY"]))
120 $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
121 if (!empty($arSqls["ORDERBY"]))
122 $strSql .= " ORDER BY ".$arSqls["ORDERBY"];
123
124 $intTopCount = 0;
125 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
126 if ($boolNavStartParams && isset($arNavStartParams['nTopCount']))
127 {
128 $intTopCount = (int)$arNavStartParams["nTopCount"];
129 }
130 if ($boolNavStartParams && $intTopCount <= 0)
131 {
132 $strSql_tmp = "SELECT COUNT('x') as CNT FROM b_catalog_price P ".$arSqls["FROM"];
133 if (!empty($arSqls["WHERE"]))
134 $strSql_tmp .= " WHERE ".$arSqls["WHERE"];
135 if (!empty($arSqls["GROUPBY"]))
136 $strSql_tmp .= " GROUP BY ".$arSqls["GROUPBY"];
137
138 $dbRes = $DB->Query($strSql_tmp);
139 $cnt = 0;
140 if (empty($arSqls["GROUPBY"]))
141 {
142 if ($arRes = $dbRes->Fetch())
143 $cnt = $arRes["CNT"];
144 }
145 else
146 {
147 $cnt = $dbRes->SelectedRowsCount();
148 }
149
150 $dbRes = new CDBResult();
151 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
152 }
153 else
154 {
155 if ($boolNavStartParams && $intTopCount > 0)
156 {
157 $strSql .= " LIMIT ".$intTopCount;
158 }
159 $entityResult->setResult($DB->Query($strSql));
160
161 $dbRes = $entityResult;
162 }
163
164 return $dbRes;
165 }
166
178 public static function GetListEx($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array())
179 {
180 global $DB;
181
182 $entityResult = new CCatalogResult('\Bitrix\Catalog\Model\Price');
183
184 if (empty($arSelectFields))
185 $arSelectFields = array("ID", "PRODUCT_ID", "EXTRA_ID", "CATALOG_GROUP_ID", "PRICE", "CURRENCY", "TIMESTAMP_X", "QUANTITY_FROM", "QUANTITY_TO", "TMP_ID");
186
187 $quantityTrace = Option::get('catalog','default_quantity_trace');
188 $canBuyZero = Option::get('catalog','default_can_buy_zero');
189 $amountTrace = Option::get('catalog','allow_negative_amount');
190
192 "ID" => array("FIELD" => "P.ID", "TYPE" => "int"),
193 "PRODUCT_ID" => array("FIELD" => "P.PRODUCT_ID", "TYPE" => "int"),
194 "EXTRA_ID" => array("FIELD" => "P.EXTRA_ID", "TYPE" => "int"),
195 "CATALOG_GROUP_ID" => array("FIELD" => "P.CATALOG_GROUP_ID", "TYPE" => "int"),
196 "PRICE" => array("FIELD" => "P.PRICE", "TYPE" => "double"),
197 "CURRENCY" => array("FIELD" => "P.CURRENCY", "TYPE" => "string"),
198 "TIMESTAMP_X" => array("FIELD" => "P.TIMESTAMP_X", "TYPE" => "datetime"),
199 "QUANTITY_FROM" => array("FIELD" => "P.QUANTITY_FROM", "TYPE" => "int"),
200 "QUANTITY_TO" => array("FIELD" => "P.QUANTITY_TO", "TYPE" => "int"),
201 "TMP_ID" => array("FIELD" => "P.TMP_ID", "TYPE" => "string"),
202 "PRICE_BASE_RATE" => array("FIELD" => "P.PRICE_SCALE", "TYPE" => "double"),
203 "PRICE_SCALE" => array("FIELD" => "P.PRICE_SCALE", "TYPE" => "double"),
204 "PRODUCT_QUANTITY" => array("FIELD" => "CP.QUANTITY", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)"),
205 "PRODUCT_QUANTITY_TRACE" => array(
206 "FIELD" => "CASE WHEN CP.QUANTITY_TRACE = 'D' THEN '".$DB->ForSql($quantityTrace)."' ELSE CP.QUANTITY_TRACE END",
207 "TYPE" => "char",
208 "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)",
209 ),
210 "PRODUCT_CAN_BUY_ZERO" => array(
211 "FIELD" => "CASE WHEN CP.CAN_BUY_ZERO = 'D' THEN '".$DB->ForSql($canBuyZero)."' ELSE CP.CAN_BUY_ZERO END",
212 "TYPE" => "char",
213 "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)",
214 ),
215 "PRODUCT_NEGATIVE_AMOUNT_TRACE" => array(
216 "FIELD" => "CASE WHEN CP.NEGATIVE_AMOUNT_TRACE = 'D' THEN '".$DB->ForSql($amountTrace)."' ELSE CP.NEGATIVE_AMOUNT_TRACE END",
217 "TYPE" => "char",
218 "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)",
219 ),
220 "PRODUCT_WEIGHT" => array("FIELD" => "CP.WEIGHT", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_product CP ON (P.PRODUCT_ID = CP.ID)"),
221 "ELEMENT_IBLOCK_ID" => array("FIELD" => "IE.IBLOCK_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_iblock_element IE ON (P.PRODUCT_ID = IE.ID)"),
222 "ELEMENT_NAME" => array("FIELD" => "IE.NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_iblock_element IE ON (P.PRODUCT_ID = IE.ID)"),
223 "CATALOG_GROUP_CODE" => array("FIELD" => "CG.NAME", "TYPE" => "string", "FROM" => "INNER JOIN b_catalog_group CG ON (P.CATALOG_GROUP_ID = CG.ID)"),
224 "CATALOG_GROUP_BASE" => array("FIELD" => "CG.BASE", "TYPE" => "char", "FROM" => "INNER JOIN b_catalog_group CG ON (P.CATALOG_GROUP_ID = CG.ID)"),
225 "CATALOG_GROUP_SORT" => array("FIELD" => "CG.SORT", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_group CG ON (P.CATALOG_GROUP_ID = CG.ID)"),
226 "CATALOG_GROUP_NAME" => array("FIELD" => "CGL.NAME", "TYPE" => "string", "FROM" => "LEFT JOIN b_catalog_group_lang CGL ON (P.CATALOG_GROUP_ID = CGL.CATALOG_GROUP_ID AND CGL.LANG = '".LANGUAGE_ID."')"),
227 "GROUP_GROUP_ID" => array("FIELD" => "CGG.GROUP_ID", "TYPE" => "int", "FROM" => "INNER JOIN b_catalog_group2group CGG ON (P.CATALOG_GROUP_ID = CGG.CATALOG_GROUP_ID)"),
228 "GROUP_BUY" => array("FIELD" => "CGG.BUY", "TYPE" => "char", "FROM" => "INNER JOIN b_catalog_group2group CGG ON (P.CATALOG_GROUP_ID = CGG.CATALOG_GROUP_ID)")
229 );
230
231 $arSelectFields = $entityResult->prepareSelect($arSelectFields);
232
233 $arSqls = CCatalog::PrepareSql($arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields);
234
235 $arSqls["SELECT"] = str_replace("%%_DISTINCT_%%", "", $arSqls["SELECT"]);
236
237 if (empty($arGroupBy) && is_array($arGroupBy))
238 {
239 $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_price P ".$arSqls["FROM"];
240 if (!empty($arSqls["WHERE"]))
241 $strSql .= " WHERE ".$arSqls["WHERE"];
242 if (!empty($arSqls["GROUPBY"]))
243 $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
244
245 $dbRes = $DB->Query($strSql);
246 if ($arRes = $dbRes->Fetch())
247 return $arRes["CNT"];
248 else
249 return false;
250 }
251
252 $strSql = "SELECT ".$arSqls["SELECT"]." FROM b_catalog_price P ".$arSqls["FROM"];
253 if (!empty($arSqls["WHERE"]))
254 $strSql .= " WHERE ".$arSqls["WHERE"];
255 if (!empty($arSqls["GROUPBY"]))
256 $strSql .= " GROUP BY ".$arSqls["GROUPBY"];
257 if (!empty($arSqls["ORDERBY"]))
258 $strSql .= " ORDER BY ".$arSqls["ORDERBY"];
259
260 $intTopCount = 0;
261 $boolNavStartParams = (!empty($arNavStartParams) && is_array($arNavStartParams));
262 if ($boolNavStartParams && isset($arNavStartParams['nTopCount']))
263 {
264 $intTopCount = (int)$arNavStartParams["nTopCount"];
265 }
266 if ($boolNavStartParams && $intTopCount <= 0)
267 {
268 $strSql_tmp = "SELECT COUNT('x') as CNT FROM b_catalog_price P ".$arSqls["FROM"];
269 if (!empty($arSqls["WHERE"]))
270 $strSql_tmp .= " WHERE ".$arSqls["WHERE"];
271 if (!empty($arSqls["GROUPBY"]))
272 $strSql_tmp .= " GROUP BY ".$arSqls["GROUPBY"];
273
274 $dbRes = $DB->Query($strSql_tmp);
275 $cnt = 0;
276 if (empty($arSqls["GROUPBY"]))
277 {
278 if ($arRes = $dbRes->Fetch())
279 $cnt = $arRes["CNT"];
280 }
281 else
282 {
283 $cnt = $dbRes->SelectedRowsCount();
284 }
285
286 $dbRes = new CDBResult();
287 $dbRes->NavQuery($strSql, $cnt, $arNavStartParams);
288 }
289 else
290 {
291 if ($boolNavStartParams && $intTopCount > 0)
292 {
293 $strSql .= " LIMIT ".$intTopCount;
294 }
295 $entityResult->setResult($DB->Query($strSql));
296
297 $dbRes = $entityResult;
298 }
299
300 return $dbRes;
301 }
302}
static PrepareSql(&$arFields, $arOrder, $arFilter, $arGroupBy, $arSelectFields)
Определения catalog.php:389
static IsUserExists()
Определения catalog.php:1812
Определения price.php:8
Определения result.php:6
Определения dbresult.php:88
Определения price.php:8
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения price.php:20
static GetListEx($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения price.php:178
$arFields
Определения dblapprove.php:5
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
global $DB
Определения cron_frame.php:29
global $USER
Определения csv_new_run.php:40
$arRes
Определения options.php:104
$arFilter
Определения user_search.php:106
$dbRes
Определения yandex_detail.php:168