- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/update/block.php
- Класс: BitrixLandingUpdateBlock
- Вызов: Block::prepareClassesToSet
static function prepareClassesToSet($classes, array $addClasses = [], array $removeClasses = [])
{
if (is_array($classes) && isset($classes['classList']))
{
$classes = $classes['classList'];
}
if (!is_array($classes))
{
$classes = [$classes];
}
$classesUnique = array_unique($classes);
// all nodes have equal classes
if (count($classesUnique) === 1)
{
$result = [
[
'classList' => $classesUnique[0],
'suffix' => '',
],
];
}
// different classes
else
{
$classesSorted = [];
// find most frequent class
$counts = array_count_values($classes);
arsort($counts);
$mainClass = key($counts);
foreach ($classes as $pos => $class)
{
if ($class !== $mainClass)
{
$classesSorted[] = [
'classList' => $class,
'suffix' => '@' . $pos,
];
}
}
$result = array_merge(
[
[
'classList' => $mainClass,
'suffix' => '',
],
],
$classesSorted
);
}
// add and remove classes
foreach ($result as $pos => $class)
{
if ($addClasses || $removeClasses)
{
$classList = explode(' ', $class['classList']);
if ($addClasses)
{
$classList = array_merge($classList, $addClasses);
}
if ($removeClasses)
{
$classList = array_diff($classList, $removeClasses);
}
$result[$pos]['classList'] = implode(' ', array_unique($classList));
}
}
return $result;
}