Не нравятся результаты поиска? Попробуйте другой поиск!

Вывод архивов из определенной категории


     26.12.2012    Хаки    2839

вопрос
Как в модуле календарь выводить только нужные мне категории новостей?
код:


# Выводим архивы
if( $config['allow_archives'] == "yes" ) {
    
    $tpl->result['archive'] = dle_cache( "archives", $config['skin'] );
    
    if( ! $tpl->result['archive'] ) {
        
        $f2 = array ('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12' );
        $f3 = array ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' );
        
        if( intval( $config['no_date'] ) ) {
            $thisdate = date( "Y-m-d H:i:s", $_TIME );
            $where_date = " AND date < '" . $thisdate . "'";
        } else
            $where_date = "";
        
        $db->query( "SELECT DATE_FORMAT(date,'%b %Y') AS m_date, COUNT(id) AS cnt FROM " . PREFIX . "_post WHERE approve" . $where_date . " GROUP BY m_date ORDER BY date desc" );
        
        $news_archive = array ();
        
        while ( $row = $db->get_row() ) {
            
            $arch_title['ru'] = str_replace( $f3, $r, $row['m_date'] );
            $arch_title['en'] = str_replace( $f3, $f2, $row['m_date'] );
            $arch_url = explode( " ", $arch_title['en'] );
            $arch_title['en'] = $arch_url[1] . "/" . $arch_url[0];
                        
            if( $config['allow_alt_url'] == "yes" ) $news_archive[] = '<a class="archives" href="' . $config['http_home_url'] . $arch_title['en'] . '/"><b>' . $arch_title['ru'] . ' (' . $row['cnt'] . ')</b></a>';
            else $news_archive[] = "<a class=\"archives\" href=\"$PHP_SELF?year=$arch_url[1]&amp;month=$arch_url[0]\"><b>" . $arch_title['ru'] . " (" . $row['cnt'] . ")</b></a>";
        
        }
        
        $db->free();
        
        $i = count( $news_archive );
        
        if( $i > 6 ) {
            $news_archive[6] = "<div id=\"dle_news_archive\" style=\"display:none;\">" . $news_archive[6];
            $news_archive[] = "</div><div id=\"dle_news_archive_link\" ><br /><a class=\"archives\" onclick=\"$('#dle_news_archive').toggle('blind',{},700); return false;\" href=\"#\">" . $lang['show_archive'] . "</a></div>";
        }
        
        if( $i ) $tpl->result['archive'] = implode( "<br />", $news_archive );
        else $tpl->result['archive'] = "";
        
        create_cache( "archives", $tpl->result['archive'], $config['skin'] );
    }

}

Ответил: nowheremany


        $db->query( "SELECT DATE_FORMAT(date,'%b %Y') AS m_date, COUNT(id) AS cnt FROM " . PREFIX . "_post WHERE approve" . $where_date . " GROUP BY m_date ORDER BY date desc" );

заменить на
        $db->query( "SELECT DATE_FORMAT(date,'%b %Y') AS m_date, COUNT(id) AS cnt FROM " . PREFIX . "_post WHERE approve and category regexp '[[:<:]](1|2|3)[[:>:]]'" . $where_date . " GROUP BY m_date ORDER BY date desc" );
Отредактировал 27-12-2012, 20:26 - Sander
Причина: Подправил ответ

Комментарии пользователей (10)

Ayk
1

154 | 94

Ayk - 27 декабря 2012 14:53 - Юзер

Не помогло(

Ayk
1

154 | 94

Ayk - 27 декабря 2012 16:18 - Юзер

Решил вопрос, просто нужно еще в engine дописать!)

Ayk
1

154 | 94

Ayk - 27 декабря 2012 18:49 - Юзер

