Думаю многим пригодится, как сделать отображение статических страниц в DLE на странице категории.
Мы будем отображать статические страницы в табах (вкладках). Если кто-то захочет переделать, все в Ваших руках!
В админ-панели, в разделе категории, у нас будет дополнительное поле с выбором статических страниц. Работать будет только при редактировании категорий.
Результат:
Поэтому:
Инструкция:

Мы будем отображать статические страницы в табах (вкладках). Если кто-то захочет переделать, все в Ваших руках!
В админ-панели, в разделе категории, у нас будет дополнительное поле с выбором статических страниц. Работать будет только при редактировании категорий.

Результат:

Поэтому:
Примечание: мы будем затрагивать системный код DLE, поэтому при обновлении версии DLE, Вам нужно будет снова внести некоторые правки.
- Выполните SQL запрос в базу данных:
PHP:ALTER TABLE `dle_category` ADD `cat_tabs` VARCHAR(255) NOT NULL DEFAULT '' AFTER `allow_rss`;
- Создайте файл cat_statistics.php в папке engine/inc с таким содержимым:
PHP:<?php if(!defined('DATALIFEENGINE') OR !defined('LOGGED_IN'))die( "Hacking attempt!" ); $stat = $db->query( "SELECT id, name, descr FROM " . PREFIX . "_static WHERE id != 1 ORDER BY ID" ); $opt = array(); while ( $static = $db->get_row( $stat ) ) { array_push($opt, array( "id" => $static["id"], "name" => $static["name"], "descr" => $static["descr"] )); } if(!empty($row["cat_tabs"])){ $cat_tabs = explode(",", $row["cat_tabs"]); $select_tabs = ""; foreach ($cat_tabs as $cat_tab) { if(!empty($cat_tab) && array_search($cat_tab, array_column($opt, 'id')) !== false){ $options = '<option value=""></option>'; foreach ($opt as $item) { if($item["id"] == $cat_tab) $options .= '<option value="'.$item["id"].'" selected>'.$item["descr"].'</option>'; else $options .= '<option value="'.$item["id"].'">'.$item["descr"].'</option>'; } $select_tabs .= "\r\n".'<div class="tab_static"> <select class="ad_cat_static" name="statics[]">'.$options.'</select> <a href="#" class="add_cat_statics fa fa-plus text-success"></a> <a href="#" class="delete_cat_statics fa fa-trash-o text-danger"></a> </div>'; } } } else{ $options = '<option value=""></option>'; foreach($opt as $item) { $options .= '<option value="'.$item["id"].'">'.$item["descr"].'</option>'; } $select_tabs = '<div class="tab_static"> <select class="ad_cat_static" name="statics[]">'.$options.'</select> <a href="#" class="add_cat_statics fa fa-plus text-success"></a> <a href="#" class="delete_cat_statics fa fa-trash-o text-danger"></a> </div>'; } echo ' <div class="form-group"> <label class="control-label col-md-2 col-sm-3"><a href="'.$config["http_home_url"].'/'.$config["admin_path"].'?mod=static">Выберите страницы</a>, которые будут отображаться в этой категории:</label> <div class="col-md-10 col-sm-9"> '.$select_tabs.' </div> </div>'; ?> <style> .tab_static select{ border: none; border-bottom: 1px #ccc solid; width: 235px; padding: 5px 0; margin-bottom: 10px; } </style> <script> $(function(){/* $(document).on("change", ".ad_cat_static", function(){ var item = $(this).val(); $(".ad_cat_static").each(function(){ if($(this).val() == item) alert(1); }) })*/ $(document).on("click", ".add_cat_statics", function(){ $(".tab_static:last").after('<div class="tab_static">'+$(".tab_static:first").html()+'</div>'); return false; }) $(document).on("click", ".delete_cat_statics", function(){ if($(".tab_static").length != 1){ $(this).parent().remove(); } return false; }) }) </script>
- Откройте файл engine/inc/category.php и найдите строку:
если версия DLE ниже 12.X
PHP:$db->query( "UPDATE " . PREFIX . "_category SET parentid='$parentid', name='$cat_name', alt_name='$alt_cat_name', icon='$cat_icon', skin='$skin_name', descr='$description', keywords='$keywords', news_sort='$news_sort', news_msort='$news_msort', news_number='$news_number', short_tpl='$short_tpl', full_tpl='$full_tpl', metatitle='$meta_title', show_sub='$show_sub', allow_rss='$allow_rss' WHERE id='{$catid}'" );
Код:$statics = implode(",", $_POST["statics"]); #kyl $db->query( "UPDATE " . PREFIX . "_category SET parentid='$parentid', name='$cat_name', alt_name='$alt_cat_name', icon='$cat_icon', skin='$skin_name', descr='$description', keywords='$keywords', news_sort='$news_sort', news_msort='$news_msort', news_number='$news_number', short_tpl='$short_tpl', full_tpl='$full_tpl', metatitle='$meta_title', show_sub='$show_sub', allow_rss='$allow_rss', cat_tabs='{$statics}' WHERE id='{$catid}'" );
PHP:$db->query( "UPDATE " . PREFIX . "_category SET parentid='$parentid', name='$cat_name', alt_name='$alt_cat_name', icon='$cat_icon', skin='$skin_name', descr='$description', keywords='$keywords', news_sort='$news_sort', news_msort='$news_msort', news_number='$news_number', short_tpl='$short_tpl', full_tpl='$full_tpl', metatitle='$meta_title', show_sub='$show_sub', allow_rss='$allow_rss', fulldescr='$fulldescr', disable_search='$disable_search', disable_main='$disable_main', disable_rating='$disable_rating', disable_comments='$disable_comments' WHERE id='{$catid}'" );
Код:$statics = implode(",", $_POST["statics"]); #kyl $db->query( "UPDATE " . PREFIX . "_category SET parentid='$parentid', name='$cat_name', alt_name='$alt_cat_name', icon='$cat_icon', skin='$skin_name', descr='$description', keywords='$keywords', news_sort='$news_sort', news_msort='$news_msort', news_number='$news_number', short_tpl='$short_tpl', full_tpl='$full_tpl', metatitle='$meta_title', show_sub='$show_sub', allow_rss='$allow_rss', fulldescr='$fulldescr', disable_search='$disable_search', disable_main='$disable_main', disable_rating='$disable_rating', disable_comments='$disable_comments', cat_tabs='{$statics}' WHERE id='{$catid}'" );
если версия DLE ниже 12.X
PHP:<div class="form-group"> <label class="control-label col-lg-2">{$lang['cat_addicon']}</label>
PHP:HTML; include ENGINE_DIR . "/inc/cat_statistics.php"; echo <<<HTML
PHP:<div class="form-group"> <label class="control-label col-md-2 col-sm-3">{$lang['cat_addicon']}</label>
PHP:HTML; include ENGINE_DIR . "/inc/cat_statistics.php"; echo <<<HTML
- В файле engine/engine.php найдите строчку:
PHP:// ################ Вывод отдельной категории ################# if ($do == "cat" and $category != '' and $subaction == '') {
PHP:#kyl $cats = $db->query( "SELECT cat_tabs FROM " . PREFIX . "_category WHERE `alt_name` = '{$category}' ORDER BY ID LIMIT 1" ); $cats_ = $db->get_row( $cats ); if(!empty($cats_["cat_tabs"])){ $stats = explode(",", $cats_["cat_tabs"]); $stats_where = ""; foreach ($stats as $stat) { $stats_where .= "id = {$stat} OR "; } $stats_where = substr($stats_where, 0, -4); $stat = $db->query( "SELECT * FROM " . PREFIX . "_static WHERE ".$stats_where." ORDER BY ID" ); $stat_row = array(); while ( $static = $db->get_row( $stat ) ) { array_push($stat_row, array( "descr" => $static["descr"], "template" => str_replace("\\", "", $static["template"]) )); } $tabs = '<div class="tabs"> <ul class="tabs_caption">'; foreach($stat_row as $key => $rows){ if($key == 0) $tabs .= '<li class="active">'.$rows["descr"].'</li>'; else $tabs .= '<li>'.$rows["descr"].'</li>'; } $tabs .= '</ul>'; foreach($stat_row as $key => $rows){ if($key == 0){ $tabs .= '<div class="tabs_content active"> '.$rows["template"].' </div>'; } else{ $tabs .= '<div class="tabs_content"> '.$rows["template"].' </div>'; } } $tabs .= '</div>'; $tabs_static = $tabs; } else $tabs_static = ""; #kyl
если DLE 12.X и выше, после неё вставьте такой код:
PHP:#kyl $cats = $db->query( "SELECT cat_tabs FROM " . PREFIX . "_category WHERE id = {$category_id} ORDER BY ID LIMIT 1" ); $cats_ = $db->get_row( $cats ); if(!empty($cats_["cat_tabs"])){ $stats = explode(",", $cats_["cat_tabs"]); $stats_where = ""; foreach ($stats as $stat) { $stats_where .= "id = {$stat} OR "; } $stats_where = substr($stats_where, 0, -4); $stat = $db->query( "SELECT * FROM " . PREFIX . "_static WHERE ".$stats_where." ORDER BY ID" ); $stat_row = array(); while ( $static = $db->get_row( $stat ) ) { array_push($stat_row, array( "descr" => $static["descr"], "template" => $static["template"] )); } $tabs = '<div class="tabs"> <ul class="tabs__caption">'; foreach($stat_row as $key => $rows){ if($key == 0) $tabs .= '<li class="active">'.$rows["descr"].'</li>'; else $tabs .= '<li>'.$rows["descr"].'</li>'; } $tabs .= '</ul>'; foreach($stat_row as $key => $rows){ if($key == 0){ $tabs .= '<div class="tabs__content active"> '.$rows["template"].' </div>'; } else{ $tabs .= '<div class="tabs__content"> '.$rows["template"].' </div>'; } } $tabs .= '</div>'; $tpl->set('{tabs-static}', $tabs); } else $tpl->set('{tabs-static}', ""); #kyl
- Если у Вас DLE ниже 12.X, откройте файл engine/main.php и найдите строчку:
PHP:$tpl->set ( '{speedbar}', $tpl->result['speedbar'] );
PHP:$tpl->set ( '{tabs-static}', $tabs_static );
- В любой JavaScript файл вашего шаблона добавить Jquery код:
JavaScript:$('ul.tabs__caption').on('click', 'li:not(.active)', function() { $(this).addClass('active').siblings().removeClass('active').closest('div.tabs').find('div.tabs__content').removeClass('active').eq($(this).index()).addClass('active'); });
- В файл стилей вашего шаблона добавить такие стили:
CSS:.tabs__content { display: none; /* по умолчанию прячем все блоки */ } .tabs__caption{ padding: 0; margin: 0; } .tabs__content.active { margin: 0; padding: 20px; border: 1px #ffd400 solid; display: block; /* по умолчанию показываем нужный блок */ } .tabs__caption li.active{ background: #000; color: #ffd400; } .tabs__caption li{ background: #ffd400; display: inline-block; padding: 10px; color: #000; list-style: none; cursor: pointer; }
- В файле main.tpl добавьте в нужное место шорт-код:
Код:{tabs-static}

Последнее редактирование: