- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/node/embed.php
- Класс: BitrixLandingNodeEmbed
- Вызов: Embed::saveNode
static function saveNode(BitrixLandingBlock $block, $selector, array $data)
{
$doc = $block->getDom();
$resultList = $doc->querySelectorAll($selector);
$valueBefore = Embed::getNode($block, $selector);
foreach ($data as $pos => $value)
{
if (isset($resultList[$pos]))
{
if (isset($value['src']) && $value['src'])
{
if ($resultList[$pos]->getTagName() === 'IFRAME')
{
$resultList[$pos]->setAttribute('src', $value['src']);
}
else
{
$resultList[$pos]->setAttribute('data-src', $value['src']);
}
}
if (isset($value['source']) && $value['source'])
{
$resultList[$pos]->setAttribute('data-source', $value['source']);
}
// set ratio
if (
isset($value['ratio'], $value['src'])
&& $value['ratio'] && $value['src']
&& $valueBefore['src'] !== $value['src']
&& in_array($value['ratio'], self::RATIO_CLASSES)
)
{
$containerNode = $resultList[$pos]->getParentNode();
if ($containerNode && in_array(self::CONTAINER_CLASS, $containerNode->getClassList()))
{
$classes = $containerNode->getClassList();
$classes = array_diff($classes, self::RATIO_CLASSES);
$classes[] = $value['ratio'];
$containerNode->setClassList($classes);
}
}
// set preview image
$styles = [];
foreach (StyleInliner::getStyle($resultList[$pos]) as $key => $stylesValue)
{
if ($key !== 'background' && $key !== 'background-image')
{
$styles[] = "{$key}: {$stylesValue};";
}
}
if (isset($value['preview']) && $value['preview'])
{
$styles[] = "background-image: url('{$value['preview']}');";
$resultList[$pos]->setAttribute('data-preview', $value['preview']);
}
else
{
$resultList[$pos]->removeAttribute('data-preview');
}
$styles = implode(' ', $styles);
$resultList[$pos]->setAttribute('style', $styles);
}
if (History::isActive())
{
$history = new History($block->getLandingId(), History::ENTITY_TYPE_LANDING);
$history->push('EDIT_EMBED', [
'block' => $block,
'selector' => $selector,
'position' => (int)$pos,
'valueBefore' => $valueBefore[$pos],
'valueAfter' => $value,
]);
}
}
}