• Модуль: landing
  • Путь к файлу: ~/bitrix/modules/landing/lib/node/text.php
  • Класс: BitrixLandingNodeText
  • Вызов: Text::saveNode
static function saveNode(BitrixLandingBlock $block, $selector, array $data, $additional = []): array
{
	$result = [];
	$doc = $block->getDom();
	$resultList = $doc->querySelectorAll($selector);
	$additional['sanitize'] = !isset($additional['sanitize']) ||
							  isset($additional['sanitize']) &&
							  $additional['sanitize'] === true;

	foreach ($data as $pos => $value)
	{
		if (isset($value['url']))
		{
			$url = is_array($value['url'])
				? json_encode($value['url'])
				: $value['url'];
		}
		else
		{
			$url = '';
		}

		if (isset($value['text']))
		{
			$value = $value['text'];
		}

		if (!is_string($value) && !is_int($value))
		{
			continue;
		}

		$value = trim($value);

		if (isset($resultList[$pos]))
		{
			$result[$pos] = [];

			if ($additional['sanitize'])
			{
				$value = BitrixLandingManager::sanitize($value, $bad);
			}

			// clear some amp
			if ($value)
			{
				$value = preg_replace('/&([^s]{1})/is', '&$1', $value);
				$value = str_replace(
					' bxstyle="',
					' style="',
					$value
				);
			}
			else
			{
				$value = ' ';
			}

			if (History::isActive())
			{
				$history = new History($block->getLandingId(), History::ENTITY_TYPE_LANDING);
				$history->push('EDIT_TEXT', [
					'block' => $block,
					'selector' => $selector,
					'position' => (int)$pos,
					'valueBefore' => $resultList[$pos]->getInnerHTML(),
					'valueAfter' => $value,
				]);
			}

			$result[$pos]['content'] = $value;
			$resultList[$pos]->setInnerHTML($value);

			if ($url)
			{
				$result[$pos]['attrs'] = [
					'data-pseudo-url' => $url
				];
				$resultList[$pos]->setAttribute('data-pseudo-url', $url);
			}
		}
	}

	return $result;
}