- Модуль: 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);
}
}