1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
yandex_simple_run.php
См. документацию.
1<?
2//<title>Yandex simple</title>
9
10IncludeModuleLangFile($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/catalog/export_setup_templ.php');
11set_time_limit(0);
12
16{
17 $bTmpUserCreated = true;
18 if (isset($USER))
19 $USER_TMP = $USER;
20 $USER = new CUser();
21}
22
26if ($USER->IsAuthorized())
27{
30}
31
33{
34 if (in_array($arg[0], array("&quot;", "&amp;", "&lt;", "&gt;")))
35 return $arg[0];
36 else
37 return " ";
38}
39
40function yandex_text2xml($text, $bHSC = false, $bDblQuote = false)
41{
42 $bHSC = (true == $bHSC ? true : false);
43 $bDblQuote = (true == $bDblQuote ? true: false);
44
45 if ($bHSC)
46 {
48 if ($bDblQuote)
49 $text = str_replace('&quot;', '"', $text);
50 }
51 $text = preg_replace('/[\x01-\x08\x0B-\x0C\x0E-\x1F]/', "", $text);
52 $text = str_replace("'", "&apos;", $text);
53 $text = Encoding::convertEncoding($text, LANG_CHARSET, 'windows-1251');
54 return $text;
55}
56
58
59$usedProtocol = (isset($USE_HTTPS) && $USE_HTTPS == 'Y' ? 'https://' : 'http://');
60
62if ($SETUP_FILE_NAME == '')
63{
64 $strExportErrorMessage .= GetMessage("CET_ERROR_NO_FILENAME")."<br>";
65}
67{
68 $strExportErrorMessage .= GetMessage("CES_ERROR_BAD_EXPORT_FILENAME")."<br>";
69}
70
72{
74
75/* if ($APPLICATION->GetFileAccessPermission($SETUP_FILE_NAME) < "W")
76 {
77 $strExportErrorMessage .= str_replace("#FILE#", $SETUP_FILE_NAME, GetMessage('CET_YAND_RUN_ERR_SETUP_FILE_ACCESS_DENIED'))."\n";
78 } */
79}
80
82{
83 if (!$fp = @fopen($_SERVER["DOCUMENT_ROOT"].$SETUP_FILE_NAME, "wb"))
84 {
85 $strExportErrorMessage .= str_replace('#FILE#',$_SERVER["DOCUMENT_ROOT"].$SETUP_FILE_NAME, GetMessage('CET_YAND_RUN_ERR_SETUP_FILE_OPEN_WRITING'))."\n";
86 }
87 else
88 {
89 if (!@fwrite($fp, '<?php' . "\n"))
90 {
91 $strExportErrorMessage .= str_replace('#FILE#',$_SERVER["DOCUMENT_ROOT"].$SETUP_FILE_NAME, GetMessage('CET_YAND_RUN_ERR_SETUP_FILE_WRITE'))."\n";
92 @fclose($fp);
93 }
94 else
95 {
96 fwrite($fp, 'if (!isset($_GET["referer1"]) || $_GET["referer1"] == "") $_GET["referer1"] = "yandext";' . "\n");
97 fwrite($fp, '$strReferer1 = htmlspecialchars($_GET["referer1"]);' . "\n");
98 fwrite($fp, 'if (!isset($_GET["referer2"]) || $_GET["referer2"] == "") $_GET["referer2"] = "";' . "\n");
99 fwrite($fp, '$strReferer2 = htmlspecialchars($_GET["referer2"]);' . "\n");
100 }
101 }
102}
103
104if ($strExportErrorMessage == '')
105{
106 fwrite($fp, 'header("Content-Type: text/xml; charset=windows-1251");' . "\n");
107 fwrite($fp, '?>' . "\n");
108 fwrite($fp, '<?= \'<?xml version="1.0" encoding="windows-1251"?>\'; ?>' . "\n");
109 fwrite($fp, "<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\n");
110 fwrite($fp, "<yml_catalog date=\"".date("Y-m-d H:i")."\">\n");
111 fwrite($fp, "<shop>\n");
112 fwrite($fp, "<name>".Encoding::convertEncoding(htmlspecialcharsbx(COption::GetOptionString("main", "site_name", "")), LANG_CHARSET, 'windows-1251')."</name>\n");
113 fwrite($fp, "<company>".Encoding::convertEncoding(htmlspecialcharsbx(COption::GetOptionString("main", "site_name", "")), LANG_CHARSET, 'windows-1251')."</company>\n");
114 fwrite($fp, "<url>".$usedProtocol.htmlspecialcharsbx($SETUP_SERVER_NAME <> '' ? $SETUP_SERVER_NAME : COption::GetOptionString("main", "server_name", ""))."</url>\n");
115 fwrite($fp, "<platform>1C-Bitrix</platform>\n");
116
117 $BASE_CURRENCY = Currency\CurrencyManager::getBaseCurrency();
118 $RUR = 'RUB';
119 $currencyIterator = Currency\CurrencyTable::getList(array(
120 'select' => array('CURRENCY'),
121 'filter' => array('=CURRENCY' => 'RUR')
122 ));
123 if ($currency = $currencyIterator->fetch())
124 $RUR = 'RUR';
125 unset($currency, $currencyIterator);
126
127 $allowedCurrency = array('RUR', 'RUB', 'USD', 'EUR', 'UAH', 'BYR', 'BYN', 'KZT');
128 $strTmp = "<currencies>\n";
129 $currencyIterator = Currency\CurrencyTable::getList(array(
130 'select' => array('CURRENCY', 'SORT'),
131 'filter' => array('@CURRENCY' => $allowedCurrency),
132 'order' => array('SORT' => 'ASC', 'CURRENCY' => 'ASC')
133 ));
134 while ($currency = $currencyIterator->fetch())
135 $strTmp .= '<currency id="'.$currency['CURRENCY'].'" rate="'.(CCurrencyRates::ConvertCurrency(1, $currency['CURRENCY'], $RUR)).'" />'."\n";
136 unset($currency, $currencyIterator, $allowedCurrency);
137
138 $strTmp .= "</currencies>\n";
139
140 fwrite($fp, $strTmp);
141 unset($strTmp);
142
143 //*****************************************//
144
145 $arSelect = array(
146 "ID", "IBLOCK_ID", "IBLOCK_SECTION_ID", "NAME", "PREVIEW_PICTURE", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE",
147 "DETAIL_PICTURE", "DETAIL_PAGE_URL", 'CATALOG_AVAILABLE'
148 );
149
150 $strTmpCat = "";
151 $strTmpOff = "";
152
153 if (is_array($YANDEX_EXPORT))
154 {
155 $arSiteServers = array();
156
157 $intMaxSectionID = 0;
158 $sectionIterator = Iblock\SectionTable::getList(array(
159 'select' => array(
160 new Main\Entity\ExpressionField('MAX_ID', 'MAX(%s)', array('ID'))
161 )
162 ));
163 if ($section = $sectionIterator->fetch())
164 $intMaxSectionID = (int)$section['MAX_ID'];
165 unset($section, $sectionIterator);
166 $intMaxSectionID += 100000000;
167 $maxSections = array();
168
169 foreach ($YANDEX_EXPORT as $ykey => $yvalue)
170 {
171 $boolNeedRootSection = false;
172
173 $yvalue = (int)$yvalue;
174 if ($yvalue <= 0)
175 continue;
176
178 if (empty($arIBlock) || !is_array($arIBlock))
179 continue;
180 if ('Y' != $arIBlock['ACTIVE'])
181 continue;
182 $boolRights = false;
183 if ('E' != $arIBlock['RIGHTS_MODE'])
184 {
185 $arRights = CIBlock::GetGroupPermissions($yvalue);
186 if (!empty($arRights) && isset($arRights[2]) && 'R' <= $arRights[2])
187 $boolRights = true;
188 }
189 else
190 {
191 $obRights = new CIBlockRights($yvalue);
192 $arRights = $obRights->GetGroups(array('section_read', 'element_read'));
193 if (!empty($arRights) && in_array('G2',$arRights))
194 $boolRights = true;
195 }
196 if (!$boolRights)
197 continue;
198
199 $filter = array("IBLOCK_ID" => $yvalue, "ACTIVE" => "Y", "IBLOCK_ACTIVE" => "Y", "GLOBAL_ACTIVE" => "Y");
200 $db_acc = CIBlockSection::GetList(array("LEFT_MARGIN" => "ASC"), $filter, false, array('ID', 'IBLOCK_SECTION_ID', 'NAME'));
201
202 $arAvailGroups = array();
203 while ($arAcc = $db_acc->Fetch())
204 {
205 $arAcc['ID'] = (int)$arAcc['ID'];
206 $arAcc['IBLOCK_SECTION_ID'] = (int)$arAcc['IBLOCK_SECTION_ID'];
207 $strTmpCat.= '<category id="'.$arAcc['ID'].'"'.($arAcc['IBLOCK_SECTION_ID'] > 0 ? ' parentId="'.$arAcc['IBLOCK_SECTION_ID'].'"' : '').'>'.yandex_text2xml($arAcc['NAME'], true).'</category>'."\n";
208 $arAvailGroups[] = $arAcc['ID'];
209 }
210
211 //*****************************************//
212
213 $filter = array("IBLOCK_ID" => $yvalue, "ACTIVE_DATE" => "Y", "ACTIVE" => "Y");
214 $res = CIBlockElement::GetList(array('ID' => 'ASC'), $filter, false, false, $arSelect);
215
216 $total_sum=0;
217 $is_exists=false;
218 $cnt=0;
219
220 while ($arAcc = $res->GetNext())
221 {
222 $cnt++;
223 if ($SETUP_SERVER_NAME == '')
224 {
225 if (!array_key_exists($arAcc['LID'], $arSiteServers))
226 {
227 $rsSite = CSite::GetList('', '', array("LID" => $arAcc["LID"]));
228 if($arSite = $rsSite->Fetch())
229 $arAcc["SERVER_NAME"] = $arSite["SERVER_NAME"];
230 if($arAcc["SERVER_NAME"] == '' && defined("SITE_SERVER_NAME"))
231 $arAcc["SERVER_NAME"] = SITE_SERVER_NAME;
232 if($arAcc["SERVER_NAME"] == '')
233 $arAcc["SERVER_NAME"] = COption::GetOptionString("main", "server_name", "");
234
235 $arSiteServers[$arAcc['LID']] = $arAcc['SERVER_NAME'];
236 }
237 else
238 {
239 $arAcc['SERVER_NAME'] = $arSiteServers[$arAcc['LID']];
240 }
241 }
242 else
243 {
244 $arAcc['SERVER_NAME'] = $SETUP_SERVER_NAME;
245 }
246
247 $str_AVAILABLE = ($arAcc['CATALOG_AVAILABLE'] == 'Y' ? ' available="true"' : ' available="false"');
248
249 $minPrice = 0;
250 $minPriceCurrency = "";
252 $arAcc['ID'],
253 1,
254 array(2), // anonymous
255 'N',
256 array(),
257 $arIBlock['LID'],
258 array()
259 ))
260 {
261 $minPrice = $arPrice['DISCOUNT_PRICE'];
262 if ($BASE_CURRENCY != $RUR)
263 $minPrice = CCurrencyRates::ConvertCurrency($minPrice, $BASE_CURRENCY, $RUR);
264 $minPriceCurrency = $RUR;
265 }
266
267 if ($minPrice <= 0) continue;
268
269 $currentSection = false;
270 $bNoActiveGroup = true;
271 $strTmpOff_tmp = "";
272 $db_res1 = CIBlockElement::GetElementGroups($arAcc["ID"], false, array('ID', 'ADDITIONAL_PROPERTY_ID'));
273 while ($ar_res1 = $db_res1->Fetch())
274 {
275 $ar_res1['ID'] = (int)$ar_res1['ID'];
276 $ar_res1['ADDITIONAL_PROPERTY_ID'] = (int)$ar_res1['ADDITIONAL_PROPERTY_ID'];
277 if ($ar_res1['ADDITIONAL_PROPERTY_ID'] > 0)
278 continue;
279 $currentSection = true;
280 if (in_array($ar_res1["ID"], $arAvailGroups))
281 {
282 $strTmpOff_tmp.= "<categoryId>".$ar_res1["ID"]."</categoryId>\n";
283 $bNoActiveGroup = false;
284 }
285 }
286
287 if (!$currentSection)
288 {
289 $boolNeedRootSection = true;
290 if (!isset($maxSections[$yvalue]))
291 $maxSections[$yvalue] = $intMaxSectionID + $yvalue;
292 $strTmpOff_tmp.= '<categoryId>'.$maxSections[$yvalue]."</categoryId>\n";
293 }
294 else
295 {
296 if ($bNoActiveGroup)
297 continue;
298 }
299
300 if ('' == $arAcc['DETAIL_PAGE_URL'])
301 {
302 $arAcc['DETAIL_PAGE_URL'] = '/';
303 }
304 else
305 {
306 $arAcc['DETAIL_PAGE_URL'] = str_replace(' ', '%20', $arAcc['DETAIL_PAGE_URL']);
307 }
308 if ('' == $arAcc['~DETAIL_PAGE_URL'])
309 {
310 $arAcc['~DETAIL_PAGE_URL'] = '/';
311 }
312 else
313 {
314 $arAcc['~DETAIL_PAGE_URL'] = str_replace(' ', '%20', $arAcc['~DETAIL_PAGE_URL']);
315 }
316
317 $strTmpOff.= "<offer id=\"".$arAcc["ID"]."\"".$str_AVAILABLE.">\n";
318 $strTmpOff.= "<url>".$usedProtocol.$arAcc['SERVER_NAME'].htmlspecialcharsbx($arAcc["~DETAIL_PAGE_URL"]).(mb_strstr($arAcc['DETAIL_PAGE_URL'], '?') === false ? '?' : '&amp;')."r1=<?echo \$strReferer1; ?>&amp;r2=<?echo \$strReferer2; ?></url>\n";
319
320 $strTmpOff.= "<price>".$minPrice."</price>\n";
321 $strTmpOff.= "<currencyId>".$minPriceCurrency."</currencyId>\n";
322
323 $strTmpOff.= $strTmpOff_tmp;
324
325 if (intval($arAcc["DETAIL_PICTURE"])>0 || intval($arAcc["PREVIEW_PICTURE"])>0)
326 {
327 $pictNo = intval($arAcc["DETAIL_PICTURE"]);
328 if ($pictNo<=0) $pictNo = intval($arAcc["PREVIEW_PICTURE"]);
329
330 $arPictInfo = CFile::GetFileArray($pictNo);
331 if (is_array($arPictInfo))
332 {
333 if(mb_substr($arPictInfo["SRC"], 0, 1) == "/")
334 $strFile = $usedProtocol.$arAcc['SERVER_NAME'].CHTTP::urnEncode($arPictInfo["SRC"], 'utf-8');
335 else
336 $strFile = $arPictInfo["SRC"];
337 $strTmpOff.="<picture>".$strFile."</picture>\n";
338 }
339 }
340
341 $strTmpOff.= "<name>".yandex_text2xml($arAcc["~NAME"], true)."</name>\n";
342 $strTmpOff.=
343 "<description>".
345 ($arAcc["PREVIEW_TEXT_TYPE"]=="html"?
346 strip_tags(preg_replace_callback("'&[^;]*;'", "yandex_replace_special", $arAcc["~PREVIEW_TEXT"])) : preg_replace_callback("'&[^;]*;'", "yandex_replace_special", $arAcc["~PREVIEW_TEXT"])),
347 3000), true).
348 "</description>\n";
349 $strTmpOff.= "</offer>\n";
350 if (100 <= $cnt)
351 {
352 $cnt = 0;
354 'PRODUCT' => true,
355 'SECTIONS' => true,
356 'PROPERTIES' => true
357 ));
358 }
359 }
360
361 if ($boolNeedRootSection)
362 {
363 $iblockName = CIBlock::GetArrayByID($yvalue, 'NAME');
364 $strTmpCat .= '<category id="'.$maxSections[$yvalue].'">'.yandex_text2xml(GetMessage('YANDEX_ROOT_DIRECTORY_EXT', array('#NAME#' => $iblockName)), true)."</category>\n";
365 unset($iblockName);
366 }
367 }
368 }
369
370 fwrite($fp, "<categories>\n");
371 fwrite($fp, $strTmpCat);
372 fwrite($fp, "</categories>\n");
373
374 fwrite($fp, "<offers>\n");
375 fwrite($fp, $strTmpOff);
376 fwrite($fp, "</offers>\n");
377
378 fwrite($fp, "</shop>\n");
379 fwrite($fp, "</yml_catalog>\n");
380
381 fclose($fp);
382}
383
385
387{
388 if (isset($USER_TMP))
389 {
390 $USER = $USER_TMP;
391 unset($USER_TMP);
392 }
393}
global $APPLICATION
Определения include.php:80
const BX_CATALOG_FILENAME_REG
Определения include.php:51
if($USER->IsAuthorized()) if(!function_exists("yandex_replace_special")) if(!function_exists("yandex_text2xml")) $usedProtocol
Определения yandex.php:58
static ClearCoupon()
Определения discount_coupon.php:283
static ClearCouponsByManage($intUserID)
Определения discount_coupon.php:456
static ClearDiscountCache($arTypes)
Определения discount.php:4224
static Disable()
Определения discount_save.php:38
static Enable()
Определения discount_save.php:33
static IsUserExists()
Определения catalog.php:1812
static GetOptimalPrice($intProductID, $quantity=1, $arUserGroups=array(), $renewal="N", $priceList=array(), $siteID=false, $arDiscountCoupons=false)
Определения product.php:973
static ConvertCurrency($valSum, $curFrom, $curTo, $valDate="")
Определения currency_rate.php:393
static GetElementGroups($ID, $bElementOnly=false, $arSelect=array())
Определения iblockelement.php:5618
static GetArrayByID($ID, $FIELD="")
Определения iblock.php:823
static GetGroupPermissions($ID)
Определения iblock.php:2401
static GetOptionString($module_id, $name, $def="", $site=false, $bExactSite=false)
Определения option.php:8
static GetList($by="sort", $order="asc", $arFilter=[])
Определения site.php:605
static GetFileArray($fileId, $uploadDir=false)
Определения file.php:1207
static GetList($arOrder=array("SORT"=>"ASC"), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
Определения iblockelement.php:658
static GetList($arOrder=array("SORT"=>"ASC"), $arFilter=array(), $bIncCnt=false, $arSelect=array(), $arNavStartParams=false)
Определения iblocksection.php:14
else $SETUP_FILE_NAME
Определения ebay_mip_run.php:56
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$filter
Определения iblock_catalog_list.php:54
$_SERVER["DOCUMENT_ROOT"]
Определения cron_frame.php:9
if(! $ar_profile) $strFile
Определения cron_frame.php:59
global $USER
Определения csv_new_run.php:40
$strExportErrorMessage
Определения csv_new_run.php:128
$bTmpUserCreated
Определения csv_new_run.php:41
const LANG_CHARSET
Определения include.php:65
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
Определения tools.php:2701
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
Определения tools.php:3778
Rel2Abs($curdir, $relpath)
Определения tools.php:3297
GetMessage($name, $aReplace=null)
Определения tools.php:3397
TruncateText($strText, $intLen)
Определения tools.php:2185
Определения ufield.php:9
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
Определения prolog_main_admin.php:393
$text
Определения template_pdf.php:79
$total_sum
Определения factura.php:657
$currency
Определения template.php:266
$arIBlock['PROPERTY']
Определения yandex_detail.php:172
$BASE_CURRENCY
Определения yandex_run.php:987
$SETUP_SERVER_NAME
Определения yandex_run.php:605
yandex_text2xml($text, $bHSC=false, $bDblQuote=false)
Определения yandex_simple_run.php:40
if( $USER->IsAuthorized()) yandex_replace_special($arg)
Определения yandex_simple_run.php:32
$SETUP_SERVER_NAME
Определения yandex_simple_run.php:61