Файл: system/controllers/content/widgets/categories/widget.php
Строк: 78
<?php
class widgetContentCategories extends cmsWidget {
public $is_cacheable = false;
public function run() {
$ctype = cmsModel::getCachedResult('current_ctype');
$ctype_name = $this->getOption('ctype_name');
$active_cat = false; $path = [];
if (!$ctype_name) {
if (!$ctype) { return false; }
$ctype_name = $ctype['name'];
}
if ($ctype && $ctype['name'] == $ctype_name) {
if (!$ctype['is_cats']) { return false; }
if (strpos(cmsCore::getInstance()->uri, '.html') === false) {
$current_ctype_category = cmsModel::getCachedResult('current_ctype_category');
if (!empty($current_ctype_category['id'])) {
$active_cat = $current_ctype_category;
}
} else {
$item = cmsModel::getCachedResult('current_ctype_item');
if(!$item){ return false; }
if (!empty($item['category'])) {
$active_cat = $item['category'];
}
}
} else { // проверка, если показ категорий отключен
$model = cmsCore::getModel('content');
$_ctype = $model->getContentTypeByName($ctype_name);
if (!$_ctype['is_cats']) {
return false;
}
}
$model = isset($model) ? $model : cmsCore::getModel('content');
$cats = $model->filterIsNull('is_hidden')->getCategoriesTree($ctype_name, $this->getOption('is_root'));
if (!$cats) { return false; }
if ($active_cat) {
$path = array_filter($cats, function($cat) use($active_cat) {
return ($cat['ns_left'] <= $active_cat['ns_left'] &&
$cat['ns_level'] <= $active_cat['ns_level'] &&
$cat['ns_right'] >= $active_cat['ns_right'] &&
$cat['ns_level'] > 0);
});
}
// считаем вручную кол-во вложенных
// т.к. у нас могут быть скрытые категории
// не используем ($cat['ns_right'] - $cat['ns_left']) - 1
$childs_count = [];
// результирующее дерево
$tree = [];
$show_full_tree = $this->getOption('show_full_tree');
$cover_preset = $this->getOption('cover_preset');
foreach($cats as $cat){
if($cat['parent_id'] > 1){
if(!isset($childs_count[$cat['parent_id']])){
$childs_count[$cat['parent_id']] = 1;
} else {
$childs_count[$cat['parent_id']] += 1;
}
}
$cat['is_active'] = $cat['is_hidden'] = false;
$cat['childs_count'] = 0;
$cat['img_src'] = html_image_src($cat['cover'], $cover_preset, true);
$css_classes = [];
if (!empty($active_cat['id']) && $cat['id'] == $active_cat['id']) {
$css_classes[] = 'active'; // Совместимость cо старыми шаблонами
$cat['is_active'] = true;
}
if (!(isset($path[$cat['id']]) || isset($path[$cat['parent_id']]) || $cat['ns_level'] <= 1) && !$show_full_tree) {
$css_classes[] = 'folder_hidden'; // Совместимость cо старыми шаблонами
$cat['is_hidden'] = true;
}
if($cat['img_src']){
$css_classes[] = 'set_cover_preset';
}
$cat['css_classes'] = $css_classes;
$tree[$cat['id']] = $cat;
}
if($childs_count){
foreach ($childs_count as $id => $count) {
if(isset($tree[$id])){
$tree[$id]['childs_count'] = $count;
if($count){
$tree[$id]['css_classes'][] = 'folder';
}
}
}
}
$ctype_default = cmsConfig::get('ctype_default');
return array(
'ctype_name' => (($ctype_default && in_array($ctype_name, $ctype_default)) ? '' : $ctype_name),
'cats' => $tree,
'active_cat' => $active_cat, // в шаблоне не используется, совместимость
'cover_preset' => $cover_preset,
'path' => (!empty($path) ? $path : array()) // в шаблоне не используется, совместимость
);
}
}