Показать сообщение отдельно
Старый 16.09.2012, 11:59 Вверх   #1
Грамотный форумчанин
 
Аватар для jakal
jakal вне форума
Доп. информация
По умолчанию Ссылки на предыдущую и следующую новости в полной новости

Всем привет!

Вот нашел на просторах Internet-а, такой хак который в fullstory.tpl добавляет ссылки prev-link и next-link (хак был немного не доработан, но его помогли доработать и усовершенствовать -=MaD_DoG=- и SaD)

Вот сам хак и его описание:

Данный хак позволяет добавлять ссылки на следующую и предыдущую новости в просмотре полной новости для той же категории что и новость. Это дополнительно поможет в перелинковке внутренних страниц.

Возможности:
- Отображает ссылки на следующую и предыдущую новости в той же категории что и просматриваемая новость.
- В случае отсутствия новости, ссылка не отображается.
- Ссылки выводятся относительно даты просматриваемой новости.
- Простая установка (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_link'], $lang['opt_sys_link_pn'], makeDropDown( array ("1" => "Да", "0" => "Нет" ), "save_con[prevnext_allow]", "{$config['prevnext_allow']}" ) );
2. В файле language/Russian/adminpanel.lng
найти:
Код:
'wysiwyg_language' => "ru",
ниже вставить:
Код:
// Ссылки в полной новости на предыдущую и следующую новость
opt_sys_link => "Показывать предыдущую и следующую новость?",
opt_sys_link_pn => "Если 'Да', то в полной новости будет показыватся ссылка на предыдущую и следующую новость, если 'Нет', то ссылки не будут показыватся",
3. В файле engine/modules/show.full.php
найти:
Код:
if( $config['related_news'] ) {
но у меня на 9.6 такая строка была
Код:
if( $config['related_news'] AND $view_template != "print"  AND strpos( $tpl->copy_template, "{related-news}" ) !== false) {
выше вставить:
Нажми для просмотра
Код:
if( $config['prevnext_allow'] == "1" ) {
if( $config['allow_cache'] != "yes" ) {
$config['allow_cache'] = "yes";
$revert_cache = true;
} else
$revert_cache = false;
$prev_link = dle_cache( "prevlink", $row['id'] );
$next_link = dle_cache( "nextlink", $row['id'] );
// Prev Link
if( $prev_link === FALSE ) {
$prevlink = $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 ( $prevlink ) {
$prevlink['date'] = strtotime( $prevlink['date'] );
$prevlink['category'] = intval( $prevlink['category'] );
if( strlen( $prevlink['title'] ) > 75 ) $prevlink['title'] = substr( $prevlink['title'], 0, 75 ) . " ...";
if( $config['allow_alt_url'] == "yes" ) {
if( $prevlink['flag'] and $config['seo_type'] ) {
if( $prevlink['category'] and $config['seo_type'] == 2 ) {
$prev_link = $config['http_home_url'] . get_url( $prevlink['category'] ) . "/" . $prevlink['id'] . "-" . $prevlink['alt_name'] . ".html";
} else {
$prev_link = $config['http_home_url'] . $prevlink['id'] . "-" . $prevlink['alt_name'] . ".html";
}
} else {
$prev_link = $config['http_home_url'] . date( 'Y/m/d/', $prevlink['date'] ) . $prevlink['alt_name'] . ".html";
}
} else {
$prev_link = $config['http_home_url'] . "index.php?newsid=" . $prevlink['id'];
}
} else {
$prev_link = "";
}
if( $prev_link ) {
$prev_link = "<a href=". $prev_link .">" . stripslashes( $prevlink['title'] ) . "</a>";
}
$db->free();
create_cache( "prevlink", $prev_link, $row['id'] );
}
// Next Link
if( $next_link === FALSE ) {
$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 DESC 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 $next_link = $prev_link = '';
// Back and Next Link Template
$tpl->set( '{prev-link}', $prev_link );
$tpl->set( '{next-link}', $next_link );


4. В шаблоне fullstory.tpl в том месте, где надо отображать ссылки
вставить:
Код:
{prev-link} - предыдущая новость
{next-link} - следующая новость
5. В админке в разделе "Настройки системы" -> "Новости" не забудьте поставить "Показывать предыдущую и следующую новость?" - "Да"

6. Если у Вас нету в БД в таблице dle_post такой ячейки flag, то надо сделать такой запрос в Вашу Базу Данных
Код:
ALTER TABLE `dle_post` ADD `flag` VARCHAR (3) NOT NULL
p.s. Если Вы хотите что бы у Вас вместо предыдущей и следующей новости выводилось не название этих новостей, а например картинки (стрелочки, по которым кликаешь и переходишь на след. или предыдущую новость), то нужно найти в файле engine/modules/show.full.php

такую строку:
Код:
$prev_link = "<a href=". $prev_link .">" . stripslashes( $prevlink['title'] ) . "</a>";
и заменить ее на такую:
Код:
$prev_link = "<a  class='myLinkprev' href='". $prev_link ."'>" . stripslashes( $prevlink['title'] ) . "</a>";
далее, найти такую:
Код:
$next_link = "<a href=" . $next_link . ">" . stripslashes( $nextlink['title'] ) . "</a>";
и заменить ее на такую:
Код:
$next_link = "<a  class='myLinknext' href='". $next_link ."'>" . stripslashes( $nextlink['title'] ) . "</a>";
далее в Ваш style.css, добавить в самый низ такое
Код:
.myLinkprev {
        background:url(../images/left_st.png) no-repeat left center;
        DISPLAY: inline-block;
        MARGIN: 0px 6px 6px 0px;
        WIDTH: 142px;
        HEIGHT: 150px;
        outline: none;
        text-indent:-666px;
        overflow:hidden;
}
.myLinknext {
        background:url(../images/right_st.png) no-repeat left center;
        DISPLAY: inline-block;
        MARGIN: 0px 6px 6px 0px;
        WIDTH: 142px;
        HEIGHT: 150px;
        outline: none;
        text-indent:-666px;
        overflow:hidden;
}
.sageata:hover {
BACKGROUND-COLOR: #e5e5e5
}
Вот эти две кнопочки

Ну свои конечно же никто не запрещает нарисовать)

После того как Вы сделали изменения в fullstory.tpl, должно получится примерно так:
Код:
{prev-link}{full-story}{next-link}
что бы более-менее украсить надо сделать следущее:
у меня к примеру тег {full-story} в "моем" шаблоне был заключен в такой блок:
Код:
  <div class="short5">
    <div id="news-id-169" style="display:inline;">
           {full-story} 
    </div>    
  </div>
то есть сейчас создав таблицу, нам нужно будет оставить весь этот блок, в нужной ячейки таблицы, так как этот блок сохраняет стили Вашего {fullstory}, по этому вместо того блока что я показал выше, я сделал такое

Код:
    <TABLE width="100%">

        <TBODY>
        <TR>
        <TD class=sageata width=64> 
		 <SPAN onmouseover=this.style.opacity=1;this.filters.alpha.opacity=100 style="FILTER: alpha(opacity=20); opacity: 0.7" onmouseout=this.style.opacity=0.7;this.filters.alpha.opacity=20>
         {prev-link}
         </SPAN>
		</TD>
		  
        <TD>
            <CENTER>
             <div class="short5">
             <div id="news-id-169" style="display:inline;">
           {full-story} 
             </div>    
             </div>
			</CENTER>
		</TD>
		  
        <TD class=sageata width=64>  
		  <SPAN onmouseover=this.style.opacity=1;this.filters.alpha.opacity=100 style="FILTER: alpha(opacity=20); opacity: 0.7" onmouseout=this.style.opacity=0.7;this.filters.alpha.opacity=20>
          {next-link}
          </SPAN>
		</TD>
		
		</TR>
		</TBODY>
	</TABLE>
В общем, если найдете еще какие то баги, или как то усовершенствуете этот хак, буду благодарен если поделитесь своими доработками!)

Последний раз редактировалось Serberg; 16.09.2012 в 12:19..
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
 
Время генерации страницы 0.07143 секунды с 10 запросами