• Если Вы желаете разместить текстовую рекламу или баннер на нашем форуме, пишите в обратная связь

Вывод статических страниц в категории DLE

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

Результат:
Табы в DLE.png

Поэтому:
Примечание: мы будем затрагивать системный код DLE, поэтому при обновлении версии DLE, Вам нужно будет снова внести некоторые правки.
Инструкция:

  1. Выполните SQL запрос в базу данных:
    PHP:
    ALTER TABLE `dle_category` ADD `cat_tabs` VARCHAR(255) NOT NULL DEFAULT '' AFTER `allow_rss`;
  2. Создайте файл 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>
                    &nbsp;&nbsp;<a href="#" class="add_cat_statics fa fa-plus text-success"></a>
                    &nbsp;&nbsp;<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>
            &nbsp;&nbsp;<a href="#" class="add_cat_statics fa fa-plus text-success"></a>
            &nbsp;&nbsp;<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>
  3. Откройте файл 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}'" );
    если 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', 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
    если DLE 12.X и выше

    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
  4. В файле engine/engine.php найдите строчку:

    PHP:
    // ################ Вывод отдельной категории #################
            if ($do == "cat" and $category != '' and $subaction == '') {
    если версия DLE ниже 12.X, после неё вставьте такой код:

    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
  5. Если у Вас DLE ниже 12.X, откройте файл engine/main.php и найдите строчку:

    PHP:
    $tpl->set ( '{speedbar}', $tpl->result['speedbar'] );
    после неё добавьте:
    PHP:
    $tpl->set ( '{tabs-static}', $tabs_static );
  6. В любой 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');
    });
  7. В файл стилей вашего шаблона добавить такие стили:

    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;
    }
  8. В файле main.tpl добавьте в нужное место шорт-код:

    Код:
    {tabs-static}
В итоге у Вас в категориях будут отображаться такие табы с заголовком и содержимым статических страниц, которые Вы укажите в админке.

Табы в DLE.png
 
Последнее редактирование:
Владимир

Комментарии