Хак Ссылки на следующую и предыдущую новости

Тема в разделе "DLE", создана пользователем askarbin, 7 июл 2010.

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

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

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

    askarbin

    Регистр.:
    31 мар 2009
    Сообщения:
    292
    Симпатии:
    36
    Данный хак позволяет добавлять ссылки на следующую и предыдущую новости при просмотре полной новости. Возникла необходимость поставить к себе на сайт такую вещь, но найти ее на форуме не удалось, воспользовался хаком, который:

    ~ Отображает ссылки на следующую и предыдущую новости в той же категории что и просматриваемая новость.
    ~ В случае отсутствия новости, ссылка не отображается.
    ~ Ссылки выводятся относительно даты просматриваемой новости.
    ~ Простая установка (1 минута).
    ~ Минимальная правка кода движка.
    ~ Ссылки кешируются, соответственно снижена нагрузку на базу данных.

    Тестировалось на DLE 8.5 (лично мною), но, по идее, будет работать и в более раних версиях движка.


    1. В файле engine/modules/show.full.php найти:
    PHP:
      if( $config['related_news'] ) {
    2. Выше вставить:
    PHP:
    $backnext_allow "yes";
    if( 
    $backnext_allow == "yes" ) {

    if( 
    $config['allow_cache'] != "yes" ) {
    $config['allow_cache'] = "yes";
    $revert_cache true;
    } else
    $revert_cache false;


    $back_link dle_cache"backlink"$row['id'] );
    $next_link dle_cache"nextlink"$row['id'] );

    if( 
    $back_link === FALSE ) {
    // Back Link
                  
    $backlink $db->super_query"SELECT id, date, title, category, alt_name, flag FROM " PREFIX "_post WHERE date < FROM_UNIXTIME({$row['date']}) AND category = '{$row['category']}' AND approve = '1' ORDER BY date DESC LIMIT 0,1" );
    if( 
    $backlink ) {
    $backlink['date'] = strtotime$backlink['date'] );
    $backlink['category'] = intval$backlink['category'] );
    if( 
    strlen$backlink['title'] ) > 75 $backlink['title'] = substr$backlink['title'], 075 ) . " ...";
    if( 
    $config['allow_alt_url'] == "yes" ) {
    if( 
    $backlink['flag'] and $config['seo_type'] ) {
    if( 
    $backlink['category'] and $config['seo_type'] == ) {
    $back_link $config['http_home_url'] . get_url$backlink['category'] ) . "/" $backlink['id'] . "-" $backlink['alt_name'] . ".html";
    } else {
    $back_link $config['http_home_url'] . $backlink['id'] . "-" $backlink['alt_name'] . ".html";
    }
    } else {
    $back_link $config['http_home_url'] . date'Y/m/d/'$backlink['date'] ) . $backlink['alt_name'] . ".html";
    }
    } else {
    $back_link $config['http_home_url'] . "index.php?newsid=" $backlink['id'];
    }
    } else {
    $back_link "";
    }
    if( 
    $back_link ) {
    $back_link "Предыдущая новость: <a href=\"" $back_link "\">" stripslashes$backlink['title'] ) . "</a>";
    }
    $db->free();
    create_cache"backlink"$back_link$row['id'] );
    }

    if( 
    $next_link === FALSE ) {
    // Next Link
    $nextlink $db->super_query"SELECT id, date, title, category, alt_name, flag FROM " PREFIX "_post WHERE date > FROM_UNIXTIME({$row['date']}) AND category = '{$row['category']}' AND approve = '1' ORDER BY date ASC LIMIT 0,1" );
    if ( 
    $nextlink ) {
    $nextlink['date'] = strtotime$nextlink['date'] );
    $nextlink['category'] = intval$nextlink['category'] );
    if( 
    strlen$nextlink['title'] ) > 75 $nextlink['title'] = substr$nextlink['title'], 075 ) . " ...";
    if( 
    $config['allow_alt_url'] == "yes" ) {
    if( 
    $nextlink['flag'] and $config['seo_type'] ) {
    if( 
    $nextlink['category'] and $config['seo_type'] == ) {
    $next_link $config['http_home_url'] . get_url$nextlink['category'] ) . "/" $nextlink['id'] . "-" $nextlink['alt_name'] . ".html";
    } else {
    $next_link $config['http_home_url'] . $nextlink['id'] . "-" $nextlink['alt_name'] . ".html";
    }
    } else {
    $next_link $config['http_home_url'] . date'Y/m/d/'$nextlink['date'] ) . $nextlink['alt_name'] . ".html";
    }
    } else {
    $next_link $config['http_home_url'] . "index.php?newsid=" $nextlink['id'];
    }
    } else {
    $next_link "";
    }
    if( 
    $next_link ) {
    $next_link "Следующая новость: <a href=\"" $next_link "\">" stripslashes$nextlink['title'] ) . "</a>";
    }
    $db->free();
    create_cache"nextlink"$next_link$row['id'] );
    }

    // Back and Next Link Template
    $tpl->set'{back-link}'$back_link );
    $tpl->set'{next-link}'$next_link );

    if( 
    $revert_cache $config['allow_cache'] = "no";

    }
    3. В шаблоне fullstory.tpl в том месте, где надо отображать ссылки вставить:
     
    нарада нравится это.
  2. saxel

    saxel Постоялец

    Регистр.:
    4 дек 2007
    Сообщения:
    118
    Симпатии:
    23
    или:
    engine/inc/options.php
    найти:
    Код:
    	showRow( $lang['opt_sys_wdq'], $lang['opt_sys_wdsd'], makeDropDown( array ("1" => $lang['opt_sys_yes'], "0" => $lang['opt_sys_no'] ), "save_con[allow_quick_wysiwyg]", "{$config['allow_quick_wysiwyg']}" ) );
    ниже вставить:
    Код:
    	showRow( 'Показывать предыдущую и следующую новость?', 'Показывать предыдущую и следующую новость?', makeDropDown( array ("1" => "Да", "0" => "Нет" ), "save_con[backnext_allow]", "{$config['backnext_allow']}" ) );
    В файле engine/modules/show.full.php найти:
    Код:
      if( $config['related_news'] ) {  
    Выше вставить:
    Код:
    if( $config['backnext_allow'] == "1" ) { 
    if( $config['allow_cache'] != "yes" ) { 
    $config['allow_cache'] = "yes"; 
    $revert_cache = true; 
    } else 
    $revert_cache = false; 
    $back_link = dle_cache( "backlink", $row['id'] ); 
    $next_link = dle_cache( "nextlink", $row['id'] ); 
    if( $back_link === FALSE ) { 
    // Back Link 
                  $backlink = $db->super_query( "SELECT id, date, title, category, alt_name, flag FROM " . PREFIX . "_post WHERE date < FROM_UNIXTIME({$row['date']}) AND category = '{$row['category']}' AND approve = '1' ORDER BY date DESC LIMIT 0,1" ); 
    if( $backlink ) { 
    $backlink['date'] = strtotime( $backlink['date'] ); 
    $backlink['category'] = intval( $backlink['category'] ); 
    if( strlen( $backlink['title'] ) > 75 ) $backlink['title'] = substr( $backlink['title'], 0, 75 ) . " ..."; 
    if( $config['allow_alt_url'] == "yes" ) { 
    if( $backlink['flag'] and $config['seo_type'] ) { 
    if( $backlink['category'] and $config['seo_type'] == 2 ) { 
    $back_link = $config['http_home_url'] . get_url( $backlink['category'] ) . "/" . $backlink['id'] . "-" . $backlink['alt_name'] . ".html"; 
    } else { 
    $back_link = $config['http_home_url'] . $backlink['id'] . "-" . $backlink['alt_name'] . ".html"; 
    } 
    } else { 
    $back_link = $config['http_home_url'] . date( 'Y/m/d/', $backlink['date'] ) . $backlink['alt_name'] . ".html"; 
    } 
    } else { 
    $back_link = $config['http_home_url'] . "index.php?newsid=" . $backlink['id']; 
    } 
    } else { 
    $back_link = ""; 
    } 
    if( $back_link ) { 
    $back_link = "Предыдущая новость: <a href=\"" . $back_link . "\">" . stripslashes( $backlink['title'] ) . "</a>"; 
    } 
    $db->free(); 
    create_cache( "backlink", $back_link, $row['id'] ); 
    } 
    if( $next_link === FALSE ) { 
    // Next Link 
    $nextlink = $db->super_query( "SELECT id, date, title, category, alt_name, flag FROM " . PREFIX . "_post WHERE date > FROM_UNIXTIME({$row['date']}) AND category = '{$row['category']}' AND approve = '1' ORDER BY date ASC LIMIT 0,1" ); 
    if ( $nextlink ) { 
    $nextlink['date'] = strtotime( $nextlink['date'] ); 
    $nextlink['category'] = intval( $nextlink['category'] ); 
    if( strlen( $nextlink['title'] ) > 75 ) $nextlink['title'] = substr( $nextlink['title'], 0, 75 ) . " ..."; 
    if( $config['allow_alt_url'] == "yes" ) { 
    if( $nextlink['flag'] and $config['seo_type'] ) { 
    if( $nextlink['category'] and $config['seo_type'] == 2 ) { 
    $next_link = $config['http_home_url'] . get_url( $nextlink['category'] ) . "/" . $nextlink['id'] . "-" . $nextlink['alt_name'] . ".html"; 
    } else { 
    $next_link = $config['http_home_url'] . $nextlink['id'] . "-" . $nextlink['alt_name'] . ".html"; 
    } 
    } else { 
    $next_link = $config['http_home_url'] . date( 'Y/m/d/', $nextlink['date'] ) . $nextlink['alt_name'] . ".html"; 
    } 
    } else { 
    $next_link = $config['http_home_url'] . "index.php?newsid=" . $nextlink['id']; 
    } 
    } else { 
    $next_link = ""; 
    } 
    if( $next_link ) { 
    $next_link = "Следующая новость: <a href=\"" . $next_link . "\">" . stripslashes( $nextlink['title'] ) . "</a>"; 
    } 
    $db->free(); 
    create_cache( "nextlink", $next_link, $row['id'] ); 
    }
    if( $revert_cache ) $config['allow_cache'] = "no"; 
    } else $back_link = $next_link = '';
    // Back and Next Link Template 
    $tpl->set( '{back-link}', $back_link ); 
    $tpl->set( '{next-link}', $next_link );
    
    В шаблоне fullstory.tpl в том месте, где надо отображать ссылки вставить:
     
    нарада нравится это.
  3. PoMaH

    PoMaH

    Регистр.:
    8 июн 2006
    Сообщения:
    753
    Симпатии:
    142
    Поидее запрос с ИД новости будит быстрее

    date > FROM_UNIXTIME({$row['date']})

    PHP:

    id 
    < {$row['id']}

    и

    id 
    > {$row['id']}

    если нужно категория...
     
  4. Last HeRo

    Last HeRo Создатель

    Регистр.:
    23 дек 2006
    Сообщения:
    35
    Симпатии:
    5
    Поставил данный хак на дле 7.0 .Сайт не обновляю так как там модуль есть самописный, который при обновление не будет работать.Работает если новость в одной категории сайта, а если новость в нескольких категориях выдает mysql ошибку при открытии полной новости.Если редактирую новость и вместо двух категорий ставлю одну - работает, видимо код категорий через запятую не воспринимает допустим катерии 2 и 5 - category = 2,5 из бд.Может кто знает как починить ?