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

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

Думаю многим будет интересно сделать отображение статических страниц на странице категории в DLE. На примере ниже, попробуем вывести статические страницы в вкладках/табах. После установка модуля, в Админ-панели > раздел Категории, у нас появиться дополнительное поле с выбором статических страниц. В итоге, в категориях будут отображаться такие вкладки/табы с заголовком и содержимым статических страниц, которые укажите в админке. Работать это будет только при редактировании категорий.




Установка:
1. Выполнить SQL запрос в базу данных:
ALTER TABLE `dle_category` ADD `cat_tabs` VARCHAR(255) NOT NULL DEFAULT '' AFTER `allow_rss`;

2. Создать engine/inc/cat_statistics.php с содержимым:

3. Открыть engine/inc/category.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}'" );

Найти далее:
<div class="form-group">
          <label class="control-label col-md-2 col-sm-3">{$lang['cat_addicon']}</label>

Добавить выше, с самого начала строки:
HTML;
include ENGINE_DIR . "/inc/cat_statistics.php";
echo <<<HTML

4. Открыть engine/engine.php и найти:
// ################ Вывод отдельной категории #################
        if ($do == "cat" and $category != '' and $subaction == '') {

Добавить ниже:
#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. В любой JS шаблона добавить Jquery код:
$('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');
});

6. В шаблон добавить стили:
.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;
}

7. В нужное место main.tpl добавить:
{tabs-static}

Готово!
 
Версия DLE: 12.х
Автор: Kylaksizov
Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.