Нет ничего не помоголо, поспешил с выводом(

BR0kEN
163

235 | 275

BR0kEN - 27 декабря 2012 20:42 - Эксперт

Вы сами не понимаете что просите. В заголовке вам нужны архивы из некоторых категорий, а в вопросе - из календаря. Календарь вообще новости не выводит, а формирует ссылки на страницу вида: example.com/2012/12/31

Чтобы по такому адресу были доступны новости из нужной категории необходимо:
1. Открыть engine.php, найти запрос:
$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 {$stop_list}date >= '{$year}-{$month}-{$day}' AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
и заменить его на:
$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 {$stop_list}date >= '{$year}-{$month}-{$day}' AND p.category IN (1,2,3) AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
Где 1,2,3 - категории из которых "возьмутся" публикации.

Если же проще указать категории из которых новости выводить не нужно, то в запросе, на который был изменен изначальный, необходимо отыскать кусок:
p.category IN (1,2,3)
и заменить его на:
p.category NOT IN (1,2,3)
В данном случае, 1,2,3 - категории, новости из которых будут игнорироваться.

Ayk
1

154 | 94

Ayk - 27 декабря 2012 21:27 - Юзер

Странно не могу найти код, это под каким комментом выводится. и на какой версии? У меня 9.2

Ayk
1

154 | 94

Ayk - 27 декабря 2012 21:35 - Юзер

Там 3 одинаковых запроса и все они без p.

// ################ Новости за год #################
            if ($year != '' and $month == '' and $day == '') {
                if ($cstart) {
                    
                    $cstart = $cstart - 1;
                    $cstart = $cstart * $config['news_number'];
                }

                $newsmodule = true;
                
                $url_page = $config['http_home_url'] . $year;
                $user_query = "year=" . $year;
                
                if (isset ( $_SESSION['dle_sort_date'] )) $news_sort_by = $_SESSION['dle_sort_date'];
                if (isset ( $_SESSION['dle_direction_date'] )) $news_direction_by = $_SESSION['dle_direction_date'];
                
                $sql_select = "SELECT id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags FROM " . PREFIX . "_post where {$stop_list}date >= '{$year}-01-01' AND category IN (49,61,68) AND date < '{$year}-01-01' + INTERVAL 1 YEAR AND approve" . $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 {$stop_list}date >= '{$year}-01-01' AND category IN (49,61,68) AND date < '{$year}-01-01' + INTERVAL 1 YEAR AND approve" . $where_date;
            }
            
            

BR0kEN
163

235 | 275

BR0kEN - 27 декабря 2012 22:46 - Эксперт

Для DLE 9.2. Открыть engine.php и найти:
$sql_select = "SELECT id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags FROM " . PREFIX . "_post where {$stop_list}date >= '{$year}-{$month}-{$day}' AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR AND approve" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
и заменить на:
$sql_select = "SELECT id, autor, date, short_story, SUBSTRING(full_story, 1, 15) as full_story, xfields, title, category, alt_name, comm_num, allow_comm, allow_rate, rating, vote_num, news_read, votes, flag, editdate, editor, reason, view_edit, tags FROM " . PREFIX . "_post where {$stop_list}date >= '{$year}-{$month}-{$day}' AND category IN (1,2,3) AND date < '{$year}-{$month}-{$day}' + INTERVAL 24 HOUR AND approve" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
Где 1,2,3 - категории из которых "возьмутся" публикации.

Если же проще указать категории из которых новости выводить не нужно, то в запросе, на который был изменен изначальный, необходимо отыскать кусок:
category IN (1,2,3)
и заменить его на:
category NOT IN (1,2,3)
В данном случае, 1,2,3 - категории, новости из которых будут игнорироваться.

Ayk
1

154 | 94

Ayk - 27 декабря 2012 22:58 - Юзер

Не помогло( не может найти не одной публикации((

BR0kEN
163

235 | 275

BR0kEN - 27 декабря 2012 23:11 - Эксперт

Значит что-то делаете не так.

з.ы. Не можете справиться самостоятельно, платите деньги - сделают.

Ayk
1

154 | 94

Ayk - 27 декабря 2012 23:16 - Юзер

странно, несколько раз пробую, и ничего. Давайте я вам заплачу, скину вам файл. Посмотрите как я прописал. Скажите вашу цену.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

 10.10.2012 lexa21reg  Хаки