3namespace Bitrix\Seo\Sitemap;
5use Bitrix\Main\Localization\Loc;
6use Bitrix\Main\SiteTable;
9use Bitrix\Main\Type\DateTime;
10use Bitrix\Seo\Sitemap\Internals\SitemapTable;
11use Bitrix\Seo\Sitemap\Internals\RuntimeTable;
12use Bitrix\Seo\Sitemap\Type\Step;
13use Bitrix\Seo\RobotsFile;
15Loc::loadMessages(__DIR__ .
'/../../admin/seo_sitemap.php');
89 $this->sitemapData = (SitemapTable::getById($this->sitemapId))->fetch();
90 if (empty($this->sitemapData))
94 $this->sitemapData[
'SETTINGS'] = unserialize($this->sitemapData[
'SETTINGS'], [
'allowed_classes' =>
false]);
95 $this->sitemapData[
'SITE'] = (SiteTable::getByPrimary($this->sitemapData[
'SITE_ID']))->fetch();
97 $this->
init(Step::getFirstStep(), []);
112 $this->statusMessage = Loc::getMessage(
'SEO_SITEMAP_RUN_INIT');
147 public function run(): bool
152 if ($this->step === Step::STEPS[Step::STEP_INIT])
157 elseif ($this->step < Step::STEPS[Step::STEP_FILES])
162 elseif ($this->step < Step::STEPS[Step::STEP_IBLOCK_INDEX])
167 elseif ($this->step < Step::STEPS[Step::STEP_IBLOCK])
172 elseif ($this->step < Step::STEPS[Step::STEP_FORUM_INDEX])
177 elseif ($this->step < Step::STEPS[Step::STEP_FORUM])
182 elseif ($this->step < Step::STEPS[Step::STEP_INDEX])
202 isset($this->sitemapData[
'SETTINGS'][
'DIR'][
'/'])
203 && $this->sitemapData[
'SETTINGS'][
'DIR'][
'/'] ==
'Y';
215 $resAdd = RuntimeTable::add($runtimeData);
217 catch (\Exception $e)
222 if ($resAdd->isSuccess())
225 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_FILES', [
'#PATH#' =>
'/']);
228 return $resAdd->isSuccess();
236 $this->sitemapData[
'SETTINGS'][
'FILENAME_FILES'],
241 $isCheckFinished =
false;
244 while (!$isFinished && !self::isStepTimeOver())
248 $dbRes = RuntimeTable::getList([
249 'order' => [
'ITEM_PATH' =>
'ASC'],
251 'PID' => $this->sitemapId,
259 if ($dirData =
$dbRes->Fetch())
262 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_FILES', [
'#PATH#' => $dirData[
'ITEM_PATH']]);
263 $isCheckFinished =
false;
265 elseif (!$isCheckFinished)
268 $isCheckFinished =
true;
278 if ($this->step < Step::STEPS[Step::STEP_FILES] - 1)
286 if (!is_array($this->state[
'XML_FILES']))
288 $this->state[
'XML_FILES'] = [];
293 $this->step = Step::STEPS[Step::STEP_FILES];
294 $this->statusMessage = Loc::getMessage(
295 'SITEMAP_RUN_FILE_COMPLETE',
296 [
'#FILE#' => $this->sitemapData[
'SETTINGS'][
'FILENAME_FILES']]
315 $this->sitemapData[
'SETTINGS'][
'logical'] ==
'Y',
316 $this->sitemapData[
'SITE_ID'],
317 $dirData[
'ITEM_PATH']
320 foreach ($directories as
$dir)
322 $dirKey =
"/" . ltrim(
$dir[
'DATA'][
'ABS_PATH'],
"/");
324 if (
$dir[
'TYPE'] ==
'F')
327 !isset($this->sitemapData[
'SETTINGS'][
'FILE'][$dirKey])
328 || $this->sitemapData[
'SETTINGS'][
'FILE'][$dirKey] ==
'Y'
331 if (preg_match($this->sitemapData[
'SETTINGS'][
'FILE_MASK_REGEXP'],
$dir[
'FILE']))
333 $f =
new IO\File(
$dir[
'DATA'][
'PATH'], $this->sitemapData[
'SITE_ID']);
334 $this->sitemapFile->addFileEntry(
$f);
340 if (!isset($this->sitemapData[
'SETTINGS'][
'DIR'][$dirKey])
341 || $this->sitemapData[
'SETTINGS'][
'DIR'][$dirKey] ==
'Y')
343 $processedDirs[] = $dirKey;
350 $len = mb_strlen($dirData[
'ITEM_PATH']);
351 if (!empty($this->sitemapData[
'SETTINGS'][
'DIR']))
353 foreach ($this->sitemapData[
'SETTINGS'][
'DIR'] as $dirKey => $checked)
357 if (strncmp($dirData[
'ITEM_PATH'], $dirKey, $len) === 0)
359 $processedDirs[] = $dirKey;
365 if (!empty($this->sitemapData[
'SETTINGS'][
'FILE']))
367 foreach ($this->sitemapData[
'SETTINGS'][
'FILE'] as $dirKey => $checked)
371 if (strncmp($dirData[
'ITEM_PATH'], $dirKey, $len) === 0)
374 SiteTable::getDocumentRoot($this->sitemapData[
'SITE_ID']),
384 && preg_match($this->sitemapData[
'SETTINGS'][
'FILE_MASK_REGEXP'],
$f->getName())
387 $this->sitemapFile->addFileEntry(
$f);
396 if (is_array($processedDirs) && !empty($processedDirs))
398 foreach ($processedDirs as $dirKey)
402 'ITEM_PATH' => $dirKey,
407 RuntimeTable::add($runtimeData);
411 RuntimeTable::update($dirData[
'ID'], [
420 $iblockToProcess = [];
421 if (Loader::includeModule(
'iblock'))
423 $iblockToProcess = $this->sitemapData[
'SETTINGS'][
'IBLOCK_ACTIVE'];
424 if (is_array($iblockToProcess) && !empty($iblockToProcess))
427 $dbIBlock = \CIBlock::GetList([], [
'ID' => array_keys($iblockToProcess)]);
433 foreach ($iblockToProcess as
$iblockId => $iblockActive)
435 if ($iblockActive !==
'Y' || !array_key_exists(
$iblockId, $arIBlocks))
442 'PID' => $this->sitemapId,
452 $this->state[
'LEFT_MARGIN'] = 0;
453 $this->state[
'IBLOCK_LASTMOD'] = 0;
455 $this->state[
'IBLOCK'] = [];
456 $this->state[
'IBLOCK_MAP'] = [];
458 if (is_array($iblockToProcess) && !empty($iblockToProcess))
460 $this->step = Step::STEPS[Step::STEP_IBLOCK_INDEX];
461 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_IBLOCK');
465 $this->step = Step::STEPS[Step::STEP_IBLOCK];
466 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_IBLOCK_EMPTY');
477 $this->currentRuntimeIBlock =
null;
478 $this->currentIBlock =
null;
479 $this->sitemapFile =
null;
481 if (!Loader::includeModule(
'iblock'))
486 if (isset($_SESSION[
"SEO_SITEMAP_" . $this->sitemapId]))
489 unset($_SESSION[
"SEO_SITEMAP_" . $this->sitemapId]);
494 if (self::isStepTimeOver())
501 if (!$this->currentRuntimeIBlock)
503 $dbRes = RuntimeTable::getList([
504 'order' => [
'ID' =>
'ASC'],
506 'PID' => $this->sitemapId,
512 $runtimeIblock =
$dbRes->fetch();
513 $this->currentRuntimeIBlock = $runtimeIblock !==
false ? $runtimeIblock :
null;
515 if ($this->currentRuntimeIBlock)
517 $iblockId = (int)$this->currentRuntimeIBlock[
'ITEM_ID'];
520 $this->currentIBlock =
$dbIBlock->Fetch();
522 if (!$this->currentIBlock)
524 $this->state[
'LEFT_MARGIN'] = 0;
525 $this->state[
'IBLOCK_LASTMOD'] = 0;
526 $this->state[
'LAST_ELEMENT_ID'] = 0;
527 unset($this->state[
'CURRENT_SECTION']);
528 unset($this->currentRuntimeIBlock);
532 $this->statusMessage = Loc::getMessage(
533 'SITEMAP_RUN_IBLOCK_NAME',
534 [
'#IBLOCK_NAME#' => $this->currentIBlock[
'NAME']]
537 if ($this->currentIBlock[
'LIST_PAGE_URL'] ==
'')
539 $this->sitemapData[
'SETTINGS'][
'IBLOCK_LIST'][
$iblockId] =
'N';
541 if ($this->currentIBlock[
'SECTION_PAGE_URL'] ==
'')
543 $this->sitemapData[
'SETTINGS'][
'IBLOCK_SECTION'][
$iblockId] =
'N';
545 if ($this->currentIBlock[
'DETAIL_PAGE_URL'] ==
'')
547 $this->sitemapData[
'SETTINGS'][
'IBLOCK_ELEMENT'][
$iblockId] =
'N';
550 $this->state[
'IBLOCK_LASTMOD'] =
551 max($this->state[
'IBLOCK_LASTMOD'],
MakeTimeStamp($this->currentIBlock[
'TIMESTAMP_X']));
554 $this->state[
'LEFT_MARGIN'] <= 0
555 && $this->sitemapData[
'SETTINGS'][
'IBLOCK_ELEMENT'][
$iblockId] !==
'N'
558 $this->state[
'CURRENT_SECTION'] = 0;
562 [
'#IBLOCK_ID#',
'#IBLOCK_CODE#',
'#IBLOCK_XML_ID#'],
563 [
$iblockId, $this->currentIBlock[
'CODE'], $this->currentIBlock[
'XML_ID']],
564 $this->sitemapData[
'SETTINGS'][
'FILENAME_IBLOCK']
577 if (!$this->currentRuntimeIBlock || !$this->sitemapFile)
581 elseif (is_array($this->currentIBlock))
583 $isFinishedSections =
false;
584 if (!isset($this->state[
'CURRENT_SECTION']))
589 if ($isFinishedSections && !isset($this->state[
'CURRENT_SECTION']))
591 $isFinishedElements =
true;
598 if ($isFinishedSections && $isFinishedElements)
605 if ($this->step < Step::STEPS[Step::STEP_IBLOCK] - 1)
608 $this->step = min($this->step, Step::STEPS[Step::STEP_IBLOCK] - 1);
613 $this->step = Step::STEPS[Step::STEP_IBLOCK];
614 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_IBLOCK');
627 $iblockId = (int)$this->currentRuntimeIBlock[
'ITEM_ID'];
629 $this->state[
'LAST_ELEMENT_ID'] = 0;
630 $dbIblockResult = \CIBlockSection::GetList(
631 [
'LEFT_MARGIN' =>
'ASC'],
634 'GLOBAL_ACTIVE' =>
'Y',
635 '>LEFT_BORDER' => intval($this->state[
'LEFT_MARGIN']),
638 [
'ID',
'TIMESTAMP_X',
'SECTION_PAGE_URL',
'LEFT_MARGIN',
'IBLOCK_SECTION_ID'],
641 $processedSections = 0;
643 while ($arSection = $dbIblockResult->fetch())
651 $this->state[
'LEFT_MARGIN'] = $arSection[
'LEFT_MARGIN'];
652 $this->state[
'IBLOCK_LASTMOD'] = max($this->state[
'IBLOCK_LASTMOD'], $sectionLastmod);
654 $isProcessSections =
false;
655 $isProcessElements =
false;
657 if (isset($this->sitemapData[
'SETTINGS'][
'IBLOCK_SECTION_SECTION'][
$iblockId][$arSection[
'ID']]))
660 $this->sitemapData[
'SETTINGS'][
'IBLOCK_SECTION_SECTION'][
$iblockId][$arSection[
'ID']] ==
'Y';
662 $this->sitemapData[
'SETTINGS'][
'IBLOCK_SECTION_ELEMENT'][
$iblockId][$arSection[
'ID']] ==
'Y';
664 elseif ($arSection[
'IBLOCK_SECTION_ID'] > 0)
666 $dbRes = RuntimeTable::getList([
668 'PID' => $this->sitemapId,
670 'ITEM_ID' => $arSection[
'IBLOCK_SECTION_ID'],
673 'select' => [
'ACTIVE',
'ACTIVE_ELEMENT'],
677 $parentSection =
$dbRes->fetch();
686 $isProcessSections = $this->sitemapData[
'SETTINGS'][
'IBLOCK_SECTION'][
$iblockId] ==
'Y';
687 $isProcessElements = $this->sitemapData[
'SETTINGS'][
'IBLOCK_ELEMENT'][
$iblockId] ==
'Y';
692 'ITEM_ID' => $arSection[
'ID'],
699 if ($isProcessSections)
701 $this->state[
'IBLOCK'][
$iblockId][
'S']++;
702 $arSection[
'LANG_DIR'] = $this->sitemapData[
'SITE'][
'DIR'];
707 $arSection[
'SECTION_PAGE_URL'],
708 $this->sitemapData[
'SITE_ID']
710 $url = \CIBlock::ReplaceDetailUrl(
$url, $arSection,
false,
"S");
712 $this->sitemapFile->addIBlockEntry(
$url, $sectionLastmod);
715 RuntimeTable::add($arRuntimeData);
717 if ($isProcessElements)
719 $this->state[
'CURRENT_SECTION'] = (int)$arSection[
'ID'];
720 $this->state[
'LAST_ELEMENT_ID'] = 0;
725 $processedSections++;
728 if ($processedSections === 0)
741 unset($this->state[
'CURRENT_SECTION']);
742 $this->state[
'LEFT_MARGIN'] = 0;
743 $this->state[
'LAST_ELEMENT_ID'] = 0;
752 if (!isset($this->state[
'CURRENT_SECTION']))
759 $iblockId = (int)$this->currentRuntimeIBlock[
'ITEM_ID'];
760 $dbIblockResult = \CIBlockElement::GetList(
765 'SECTION_ID' => $this->state[
'CURRENT_SECTION'],
766 '>ID' => $this->state[
'LAST_ELEMENT_ID'],
767 'SITE_ID' => $this->sitemapData[
'SITE_ID'],
768 "ACTIVE_DATE" =>
"Y",
771 [
'nTopCount' => 100],
772 [
'ID',
'TIMESTAMP_X',
'DETAIL_PAGE_URL']
774 $processedElements = 0;
776 while ($arElement = $dbIblockResult->fetch())
783 if (!is_array($this->state[
'IBLOCK_MAP'][
$iblockId]))
785 $this->state[
'IBLOCK_MAP'][
$iblockId] = [];
787 if (!array_key_exists($arElement[
'ID'], $this->state[
'IBLOCK_MAP'][
$iblockId]))
789 $arElement[
'LANG_DIR'] = $this->sitemapData[
'SITE'][
'DIR'];
792 $this->state[
'IBLOCK_LASTMOD'] = max($this->state[
'IBLOCK_LASTMOD'], $elementLastmod);
793 $this->state[
'LAST_ELEMENT_ID'] = $arElement[
'ID'];
795 $this->state[
'IBLOCK'][
$iblockId][
'E']++;
796 $this->state[
'IBLOCK_MAP'][
$iblockId][$arElement[
"ID"]] = 1;
801 $arElement[
'DETAIL_PAGE_URL'],
802 $this->sitemapData[
'SITE_ID']
804 $url = \CIBlock::ReplaceDetailUrl(
$url, $arElement,
false,
"E");
806 $this->sitemapFile->addIBlockEntry(
$url, $elementLastmod);
808 $processedElements++;
812 if ($processedElements === 0)
825 unset($this->state[
'CURRENT_SECTION']);
826 $this->state[
'LAST_ELEMENT_ID'] = 0;
831 $iblockId = (int)$this->currentRuntimeIBlock[
'ID'];
842 $this->sitemapData[
'SETTINGS'][
'IBLOCK_LIST'][
$iblockId] ==
'Y'
843 && $this->currentIBlock[
'LIST_PAGE_URL'] <>
''
846 $this->state[
'IBLOCK'][
$iblockId][
'I']++;
848 $this->currentIBlock[
'IBLOCK_ID'] = $this->currentIBlock[
'ID'];
849 $this->currentIBlock[
'LANG_DIR'] = $this->sitemapData[
'SITE'][
'DIR'];
854 $this->currentIBlock[
'LIST_PAGE_URL'],
855 $this->sitemapData[
'SITE_ID']
857 $url = \CIBlock::ReplaceDetailUrl(
$url, $this->currentIBlock,
false,
"");
859 $this->sitemapFile->addIBlockEntry(
$url, $this->state[
'IBLOCK_LASTMOD']);
864 $this->currentRuntimeIBlock =
null;
865 $this->state[
'IBLOCK_LASTMOD'] = 0;
866 unset($this->state[
'CURRENT_SECTION']);
873 $forumToProcess = [];
875 if (Loader::includeModule(
'forum'))
877 if (!empty($this->sitemapData[
'SETTINGS'][
'FORUM_ACTIVE']))
879 foreach ($this->sitemapData[
'SETTINGS'][
'FORUM_ACTIVE'] as $forumId => $active)
883 $forumToProcess[$forumId] =
"Y";
887 if (!empty($forumToProcess))
893 '@ID' => array_keys($forumToProcess),
895 "SITE_ID" => $this->sitemapData[
'SITE_ID'],
903 $forumToProcess = array_intersect_key(
$arForums, $forumToProcess);
905 foreach ($forumToProcess as $id => $forum)
908 'PID' => $this->sitemapId,
918 $this->state[
'FORUM_CURRENT_TOPIC'] = 0;
920 if (is_array($forumToProcess) && !empty($forumToProcess))
922 $this->step = Step::STEPS[Step::STEP_FORUM_INDEX];
923 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_FORUM');
927 $this->step = Step::STEPS[Step::STEP_FORUM];
928 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_FORUM_EMPTY');
939 $runtimeForum =
false;
940 $currentForum =
null;
942 $this->sitemapFile =
null;
943 $dbTopicResult =
null;
946 if (!Loader::includeModule(
'forum'))
951 while (!$isFinished && !self::isStepTimeOver())
955 $dbRes = RuntimeTable::getList([
956 'order' => [
'ID' =>
'ASC'],
958 'PID' => $this->sitemapId,
964 $runtimeForum =
$dbRes->fetch();
968 $forumId = intval($runtimeForum[
'ITEM_ID']);
975 "SITE_ID" => $this->sitemapData[
'SITE_ID'],
979 $currentForum =
$db_res->Fetch();
982 $this->statusMessage = Loc::getMessage(
983 'SITEMAP_RUN_FORUM_NAME',
984 [
'#FORUM_NAME#' => $currentForum[
'NAME']]
987 $fileName = str_replace(
'#FORUM_ID#', $forumId, $this->sitemapData[
'SETTINGS'][
'FILENAME_FORUM']);
991 RuntimeTable::update($runtimeForum[
'ID'], [
997 if (!$runtimeForum || !$this->sitemapFile)
1001 elseif (is_array($currentForum))
1004 array_key_exists($forumId, $this->sitemapData[
'SETTINGS'][
'FORUM_TOPIC'])
1005 && $this->sitemapData[
'SETTINGS'][
'FORUM_TOPIC'][$forumId] ==
"Y"
1009 if ($dbTopicResult ==
null)
1012 [
"LAST_POST_DATE" =>
"DESC"],
1015 "FORUM_ID" => $forumId,
1019 $this->state[
'FORUM_CURRENT_TOPIC'] > 0
1020 ? [
">ID" => $this->state[
"FORUM_CURRENT_TOPIC"]]
1026 [
'nTopCount' => 100]
1029 if (($arTopic = $dbTopicResult->fetch()) && $arTopic)
1031 $this->state[
"FORUM_CURRENT_TOPIC"] = $arTopic[
"ID"];
1033 $currentForum[
"PATH2FORUM_MESSAGE"],
1035 "FORUM_ID" => $currentForum[
"ID"],
1036 "TOPIC_ID" => $arTopic[
"ID"],
1037 "TITLE_SEO" => $arTopic[
"TITLE_SEO"],
1038 "MESSAGE_ID" =>
"s",
1039 "SOCNET_GROUP_ID" => $arTopic[
"SOCNET_GROUP_ID"],
1040 "OWNER_ID" => $arTopic[
"OWNER_ID"],
1041 "PARAM1" => $arTopic[
"PARAM1"],
1042 "PARAM2" => $arTopic[
"PARAM2"],
1045 $this->sitemapFile->addIBlockEntry(
$url,
MakeTimeStamp($arTopic[
'LAST_POST_DATE']));
1051 $currentForum[
"PATH2FORUM_MESSAGE"],
1053 "FORUM_ID" => $currentForum[
"ID"],
1054 "TOPIC_ID" => $currentForum[
"TID"],
1055 "TITLE_SEO" => $currentForum[
"TITLE_SEO"],
1056 "MESSAGE_ID" =>
"s",
1057 "SOCNET_GROUP_ID" => $currentForum[
"SOCNET_GROUP_ID"],
1058 "OWNER_ID" => $currentForum[
"OWNER_ID"],
1059 "PARAM1" => $currentForum[
"PARAM1"],
1060 "PARAM2" => $currentForum[
"PARAM2"],
1063 $this->sitemapFile->addIBlockEntry(
$url,
MakeTimeStamp($currentForum[
'LAST_POST_DATE']));
1065 if (empty($arTopic))
1067 RuntimeTable::update($runtimeForum[
'ID'], [
1073 $runtimeForum =
false;
1074 $dbTopicResult =
null;
1075 $this->state[
'FORUM_CURRENT_TOPIC'] = 0;
1079 if ($this->step < Step::STEPS[Step::STEP_FORUM] - 1)
1086 $this->step = Step::STEPS[Step::STEP_FORUM];
1087 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_FINALIZE');
1095 if (!$this->sitemapFile)
1100 if ($this->sitemapFile->isNotEmpty())
1102 if ($this->sitemapFile->isCurrentPartNotEmpty())
1104 $this->sitemapFile->finish();
1108 $this->sitemapFile->delete();
1111 if (!is_array($this->state[
'XML_FILES']))
1113 $this->state[
'XML_FILES'] = [];
1116 $xmlFiles = $this->sitemapFile->getNameList();
1117 $directory = $this->sitemapFile->getPathDirectory();
1118 foreach ($xmlFiles as &$xmlFile)
1120 $xmlFile = $directory . $xmlFile;
1122 $this->state[
'XML_FILES'] = array_unique(array_merge($this->state[
'XML_FILES'], $xmlFiles));
1126 $this->sitemapFile->delete();
1138 if (is_array($this->state[
'XML_FILES']) && !empty($this->state[
'XML_FILES']))
1140 foreach ($this->state[
'XML_FILES'] as $xmlFile)
1144 $this->sitemapFile->getSiteRoot(),
1146 ), $this->sitemapData[
'SITE_ID']
1150 $this->sitemapFile->createIndex($xmlFiles);
1152 $existedSitemaps = [];
1153 if ($this->sitemapData[
'SETTINGS'][
'ROBOTS'] ==
'Y')
1155 $sitemapUrl = $this->sitemapFile->getUrl();
1157 $robotsFile =
new RobotsFile($this->sitemapData[
'SITE_ID']);
1158 $robotsFile->addRule([
1163 if (
count($sitemapLinks) > 1)
1165 foreach ($sitemapLinks as $rule)
1167 if ($rule[1] != $sitemapUrl)
1169 $existedSitemaps[] = $rule[1];
1184 $this->step = Step::STEPS[Step::STEP_INDEX];
1185 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_FINISH');
1192 $this->statusMessage = Loc::getMessage(
'SITEMAP_RUN_FINISH');
1193 SitemapTable::update($this->sitemapId, [
'DATE_RUN' =>
new DateTime()]);
1206 'SITE_ID' => $this->sitemapData[
'SITE_ID'],
1207 'PROTOCOL' => $this->sitemapData[
'SETTINGS'][
'PROTO'] == 1 ?
'https' :
'http',
1208 'DOMAIN' => $this->sitemapData[
'SETTINGS'][
'DOMAIN'],
1214 $this->stepStartTime = microtime(
true);
1223 return microtime(
true) > ($this->stepStartTime + self::STEP_DURATION * 0.95);
while($arIBType=$dbIBlockType->Fetch()) $dbIBlock
while($arRes=$dbSites->GetNext()) $arForums
static combine(... $args)
processDirectory($dirData)
finishIblockSectionsProcess()
init(int $step, array $state)
__construct(int $sitemapId)
array $currentRuntimeIBlock
finishIblockElementsProcess()
static clearByPid(int $pid)
static prepareUrlToReplace($url, $siteId=null)
static PreparePath2Message($strPath, $arVals=array())
static GetListEx($arOrder=Array("SORT"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
static GetList($arOrder=Array("SORT"=>"ASC"), $arFilter=Array(), $bCount=false, $iNum=0, $arAddParams=array())
static getDirStructure($bLogical, $site, $path)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
MakeTimeStamp($datetime, $format=false)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"