Модуль Свой архив для каждой рубрики

Тема в разделе "DLE", создана пользователем saifym, 5 авг 2014.

Информация :
Актуальная версия DataLife Engine 12.0
( Final Release v.12.0 | Скачать DataLife Engine | Скачать 12.0 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 11.3 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Модераторы: killoff
  1. saifym

    saifym Создатель

    Регистр.:
    14 авг 2013
    Сообщения:
    27
    Симпатии:
    18
    Добрый день! Потребовалось на одном сайте реализовать вывод своего архива для каждой рубрики (поделить архив на категории).

    Протестировано: на DLE 10.1 - 10.2
    Автор: saifym
    Демо версия: http://softformat.net/ (зайдите в какую нибудь рубрику, в правой колонке будет архив)

    Архив для рубрик имеет ЧПУ: /news/2014/08/, где news - рубрика

    Установка:
    1. Скачайте файл catarchives.php, и положите его в папку /engine/modules/
    2. Откройте файл engine/engine.php
    ------------------------
    Найдите:

    Код:
    // ################ Новости за месяц #################
    if ($year != '' and $month != '' and $day == '') {
    И замените на:

    Код:
    // ################ Новости за месяц #################
    if ($year != '' and $month != '' and $day == '' and !$cat_archives) {
    ------------------------
    Перед:

    Код:
    // ################ Новости за месяц #################
    Добавьте:

    Код:
    $cat_archives = @$db->safesql ( strip_tags ( $_GET['catarchive'] ) );
               
                if ($year != '' and $month != '' and $day == '' and $cat_archives) {
                   
                    if ($cstart) {
                        $cstart = $cstart - 1;
                        $cstart = $cstart * $config['news_number'];
                    }
                    if (intval($month) < 1 OR intval($month) > 12) {
                        header("HTTP/1.0 301 Moved Permanently");
                        header("Location: ".str_replace("index.php","",$_SERVER['PHP_SELF'])."{$year}/01/");
                        die("Redirect");
                    }
                   
                    $url_page = $config['http_home_url'] . $cat_info[$category_id]['alt_name'] . "/" . $year . "/" . $month;
                    $user_query = "catarchive=true&amp;category=" . $category_id . "year=" . $year . "&amp;month=" . $month;
                   
                    $where_category = "category regexp '[[:<:]](" . $category_id . ")[[:>:]]' AND";
                   
                    $sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$where_category} {$stop_list}date >= '{$year}-{$month}-01'AND date < '{$year}-{$month}-01' + INTERVAL 1 MONTH AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
                    $sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post where {$where_category} {$stop_list}date >= '{$year}-{$month}-01'AND date < '{$year}-{$month}-01' + INTERVAL 1 MONTH AND approve=1" . $where_date;
               
                }

    3. И последний шаг, если у вас включен ЧПУ, в файле .htaccess

    После:

    Код:
    RewriteEngine On
    Добавить:

    Код:
    RewriteRule ^([^.]+)/([0-9]{4})/([0-9]{2})(/?)+$ index.php?catarchive=true&category=$1&year=$2&month=$3&cstart=1 [L]
    RewriteRule ^([^.]+)/([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$ index.php?catarchive=true&category=$1&year=$2&month=$3&cstart=$4 [L]
    
    ========================

    Использование

    {include file="engine/modules/catarchives.php"} -> будет автоматически выводить архив просматриваемой рубрики

    Если необходимо вывести архив определенной рубрики, то необходимо подключить модуль так:

    {include file="engine/modules/catarchives.php?category=ID"}, где ID - ID необходимой рубрики
     

    Вложения:

    mishiko и Горбушка нравится это.