Разделение категорий на вывод друг от друга в новостях

Разделение категорий на вывод друг от друга в новостях

Хак позволит выводить отдельно друг от друга категории, заменяя громоздкие конструкции [catlist].


Установка:
1. Открыть engine/modules/functions.php и найти:
function get_url($id) {

Добавить выше:
function checkCatFunction($data, $cat_list) {
	$cat_list = array_flip($cat_list);
    $flag_checkCatFunction = false;
    if(substr_count($data[1],",")) {
        $cat_array = array();
        $cat_array = explode(",", $data[1]);
		
		if($data[2] == "yes") {
			$sub_cats = array();
			foreach($cat_array as $value) {
				$sub_cats[] = get_sub_cats($value);
			}
			$sub_cats = implode("|", $sub_cats);
			$sub_cats_array = explode("|", $sub_cats);
			$cat_array = array_unique($sub_cats_array);
		}
		
        foreach($cat_array as $value) {
            if(isset($cat_list[$value])) {
                $flag_checkCatFunction = true;
				break;
			}
        }
    }
    else {
		if($data[2] == "no") {
			if(isset($cat_list[$data[1]])) {
				$flag_checkCatFunction = true;
			}
		}
		elseif($data[2] == "yes") {
			$sub_cats = get_sub_cats($data[1]);
			$sub_cats_array = explode("|", $sub_cats);
			foreach($sub_cats_array as $sub_cat) {
				if(isset($cat_list[$sub_cat])) {
					$flag_checkCatFunction = true;
					break;
				}
			}
		}
    }
    return ($flag_checkCatFunction == true) ? $data[3] : "";
}

function catFunction($data, $cat_list, $config, $cat_info) {
	$cat_list = array_flip($cat_list);
	
    if(substr_count($data[1], ",")) {
		$get_cat = array();
        $cat_array = array();
        $cat_array = explode(",", $data[1]);
		
		if($data[2] == "yes") {
			$sub_cats = array();
			foreach($cat_array as $value) {
				$sub_cats[] = get_sub_cats($value);
			}
			$sub_cats = implode("|", $sub_cats);
			$sub_cats_array = explode("|", $sub_cats);
			$cat_array = array_unique($sub_cats_array);
		}
		
        foreach($cat_array as $value) {
            if(isset($cat_list[$value])) {
				if( $config['allow_alt_url'] ) {
                    $get_cat[] = "<a href=\"" . $config['http_home_url'] . get_url( $value ) . "/\">{$cat_info[$value]['name']}</a>";
				}
                else {
                    $get_cat[] = "<a href=\"/index.php?do=cat&category={$cat_info[$value]['alt_name']}\">{$cat_info[$value]['name']}</a>";
				}
            }
        }
		
		$get_cat = implode($config['category_separator'] . ' ', $get_cat);
    }
    else {
		if($data[2] == "no") {
			if(isset($cat_list[$data[1]])) {
				$get_cat = get_categories($data[1]);
			}
		}
		elseif($data[2] == "yes") {
			$sub_cats = get_sub_cats($data[1]);
			$sub_cats_array = explode("|", $sub_cats);
			foreach($sub_cats_array as $sub_cat) {
				if(isset($cat_list[$sub_cat])) {
					$get_cat = get_categories($sub_cat);
				}
			}
		}
    }
    return $get_cat;
}

2. Открыть engine/modules/show.short.php, show.full.php, show.custom.php и найти первое вхождение:
$tpl->compile( 'content' );

Добавить выше:
if (strpos ( $tpl->copy_template, "[cat:" ) !== false) {
	$tpl->copy_template = preg_replace_callback( "#\[cat\:(.+?)\s(no|yes)\](.+?)\[/cat\]#is", function($data) use ($cat_list) {
		return checkCatFunction($data, $cat_list);
	}, $tpl->copy_template );
}
if (strpos ( $tpl->copy_template, "{cat:" ) !== false) {
	$tpl->copy_template = preg_replace_callback( "#{cat\:(.+?)\s(no|yes)}#is", function($data) use ($cat_list, $config, $cat_info) {
		return catFunction($data, $cat_list, $config, $cat_info);
	}, $tpl->copy_template );
}

Готово!

Теперь в шаблонах краткой и полной новостях, поиска и шаблонах custom доступны теги:
{cat:1 yes} или {cat:1,3 yes} - выведет ссылки на главную(ые) категорию(и) и ее подкатегории.
{cat:1 no} или {cat:1,2,3 no} - выведет ссылку на эти категории которые указаны.
[cat:1 yes] текст [/cat] или [cat:1,3 yes] текст [/cat] - выведет текст внутри тегов если категория или ее подкатегория выбрана для новости.
[cat:1 no] текст [/cat] или [cat:1,2,3 no] текст [/cat] - выведет текст внутри тегов если категория выбрана для новости.
 
Версия DLE: 11.х
Автор: PunPun
Источник
Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.