• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/urlrewriter.php
  • Класс: BitrixMainUrlRewriter
  • Вызов: UrlRewriter::reindexFile
static function reindexFile($siteId, $rootPath, $path, $maxFileSize = 0)
{
	$pathAbs = IOPath::combine($rootPath, $path);

	if (!static::checkPath($pathAbs))
		return 0;

	$file = new IOFile($pathAbs);
	if ($maxFileSize > 0 && $file->getSize() > $maxFileSize * 1024)
		return 0;

	$fileSrc = $file->getContents();

	if (!$fileSrc || $fileSrc == "")
		return 0;

	$arComponents = PHPParser::parseScript($fileSrc);

	for ($i = 0, $cnt = count($arComponents); $i < $cnt; $i++)
	{
		$sef = (is_array($arComponents[$i]["DATA"]["PARAMS"]) && $arComponents[$i]["DATA"]["PARAMS"]["SEF_MODE"] == "Y");

		ComponentParametersTable::add(
			array(
				'SITE_ID' => $siteId,
				'COMPONENT_NAME' => $arComponents[$i]["DATA"]["COMPONENT_NAME"],
				'TEMPLATE_NAME' => $arComponents[$i]["DATA"]["TEMPLATE_NAME"],
				'REAL_PATH' => $path,
				'SEF_MODE' => ($sef? ComponentParametersTable::SEF_MODE : ComponentParametersTable::NOT_SEF_MODE),
				'SEF_FOLDER' => ($sef? $arComponents[$i]["DATA"]["PARAMS"]["SEF_FOLDER"] : null),
				'START_CHAR' => $arComponents[$i]["START"],
				'END_CHAR' => $arComponents[$i]["END"],
				'PARAMETERS' => serialize($arComponents[$i]["DATA"]["PARAMS"]),
			)
		);

		if ($sef)
		{
			if (array_key_exists("SEF_RULE", $arComponents[$i]["DATA"]["PARAMS"]))
			{
				$ruleMaker = new UrlRewriterRuleMaker;
				$ruleMaker->process($arComponents[$i]["DATA"]["PARAMS"]["SEF_RULE"]);

				$arFields = array(
					"CONDITION" => $ruleMaker->getCondition(),
					"RULE" => $ruleMaker->getRule(),
					"ID" => $arComponents[$i]["DATA"]["COMPONENT_NAME"],
					"PATH" => $path,
					"SORT" => self::DEFAULT_SORT,
				);
			}
			else
			{
				$arFields = array(
					"CONDITION" => "#^".$arComponents[$i]["DATA"]["PARAMS"]["SEF_FOLDER"]."#",
					"RULE" => "",
					"ID" => $arComponents[$i]["DATA"]["COMPONENT_NAME"],
					"PATH" => $path,
					"SORT" => self::DEFAULT_SORT,
				);
			}

			static::add($siteId, $arFields);
		}
	}

	return true;
}