Постаничный переход.

Автор Drakonsa, 05 сентября 2008, 00:26:11

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Drakonsa

Нужно добавить кнопки вперёд и назад, там где выводяться страницы. Идея состоит в том, что SMF выводит следующую страницу, путём прибавления числа отображаемых сообщений в ссылку, тоесть. Если страница имеет ссылку:
http://www.simplemachines.ru/index.php/topic,3158.15.html
То следующая страница будет
http://www.simplemachines.ru/index.php/topic,3158.15(+ число отображение страниц в топике).html тоесть ссылка будет http://www.simplemachines.ru/index.php/topic,3158.30.html

Так вот, в каком файле лежит скрипт генерирующий ссылки на страницы, чтоб дописать "хрефы" на  вперёд и назад,чтоб было примерно вот так:
ЦитироватьСтраница: [Вперёд]1,2,3...15[Назад]
?

Drakonsa

Нашел скрипт генерирующий вывод страниц в sources/display.php

// Figure out all the link to the next/prev/first/last/etc. for wireless mainly.
$context['links'] = array(
'first' => $_REQUEST['start'] >= $modSettings['defaultMaxMessages'] ? $scripturl . '?topic=' . $topic . '.0' : '',
'prev' => $_REQUEST['start'] >= $modSettings['defaultMaxMessages'] ? $scripturl . '?topic=' . $topic . '.' . ($_REQUEST['start'] - $modSettings['defaultMaxMessages']) : '',
'next' => $_REQUEST['start'] + $modSettings['defaultMaxMessages'] < $topicinfo['numReplies'] + 1 ? $scripturl . '?topic=' . $topic. '.' . ($_REQUEST['start'] + $modSettings['defaultMaxMessages']) : '',
'last' => $_REQUEST['start'] + $modSettings['defaultMaxMessages'] < $topicinfo['numReplies'] + 1 ? $scripturl . '?topic=' . $topic. '.' . (floor($topicinfo['numReplies'] / $modSettings['defaultMaxMessages']) * $modSettings['defaultMaxMessages']) : '',
'up' => $scripturl . '?board=' . $board . '.0'
);

Получаеться, что скрипты на генерацию ссылок след. и пред. страницу уже прописаны изначально в движке SMF...

З.ы. перенесите это в вопрос по движку, это не модификация :)

Drakonsa

#2
Итак, финальная часть моего представления.

Открываем \Themes\default\Display.template.php и исчем там вот такие строки:
// Show the page index... "Pages: [1]".
echo '
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="middletext" valign="bottom" style="padding-bottom: 4px;">', $txt[139], ': ', $context['page_index'], !empty($modSettings['topbottomEnable']) ? $context['menu_separator'] . ' &nbsp;&nbsp;<a href="#lastPost"><b>' . $txt['topbottom5'] . '</b></a>' : '', '</td>
<td align="right" style="padding-right: 1ex;">
<div class="nav" style="margin-bottom: 2px;"> ', $context['previous_next'], '</div>
<table cellpadding="0" cellspacing="0">
<tr>
', template_button_strip($normal_buttons, 'bottom'), '
</tr>
</table>
</td>
</tr>
</table>';

и
echo '
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="middletext">', $txt[139], ': ', $context['page_index'], !empty($modSettings['topbottomEnable']) ? $context['menu_separator'] . ' &nbsp;&nbsp;<a href="#top"><b>' . $txt['topbottom4'] . '</b></a>' : '', '</td>
<td align="right" style="padding-right: 1ex;">
<table cellpadding="0" cellspacing="0">
<tr>
', template_button_strip($normal_buttons, 'top', true), '
</tr>
</table>
</td>
</tr>
</table>';

184 и 526 строки на "чистом" форуме.

Заменяем их на:
// Show the page index... "Pages: [1]".
echo '
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="middletext">', $txt[139], ':  ';
global $context, $settings, $options, $scripturl, $txt;
if (!empty ($context['links']['prev'])) echo '<a href='.$context['links']['prev'].'>[Пред]</a> ';
echo $context['page_index'];
if (!empty ($context['links']['next'])) echo '<a href='.$context['links']['next'].'>[След]</a> ';
echo !empty($modSettings['topbottomEnable']) ? $context['menu_separator'] . ' &nbsp;&nbsp;<a href="#lastPost"><b>' . $txt['topbottom5'] . '</b></a>' : '', '</td>
<td align="right" style="padding-right: 1ex;">
<div class="nav" style="margin-bottom: 2px;"> ', $context['previous_next'], '</div>
<table cellpadding="0" cellspacing="0">
<tr>
', template_button_strip($normal_buttons, 'bottom'), '
</tr>
</table>
</td>
</tr>
</table>';

и

echo '
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="middletext">', $txt[139], ':  ';
global $context, $settings, $options, $scripturl, $txt;
if (!empty ($context['links']['prev'])) echo '<a href='.$context['links']['prev'].'>[Пред]</a> ';
echo $context['page_index'];
if (!empty ($context['links']['next'])) echo '<a href='.$context['links']['next'].'>[След]</a> ';
echo !empty($modSettings['topbottomEnable']) ? $context['menu_separator'] . ' &nbsp;&nbsp;<a href="#top"><b>' . $txt['topbottom4'] . '</b></a>':'</td>
<td align="right" style="padding-right: 1ex;">
<table cellpadding="0" cellspacing="0">
<tr>
', template_button_strip($normal_buttons, 'top', true), '
</tr>
</table>
</td>
</tr>
</table>';


соответсвенно.
Получаем простое добавление 2 ссылок:


Если хотите поставить такое на другую тему, то надо открывать папку с именем темы, а не default

Финал. Занавес.

Roman

Drakonsa, респект! Как раз то, что нужно.

Странно, что это простое решение, прилично улучшающее юзабилити, и к тому же, прописанное в движке, не вызывается через меню админки. Так и приходится все руками понемногу допиливать..



p.s. для модераторов: перенесите пожалуйста в "вопросы по движку"