• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/lib/component/elementlist.php
  • Класс: BitrixIblockComponentElementList
  • Вызов: ElementList::prepareLinks
public function prepareLinks(&$data)
{
	$addParam = CAjax::GetSessionParam($this->arParams['AJAX_ID']);

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

	$this->checkPcreLimit($data);
	$arData = preg_split($regexpLinks, $data, -1, PREG_SPLIT_DELIM_CAPTURE);

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

	$ignoreAttributes = array(
		'onclick' => true,
		'target' => true
	);
	$search = array(
		$addParam.'&',
		$addParam,
		'AJAX_CALL=Y&',
		'AJAX_CALL=Y'
	);
	$dataChanged = false;

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

		$params = $match[1];

		if (!preg_match_all($regexpParams, $params, $linkParams))
			continue;

		$strAdditional = ' ';
		$urlKey = -1;
		$ignoreLink = false;

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

			$paramName = mb_strtolower($linkParams[1][$key]);

			if ($paramName === 'href')
			{
				$urlKey = $key;
			}
			elseif (isset($ignoreAttributes[$paramName]))
			{
				$ignoreLink = true;
				break;
			}
			else
			{
				$strAdditional .= $value.' ';
			}
		}

		if ($urlKey >= 0 && !$ignoreLink)
		{
			$url = TextConverter::getHtmlConverter()->decode($linkParams[3][$urlKey]);
			$url = str_replace($search, '', $url);

			if ($this->isAjaxURL($url))
			{
				$realUrl = $url;

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

				$realUrl .= mb_strpos($url, '?') === false ? '?' : '&';
				$realUrl .= $addParam;

				$arData[$i] = CAjax::GetLinkEx($realUrl, $url, $match[2], 'comp_'.$this->arParams['AJAX_ID'], $strAdditional);

				$dataChanged = true;
			}
		}
	}

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