Регистрация    Забыли пароль?        Правила форума    FAQ (читать перед созданием новой темы)
Имя   Пароль  запомнить
  
Просмотр темы
Вернуться на сайт: PHP-Fusion SF Russian Support Site

Форум поддержки PHP-Fusion SF | PHP-Fusion SF - Моды/Плагины | Моды/Mods
# 1 Тема: Новый вид страничной навигации
pozitiv
SF Team

Avatar пользователя

паZитифф

SF Support Team

Почетный SF

Сообщений: 1676
Откуда: Киев
Зарегистрирован: 18 Ноября 2007, 18:49:13
Сказали спасибо 148 раз
Статус: offline
ICQ статус 3902393
Опубликовано 21 Октября 2010, 23:52:46
Небудет долгих монологов, сразу к делу... Новый пейджинг(листинг) страниц, незнаю как это дело правильно называется. Короче при установке этого мода, вы будете видеть ссылки вида http://www.rus-phpfusion.com/index.php?page=4, вместо привычных http://www.rus-phpfusion.com/index.php?rowstart=15...

Установка легкая:

в файл maincore.php добавить функцию

function pager($perpage, $count, $href) {
$pages = (ceil($count / $perpage) + 1);
if (isset($_GET["page"])) {
$pagedefault = floor(($count - 1) / $perpage);
if ($pagedefault < 1) $pagedefault = 1;
$page = $_GET["page"];
if ($page < 1) $page = 1;
$start = ($page - 1) * $perpage;
} else {
$page = 1;
$start = 0;
}
$mp = $pages - 1;
if (($page - 1) >= 1) {
$pager .= "<li><a href=\"{$href}page=" . ($page - 1) . "\">«</a></li>";
}
if ($page < $mp && $mp >= 0) {
$pager2 .= "<li><a href=\"{$href}page=" . ($page + 1) . "\">»</a></li>";
}
if ($count > $perpage) {
$pagerarr = array();
$dotted = 0;
$dotspace = 2;
$dotend = $pages - $dotspace;
$curdotend = $page - $dotspace;
$curdotstart = $page + $dotspace;
for ($i = 1; $i < $pages; $i++) {
if (($i >= ($dotspace + 1) && $i <= $curdotend) || ($i >= $curdotstart && $i < $dotend)) {
if (!$dotted)
$pagerarr[] = "<li>...</li>";
$dotted = 1;
continue;
}
$dotted = 0;
if ($i != $page)
$pagerarr[] = "<li><a href=\"{$href}page=$i\"'>$i</a></li>";
else
$pagerarr[] = "<li><em>$i</em></li>";
}
$pagerstr = join("", $pagerarr);
$pagerbottom = "<div class='page-nav'><ul id='nav-pages'>$pager $pagerstr $pager2</ul></div>";
} else {
$pagerbottom = "";
}
return array($pagerbottom, "LIMIT $start,$perpage");
}



в файл styles.css добавить стили


.page-nav {
overflow:hidden;
clear: both;
margin: 1.88em 0 .63em 0;
}

.page-nav {
margin: 0;
padding: .83em 1.67em;
width: 80%;
}

.next-prev {
font:2em/100% Tahoma, sans-serif;
color:#000;
}
.next-prev li {
display: inline;
padding-right: .3em;
}

#nav-pages {
font: 1.2em/100% arial;
padding: 0 1em 2em 0;
margin: 1em 0;
list-style: none;
clear: both;
}

#nav-pages li {
float: left;
}

#nav-pages a, #nav-pages em {
margin:0 0.2em 0 0.1em;
padding: .3em .4em;
display: block;
}
#nav-pages a:hover{
background:#c5dae5;
}

#nav-pages em {
background:#7A9BAC;
font-weight: 400;
font-style: normal;
color: #fff;
}




Далее на примере файла viewforum.php:

Найти строку
$rows = dbrows(dbquery("SELECT * FROM ".$db_prefix."threads WHERE forum_id='$forum_id' AND thread_sticky='0'"));
ниже неё будет строка:

if (!isset($rowstart) || !isNum($rowstart)) $rowstart = 0;
её надо закоментировать или удалить, ну или заменить на то что ниже:

list($pagerbottom, $limit) = pager($threads_per_page, $rows, BASEDIR."?module=$module&act=viewforum&forum_id=$forum_id&");

Тутже чуток ниже стнадартный вывод страничной навигации
if ($rows > $threads_per_page) {
echo "<div align='center' style='margin-top:5px;margin-bottom:5px;'>
".makePageNav($rowstart,20,$rows,3,BASEDIR."?module=$module&act=viewforum&forum_id=forum_id=$forum_id&")."
</div>\n";
}


заменить на

if ($rows > $threads_per_page) {
echo "<div align='center' style='margin-top:5px;margin-bottom:5px;'>$pagerbottom</div>\n";
}


/повторить 2 раза))


Далее немного сложнее... Запрос в БД который надо править у меня немного отличается от стандартного, поэтому постараюсь объяснить как можно понятнее...

Ищете запрос где есть LIMIT $rowstart,20 - вместо 20 может быть любая переменная или цифра, например $threads_per_page, и вот то что выделено жирным надо заменить на $limit

