/** * Prepare list childs templates-based * * @param array $list List * * @return array */ protected function prepareListChildTemplates(array $list) { \XLite::getInstance()->initModules(); $skins = array(); $hasSubstSkins = false; foreach (\XLite\Core\Layout::getInstance()->getSkinsAll() as $interface => $path) { $skins[$interface] = \XLite\Core\Layout::getInstance()->getSkins($interface); if (!$hasSubstSkins) { $hasSubstSkins = 1 < count($skins[$interface]); } } if ($hasSubstSkins) { $patterns = $hash = array(); foreach ($skins as $interface => $data) { $patterns[$interface] = array(); foreach ($data as $skin) { $patterns[$interface][] = preg_quote($skin, '/'); } $patterns[$interface] = '/^(' . implode('|', $patterns[$interface]) . ')' . preg_quote(LC_DS, '/') . '/US'; } foreach ($list as $index => $item) { $path = \Includes\Utils\FileManager::getRelativePath($item['path'], LC_DIR_SKINS); if (preg_match($patterns[$item['zone']], $path, $matches)) { $hash[$item['zone']][$matches[1]][$item['tpl']][] = $index; } } foreach ($hash as $interface => &$data) { $data[static::PREPARED_SKIN_NAME] = array(); foreach (array_reverse($skins[$interface]) as $skin) { if (!empty($data[$skin])) { foreach ($data[$skin] as $tpl => $indexes) { $data[static::PREPARED_SKIN_NAME][$tpl] = $indexes; } } } } $index = \Includes\Utils\ArrayManager::getArraysArrayFieldValues($hash, static::PREPARED_SKIN_NAME); unset($hash); $ids = array(); foreach ($index as $interface => $tpls) { foreach ($tpls as $tpl => $indexes) { $ids = array_merge($ids, $indexes); } } unset($index); $list = \Includes\Utils\ArrayManager::filterByKeys($list, $ids); } return $list; }