Хак Хак Ссылки на предыдущую и следующую новости
Данный хак позволяет добавлять ссылки на следующую и предыдущую новости в просмотре полной новости. Тем самым, Вы имеете постоянные ссылки на следующую и предыдущую новости, что для SEO играет важную роль в перелинковке внутренних страниц.
Возможности:
— Отображает ссылки на следующую и предыдущую новости в той же категории что и просматриваемая новость.
— В случае отсутствия новости, ссылка не отображается.
— Ссылки выводятся относительно даты просматриваемой новости.
— Простая установка (1 минута).
— Минимальная правка кода движка.
Отличия от предыдущей версии:
— Исправлен баг с отображением ссылок в случае изменения даты публикации.
— Добавлен кеш — ссылки теперь кешируются. Соответственно снижена нагрузку на базу данных.
— Оптимизирован код.
1. В файле 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( $lang['opt_sys_full'], $lang['opt_sys_full_bn'], makeDropDown( array ("1" => "Да", "0" => "Нет" ), "save_con[backnext_allow]", "{$config['backnext_allow']}" ) );
2. В файле language/Russian/adminpanel.lng
найти:
'wysiwyg_language' => "ru",
ниже вставить:
// Ссылки в полной новости на предыдущую и следующую новость
opt_sys_full => "Показывать предыдущую и следующую новость?",
opt_sys_full_bn => "Если 'Да', то в полной новости будет показыватся ссылка на предыдущую и следующую новость, если 'Нет', то ссылки не будут показыватся",
3. В файле 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 );
4. В шаблоне fullstory.tpl в том месте, где надо отображать ссылки
вставить:
{back-link} - предыдущая новость
{next-link} - следующая новость
5. В админке в разделе "Настройки системы" ? "Новости" не забудьте поставить "Показывать предыдущую и следующую новость?" — "Да«
Посмотреть пример в каждой полной новости: На моем сайте _pampushok.ru
Работает на DLE 8x и на DLE 9.0 тоже.