Помощь topnews из определённой категории (немного изменить код модуля)

Тема в разделе "DLE", создана пользователем Damasc, 27 окт 2010.

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

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

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

    Damasc

    Регистр.:
    5 мар 2009
    Сообщения:
    173
    Симпатии:
    6
    Доброго дня уважаемые форумчане!

    Нашёл модуль, который идеально подойдёт под мои запросы:

    _http://my-dle.ru/1088-topnews-s-shablonom.html

    Он выводит новости из topnews с использованием шаблона.

    Помогите немного доработать этот модуль. Требуется вывод из определённых категорий (например категория 5,7,15), а не из всех как у него по умолчанию.

    Код модуля:

    PHP:
    <?php
    /*
    =====================================================
     DataLife Engine - by SoftNews Media Group
     Mod by Олег Одоевский a.k.a Sander
     ICQ: 404-037-556
     http://nfhelp.ru/
    -----------------------------------------------------
     http://dle-news.ru/
    -----------------------------------------------------
     Copyright (c) 2004,2010 SoftNews Media Group
    =====================================================
     Данный код защищен авторскими правами
    =====================================================
     Файл: topnews.php
    -----------------------------------------------------
     Назначение: вывод рейтинговых статей (улучшенная сортировка)
    =====================================================
    */
    if(!defined('DATALIFEENGINE')) die("Hacking attempt!");

    ################################# Настройки ############################################
    $cut_titile=    0;            // На сколько символов обрезать заголовок. Поставить ноль, чтобы заголовок не обрезало
    $last_days=    1;            // Выбирать новости не старше * дней
    $count_news=    4;            // Сколько новостей выводить в блоке.

    ############################## Дальше не трогать! #######################################
    $topnews=dle_cache("topnews",$config['skin']);
    if(!
    $topnews){$this_month=date('Y-m-d H:i:s',$_TIME);
    $last_days=intval($last_days);$last_days=($last_days)?$last_days:31;
    $count_news=intval($count_news);$count_news=($count_news)?$count_news:10;
    $db->query"SELECT id, title, date, alt_name, category, flag, autor, news_read, comm_num, short_story FROM " PREFIX "_post WHERE approve AND date>='$this_month' - INTERVAL ".$last_days." DAY AND date<'$this_month' ORDER BY (rating+1)*news_read DESC, comm_num DESC, date DESC LIMIT 0,".$count_news );
    while(
    $row=$db->get_row()){
    $row['date']=strtotime($row['date']);$row['category']=intval($row['category']);
    if(
    $config['allow_alt_url']=="yes"){
    if(
    $row['flag'] and $config['seo_type']){
    if(
    $row['category'] and $config['seo_type']== 2$full_link=$config['http_home_url'].get_url($row['category'])."/".$row['id']."-".$row['alt_name'].".html";
    else 
    $full_link=$config['http_home_url'].$row['id']."-".$row['alt_name'].".html";
    }else 
    $full_link=$config['http_home_url'].date('Y/m/d/',$row['date']).$row['alt_name'].".html";
    }else 
    $full_link=$config['http_home_url']."index.php?newsid=".$row['id'];
    if(
    date(Ymd,$row['date'])==date(Ymd,$_TIME)) $date=$lang['time_heute'].langdate(", H:i",$row['date']);
    elseif(
    date(Ymd,$row['date'])==date(Ymd,($_TIME-86400))) $date=$lang['time_gestern'].langdate(",H:i",$row['date']);
    else 
    $date=langdate($config['timestamp_active'],$row['date']); $cut_titile=intval($cut_titile);
    if(
    $cut_titile AND strlen($row['title'])>$cut_titile$title=stripslashes(substr($row['title'],0,$cut_titile)." ...");
    else 
    $title=stripslashes($row['title']);
    $go_page=($config['ajax'])?"onclick=\"DlePage('newsid=".$row['id']."');return false;\"":"";
    if(
    $config['allow_comments_wysiwyg']=="yes"$go_page='';

    $tpl->load_template('topnews.tpl');$tpl->set('{title}',$title);
    $tpl->set('{author}',$row[autor]);
    $tpl->set('{short-story}',$row[short_story]);
    $tpl->set('{date}',$date);$tpl->set('{views}',intval($row['news_read']));
    $tpl->set('{comments-num}',intval($row['comm_num']));
    $tpl->set('[full-link]',"<a ".$go_page." href=\"" $full_link "\" title=\"".$title."\">");$tpl->set('[/full-link]',"</a>");
    $tpl->compile('topnews');}$topnews $tpl->result['topnews'];
    $db->free();$tpl->clear();create_cache"topnews"$topnews$config['skin'] );}
    ?>
    Я его немного поправил, теперь он выводит и текст из новости.

    автор скрипта ответил вот как:

    Sander (14:37:49 27/10/2010)
    используя значение переменной $categroy_id
    и regexp в mysql запросе



    помогите, очень нужно!
     
  2. Silver_Web

    Silver_Web Постоялец

    Регистр.:
    2 дек 2008
    Сообщения:
    50
    Симпатии:
    50
    Поставьте S-blocks и не мучайтесь...
     
  3. Damasc

    Damasc

    Регистр.:
    5 мар 2009
    Сообщения:
    173
    Симпатии:
    6
    Функционал данного модуля меня вполне устраивает, S-blocks уж очень замудрёный.
     
  4. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.253
    Симпатии:
    835
    пробуй в файле мода поправить строчку например так:
    PHP:
        $db->query"SELECT id, title, date, alt_name, category, short_story, flag FROM " PREFIX "_post WHERE approve='1' AND category='18' OR category='18,16,17' OR category='18,16' OR category='18,17' AND date >= '$this_month' - INTERVAL 1 MONTH AND date < '$this_month' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,21" );
    точнее к запросам БД добавить выборку по каким именно категориям выводить новости, в данном случае (что я привел) - это category='18' OR category='18,16,17' (последнее - при использовании мультикатегорий...)
    PS изменял так в стандартном модуле топ новостей, работало нормально :)
     
    Damasc нравится это.
  5. Damasc

    Damasc

    Регистр.:
    5 мар 2009
    Сообщения:
    173
    Симпатии:
    6
    супер, работает! А возможно сделать этому блоку кеширование?
     
  6. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.253
    Симпатии:
    835
    в пхп я не силен, но думаю по нижней строчки
    PHP:
    $db->free();$tpl->clear();create_cache"topnews"$topnews$config['skin'] );}
    должно идти кэширование содержимого этого блока.
     
    Damasc нравится это.
  7. Damasc

    Damasc

    Регистр.:
    5 мар 2009
    Сообщения:
    173
    Симпатии:
    6
    Должно, но не кешируется, ладно попробую разобраться сам, спасибо огромное!
     
  8. killoff

    killoff CD тихо, и не DVD меня ;)

    Moderator
    Регистр.:
    13 май 2008
    Сообщения:
    2.253
    Симпатии:
    835
    попробуй внизу удалить $tpl->clear();
    В стандартом топе новостей внизу прописано:
    PHP:
        $db->free();
        
    create_cache"topnews"$topnews$config['skin'] );
    т.е. без $tpl->clear();
    может быть из-за этого и не кэшируется...?
     
    Damasc нравится это.
Статус темы:
Закрыта.