- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/block.php
- Класс: BitrixLandingBlock
- Вызов: Block::export
public function export(array $params = [])
{
$manifest = $this->getManifest();
$doc = $this->getDom();
$cards = [];
$nodes = [];
$menu = [];
$styles = [];
$allAttrs = [];
// prepare params
if (!isset($params['clear_form']))
{
$params['clear_form'] = true;
}
// get actual cards content
if (isset($manifest['cards']))
{
foreach ($manifest['cards'] as $selector => $node)
{
$cards[$selector] = [
'source' => []
];
$resultList = $doc->querySelectorAll($selector);
$resultListCnt = count($resultList);
foreach ($resultList as $pos => $result)
{
$cards[$selector]['source'][$pos] = array(
'value' => $result->getAttribute('data-card-preset'),
'type' => Block::PRESET_SYM_CODE
);
if (!$cards[$selector]['source'][$pos]['value'])
{
//@tmp for menu first item
if (mb_strpos($this->getCode(), 'menu') !== false)
{
$cards[$selector]['source'][$pos]['value'] = $resultListCnt > 0 ? 1 : 0;
}
else
{
$cards[$selector]['source'][$pos]['value'] = 0;
}
$cards[$selector]['source'][$pos]['type'] = Block::CARD_SYM_CODE;
}
}
// attrs
if (
isset($node['additional']['attrs']) &&
is_array($node['additional']['attrs'])
)
{
foreach ($node['additional']['attrs'] as $attr)
{
if (isset($attr['attribute']))
{
if (!isset($allAttrs[$selector]))
{
$allAttrs[$selector] = [];
}
$allAttrs[$selector][] = $attr['attribute'];
}
}
}
}
}
// get content nodes
if (isset($manifest['nodes']))
{
foreach ($manifest['nodes'] as $selector => $node)
{
/** @var Node $class */
$class = NodeType::getClassName($node['type']);
$nodes[$selector] = $class::getNode($this, $selector);
}
}
if (isset($manifest['menu']))
{
// recursive getting menu
$exportMenu = function($resultList) use(&$exportMenu)
{
if(!$resultList)
{
return [];
}
$menu = [];
foreach ($resultList->getChildNodesArray() as $pos => $node)
{
$menu[$pos] = [];
if ($node->getNodeName() == 'LI')
{
foreach ($node->getChildNodesArray() as $nodeInner)
{
if ($nodeInner->getNodeName() == 'A')
{
$menu[$pos]['text'] = trim($nodeInner->getTextContent());
$menu[$pos]['href'] = trim($nodeInner->getAttribute('href'));
$menu[$pos]['target'] = trim($nodeInner->getAttribute('target'));
}
else if ($nodeInner->getNodeName() == 'UL')
{
$menu[$pos]['children'] = $exportMenu($nodeInner);
}
}
}
if (!$menu[$pos])
{
unset($menu[$pos]);
}
}
return array_values($menu);
};
foreach ($manifest['menu'] as $selector => $menuNode)
{
$menu[$selector] = $exportMenu($doc->querySelector($selector));
}
}
// get actual css from nodes
if (isset($manifest['style']['nodes']))
{
foreach ($manifest['style']['nodes'] as $selector => $node)
{
$nodeStyle = NodeStyle::getStyle($this, $selector);
if ($nodeStyle)
{
$styles[$selector] = $nodeStyle;
}
// attrs
if (
isset($node['additional']['attrs']) &&
is_array($node['additional']['attrs'])
)
{
foreach ($node['additional']['attrs'] as $attr)
{
if (isset($attr['attribute']))
{
if (!isset($allAttrs[$selector]))
{
$allAttrs[$selector] = [];
}
$allAttrs[$selector][] = $attr['attribute'];
}
}
}
}
}
// get actual css from block wrapper
if (!empty($manifest['style']['block']))
{
$selector = '#wrapper';
$wrapperStyle = NodeStyle::getStyle($this, $selector);
if ($wrapperStyle)
{
$styles[$selector] = $wrapperStyle;
}
}
// attrs
if (
isset($manifest['style']['block']['additional']['attrs']) &&
is_array($manifest['style']['block']['additional']['attrs'])
)
{
$selector = '#wrapper';
foreach ($manifest['style']['block']['additional']['attrs'] as $attr)
{
if (isset($attr['attribute']))
{
if (!isset($allAttrs[$selector]))
{
$allAttrs[$selector] = [];
}
$allAttrs[$selector][] = $attr['attribute'];
}
}
}
// get actual attrs from nodes
if (isset($manifest['attrs']))
{
foreach ($manifest['attrs'] as $selector => $item)
{
if (isset($item['attribute']))
{
if (!isset($allAttrs[$selector]))
{
$allAttrs[$selector] = [];
}
$allAttrs[$selector][] = $item['attribute'];
}
else if (is_array($item))
{
foreach ($item as $itemAttr)
{
if (isset($itemAttr['attribute']))
{
if (!isset($allAttrs[$selector]))
{
$allAttrs[$selector] = [];
}
$allAttrs[$selector][] = $itemAttr['attribute'];
}
}
}
}
}
// remove some system attrs
if (
$params['clear_form'] &&
isset($allAttrs['.bitrix24forms'])
)
{
unset($allAttrs['.bitrix24forms']);
}
// collect attrs
$allAttrsNew = [];
if (isset($allAttrs['#wrapper']))
{
$allAttrsNew['#wrapper'] = [];
$nodesArray = $doc->getChildNodesArray();
$resultList = [array_pop($nodesArray)];
foreach ($resultList as $pos => $result)
{
foreach ($allAttrs['#wrapper'] as $attrKey)
{
if (!isset($allAttrsNew['#wrapper'][$pos]))
{
$allAttrsNew['#wrapper'][$pos] = [];
}
$allAttrsNew['#wrapper'][$pos][$attrKey] = $result->getAttribute($attrKey);
}
}
unset($allAttrs['#wrapper']);
}
foreach ($allAttrs as $selector => $attr)
{
$resultList = $doc->querySelectorAll($selector);
foreach ($resultList as $pos => $result)
{
if (!isset($allAttrsNew[$selector]))
{
$allAttrsNew[$selector] = [];
}
if (!isset($allAttrsNew[$selector][$pos]))
{
$allAttrsNew[$selector][$pos] = [];
}
foreach ($attr as $attrKey)
{
$allAttrsNew[$selector][$pos][$attrKey] = $result->getAttribute($attrKey);
}
unset($attrVal);
}
}
$allAttrs = $allAttrsNew;
unset($allAttrsNew);
return [
'cards' => $cards,
'nodes' => $nodes,
'menu' => $menu,
'style' => $styles,
'attrs' => $allAttrs,
'dynamic' => $this->dynamicParams
];
}