• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/component_ajax.php
  • Класс: CComponentAjax
  • Вызов: CComponentAjax::__PrepareLinks
function __PrepareLinks(&$data)
{
	$add_param = CAjax::GetSessionParam($this->componentID);

	$regexp_links = '/(]*?>.*?)/is'.BX_UTF_PCRE_MODIFIER;
	$regexp_params = '/([w-]+)s*=s*(["'])(.*?)2/is'.BX_UTF_PCRE_MODIFIER;

	$this->_checkPcreLimit($data);
	$arData = preg_split($regexp_links, $data, -1, PREG_SPLIT_DELIM_CAPTURE);

	if (!is_array($arData))
	{
		return;
	}

	$cData = count($arData);
	if($cData < 2)
		return;

	$arIgnoreAttributes = array('onclick' => true, 'target' => true);
	$arSearch = array(
		$add_param.'&',
		$add_param,
		'AJAX_CALL=Y&',
		'AJAX_CALL=Y'
	);
	$bDataChanged = false;

	for($iData = 1; $iData < $cData; $iData += 2)
	{
		if(!preg_match('/^]*?)>(.*?)$/is'.BX_UTF_PCRE_MODIFIER, $arData[$iData], $match))
			continue;

		$params = $match[1];

		if(!preg_match_all($regexp_params, $params, $arLinkParams))
			continue;

		$strAdditional = ' ';
		$url_key = -1;
		$bIgnoreLink = false;

		foreach ($arLinkParams[0] as $pkey => $value)
		{
			if ($value == '')
				continue;

			$param_name = mb_strtolower($arLinkParams[1][$pkey]);

			if ($param_name === 'href')
				$url_key = $pkey;
			elseif (isset($arIgnoreAttributes[$param_name]))
			{
				$bIgnoreLink = true;
				break;
			}
			else
				$strAdditional .= $value.' ';
		}

		if ($url_key >= 0 && !$bIgnoreLink)
		{
			$url = BitrixMainTextConverter::getHtmlConverter()->decode($arLinkParams[3][$url_key]);
			$url = str_replace($arSearch, '', $url);

			if ($this->__isAjaxURL($url))
			{
				$real_url = $url;

				$pos = mb_strpos($url, '#');
				if ($pos !== false)
					$real_url = mb_substr($real_url, 0, $pos);

				$real_url .= strpos($url, '?') === false ? '?' : '&';
				$real_url .= $add_param;

				$url_str = CAjax::GetLinkEx($real_url, $url, $match[2], 'comp_'.$this->componentID, $strAdditional);

				$arData[$iData] = $url_str;
				$bDataChanged = true;
			}
		}
	}

	if($bDataChanged)
		$data = implode('', $arData);
}