Разделение категорий на вывод друг от друга в новостях
Хак позволит выводить отдельно друг от друга категории, заменяя громоздкие конструкции [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] - выведет текст внутри тегов если категория выбрана для новости.
• Автор: PunPun
• Источник
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.