- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/update/block.php
- Класс: BitrixLandingUpdateBlock
- Вызов: Block::executeStep
static function executeStep(array $filter, &$count = 0, $limit = 0, array $params = [])
{
$lastId = 0;
Rights::setOff();
$res = BlockTable::getList([
'select' => [
'ID', 'CONTENT'
],
'filter' => $filter,
'order' => [
'ID' => 'asc'
],
'limit' => $limit
]);
while ($row = $res->fetch())
{
$lastId = $row['ID'];
$count++;
// gets content from exist block
$block = new BlockCore($row['ID']);
$block->setAccess(BlockCore::ACCESS_X);
$export = $block->export([
'clear_form' => false
]);
// and apply to the new layout
$newContent = BlockCore::getContentFromRepository(
$block->getCode()
);
$block->saveContent($newContent);
// update cards
if ($export['cards'])
{
$block->updateCards(
$export['cards']
);
}
// update style
if ($export['style'])
{
foreach ($export['style'] as $selector => $classes)
{
$addClasses = [];
if (isset($params[$selector]['new_class']))
{
if (is_array($params[$selector]['new_class']))
{
if (count($params[$selector]['new_class']) > 1)
{
$addClasses = $params[$selector]['new_class'];
}
else
{
$addClasses = explode(' ', trim($params[$selector]['new_class'][0]));
}
}
else
{
$addClasses = explode(' ', trim($params[$selector]['new_class']));
}
}
$removeClasses = [];
if (isset($params[$selector]['remove_class']))
{
if (is_array($params[$selector]['remove_class']))
{
if (count($params[$selector]['remove_class']) > 1)
{
$removeClasses = $params[$selector]['remove_class'];
}
else
{
$removeClasses = explode(' ', trim($params[$selector]['remove_class'][0]));
}
}
else
{
$removeClasses = explode(' ', trim($params[$selector]['remove_class']));
}
}
// change wrapper to valid selector
if ($selector == '#wrapper')
{
$selector = '#' . $block->getAnchor($block->getId());
}
foreach (self::prepareClassesToSet($classes, $addClasses, $removeClasses) as $class)
{
$block->setClasses(array(
$selector . $class['suffix'] => array(
'classList' => [$class['classList']]
)
));
}
}
}
// update nodes
if ($export['nodes'])
{
foreach ($export['nodes'] as $selector => $node)
{
if (isset($params[$selector]['update_video_to_lazyload']))
{
$export['nodes'][$selector] = self::updateVideoToLazyload($node);
}
}
$block->updateNodes(
$export['nodes']
);
}
// update menu
if ($export['menu'])
{
$block->updateNodes(
$export['menu']
);
}
// update attrs
if ($export['attrs'])
{
if (isset($export['attrs']['#wrapper']))
{
$wrapperCode = '#' . $block->getAnchor($block->getId());
$export['attrs'][$wrapperCode] = $export['attrs']['#wrapper'];
unset($export['attrs']['#wrapper']);
}
$block->setAttributes(
$export['attrs']
);
}
// and save block with new layout and old content
$block->save();
}
Rights::setOn();
return $lastId;
}