Пример:

был запрос

$result = dbquery(
"SELECT t.*, tp.poll_id FROM ".$db_prefix."threads t
LEFT JOIN ".$db_prefix."forum_thread_polls tp ON t.thread_id = tp.thread_id
WHERE t.forum_id='$forum_id' GROUP BY thread_id ORDER BY thread_sticky DESC, thread_lastpost DESC LIMIT $rowstart,20"
);


после изменений стал

$result = dbquery(
"SELECT t.*, tp.poll_id FROM ".$db_prefix."threads t
LEFT JOIN ".$db_prefix."forum_thread_polls tp ON t.thread_id = tp.thread_id
WHERE t.forum_id='$forum_id' GROUP BY thread_id ORDER BY thread_sticky DESC, thread_lastpost DESC $limit"
);


По-дефолту это простые текстовые ссылки без стилей, выдеялется только активная страница. Пример:
« 1 2 ... 5 6 7 8 9 ... 11 12 13 »




Плюс в том что немного изменив функцию pager, можно выводить страницы примерно так:

1-15 16-30 31-45 46-60 и т.д. при этом выделяя активную страницу
* - тут имеется ввиду не страница 1-15, а например темы форума 1-15 или фото 1-15, ну или новости 1-15

Ссылки типа двойных ковычек-елочек » можно выводить как отдельные переменные и отображать их отдельно от нумерованных страниц, например можно сделать как на http://habrahabr.ru/ под статьями

Опять таки, при желании можно сделать вывод информации: Всего 1290 фото на 52 страницах, по 25 на каждой возле пейджинга.

Если пейджинг выводится 2 раза: над контентом и под контентом(как на форуме), то можно сделать чтобы сверху была маленькая навигация, а снизу большая с разной инфой....

Вобщем раздолье для фантазии))

зы: да, я спер эту функцию с движка tbdev yse убрав оттуда абсолютно все кроме самих ссылок, т.к. где применялся этот пейджинг нужны были только ссылки без всяких наворотов. Еще в оригинале бало так: ссылка на страницу была на 1 меньше номера страницы, так page=0 явлалась первой страницой, page=6 была 7 страницой, и т.д... Я переделал чтобы каждая ссылка была равна номеру страницы: page=1 является первой страницей, page=7 - 7 страница, и т.д....


[Изменил(а) pozitiv, 22 Октября 2010, 17:13:46]

--------------------
wmz - Z226856101527
wmr - R513979829437

Все вопросы задавать на форуме. На вопросы заданные в приват или асю неотвечаю!
^ наверх ^ 3902393 http://nekto.me
1 пользователь сказал спасибо Вам: rusbody
# 2  
rusbody
Пользователь

Avatar пользователя



Любитель Fusion

Сообщений: 282
Зарегистрирован: 28 Января 2008, 00:45:36
Сказали спасибо 7 раз
Статус: offline
Опубликовано 22 Октября 2010, 00:24:58
Мне нравиться smiley Отлично!


--------------------
Мой сайт на вашем движке бодибилдинг видео
^ наверх ^ rusbody.com
# 3  
jikaka
Пользователь

Avatar пользователя

jikaka

Почетный SF

Сообщений: 1112
Откуда: Питер
Зарегистрирован: 01 Октября 2008, 08:39:58
Сказали спасибо 106 раз
Статус: offline
ICQ статус 196346743
Опубликовано 22 Октября 2010, 15:18:39
да, идея хорошая...


--------------------
жить хорошо! а хорошо жить - еще лучше!
www.rusfusion.ru - официальная поддержка
^ наверх ^ 196346743 www.jikaka.ru
# 4  
pozitiv
SF Team

Avatar пользователя

паZитифф

SF Support Team

Почетный SF

Сообщений: 1676
Откуда: Киев
Зарегистрирован: 18 Ноября 2007, 18:49:13
Сказали спасибо 148 раз
Статус: offline
ICQ статус 3902393
Опубликовано 22 Октября 2010, 16:14:20
Небольшая правка:
Если в функции pager строку if ($count) { заменить на if ($count > $perpage) {
то выводить пейджинг можно просто переменной $pagerbottom без дополнительных if(строк больше чем надо) echo $pagerbottom;


--------------------
wmz - Z226856101527
wmr - R513979829437

Все вопросы задавать на форуме. На вопросы заданные в приват или асю неотвечаю!
^ наверх ^ 3902393 http://nekto.me
# 5  
pozitiv
SF Team

Avatar пользователя

паZитифф

SF Support Team

Почетный SF

Сообщений: 1676
Откуда: Киев
Зарегистрирован: 18 Ноября 2007, 18:49:13
Сказали спасибо 148 раз
Статус: offline
ICQ статус 3902393
Опубликовано 22 Октября 2010, 17:14:09
Поправил 1 незначительную багу + добавиль стили для наглядности


--------------------
wmz - Z226856101527
wmr - R513979829437

Все вопросы задавать на форуме. На вопросы заданные в приват или асю неотвечаю!
^ наверх ^ 3902393 http://nekto.me
Перейти на форум:


94,165,052 уникальных посетителей
сейчас: 29 Марта 2024, 11:19:44
Генерация страницы: 0.14 сек.