Новосибирск +7(983)

По всем вопросам :

Телеграм : @radgura

Собственная навигация (Pagenition)

Заказать доработку
Joomla 3x

Стоимость 300


@radgura.ru
Адриена Лежена
63089
Новосибирск
Адриена Лежена
+7(983)
3067856
Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.

Статьи

Вы можете Заказать доработку 300руб. RUB

Вариант №1 - использование сессии пользователя и вывод страниц из массива, переключение страниц через Ajax запрос

Переменные:

$usermass  //Массив строк(пользователей) для навигации 

$pagecount //кол-во страниц

$tabnav  //выбранная страница, данные переданы через сессию

$sred //средняя страница в массиве

$userlistcount //сколько элементов будет на странице


function get_pagenition($usermass,$userlistcount,$tabnav,$showstrcount,$title='')
{
$pagecount=(int)(count($usermass)/$userlistcount);
$sred=(int)($pagecount/2);$ret='';
if ((count($usermass)-$pagecount*$userlistcount)>0) $pagecount++;
//кол-во материалов до 5 страниц
if ($pagecount<5) {for( $i=1 ; $i <= $pagecount ; $i++ ) {$ret.='<a class="btn pagenavtab '.(($tabnav==$i)?' activetabnav':'').'" id="'.$i.'">'.($i).'</a>';}}
else
{
//первые 2 страницы
if ($tabnav>1) $ret.='<a class="btn pagenavtab" id="'.($tabnav-1).'" style="margin-right: 10px;"><<</a>';
$ret.='<a class="btn pagenavtab '.(($tabnav==1)?' activetabnav':'').'" id="1">1</a>';
$ret.='<a class="btn pagenavtab '.(($tabnav==2)?' activetabnav':'').'" id="2">2</a>';
if ($tabnav!=3) $ret.='<a class="btn" disabled="disabled" style="margin-right: 10px;">...</a>';
//выбранный промежуток
if ($tabnav>2 and $tabnav<$pagecount-1)//выбраны страницы за рамками первых и последних 2х
{
if ($tabnav>3) $ret.='<a class="btn pagenavtab " id="'.($tabnav-1).'">'.($tabnav-1).'</a>';
$ret.='<a class="btn pagenavtab activetabnav" id="'.($tabnav).'">'.($tabnav).'</a>';
$ret.='<a class="btn pagenavtab " id="'.($tabnav+1).'">'.($tabnav+1).'</a>';
}
else//страница выбрано в пределах 2х первых и 2х последних
{
$ret.='<a class="btn pagenavtab '.(($tabnav==($sred-1))?' activetabnav':'').'" id="'.($sred-1).'">'.($sred-1).'</a>';
$ret.='<a class="btn pagenavtab '.(($tabnav==($sred))?' activetabnav':'').'" id="'.($sred).'">'.($sred).'</a>';
$ret.='<a class="btn pagenavtab '.(($tabnav==($sred+1))?' activetabnav':'').'" id="'.($sred+1).'">'.($sred+1).'</a>';
}
//последние 2 страницы
if ($tabnav!=$pagecount-2) $ret.='<a class="btn" disabled="disabled" style="margin-right: 10px;">...</a>';
if ($tabnav!=$pagecount-2)$ret.='<a class="btn pagenavtab '.(($tabnav==($pagecount-1))?' activetabnav':'').'" id="'.($pagecount-1).'">'.($pagecount-1).'</a>';
$ret.='<a class="btn pagenavtab '.(($tabnav==($pagecount))?' activetabnav':'').'" id="'.($pagecount).'">'.($pagecount).'</a>';
if ($tabnav<$pagecount) $ret.='<a class="btn pagenavtab" id="'.($tabnav+1).'" style="margin-right: 10px;">>></a>';
}
if ($showstrcount==1) $ret.='<span>&nbsp;&nbsp; Всего страниц '.$pagecount.' , из '.count($usermass).'</span>';
return $title.$ret;
}

Алгоритм:

1.Если страниц меньше 6, то выводится просто кнопки, без дробления

2.При кол-ве страниц больше 6, выводятся первые и последние 2 страницы, а также:

2.1. Если номер выбранной страницы больше 1 то добавляем кнопку "Назад" и "вперед"

2.2. Если выбранная страница на границе +2 страниц от начала и конца, то в середине выводим среднее значение кол-ва страниц

2.3.Если выбранная страница вне границ +2 от начала и конца, то выводится номер выбранной страницы и +1 и -1 от этого значения

Также нужно подключить скрипт, который бы обновил страницы и передал номер с кнопки в сессию

Скрипт обработки нажатия кнопки

<script> 
jQuery(document).ready(function() {
//передаем номер страницы
jQuery("body").on("click", ".pagenavtab", function(e) {
e.preventDefault();
var myData = 'pagenavtab='+this.id;
jQuery.ajax({
type: "POST",
url: "index.php?option=com_rad_monitor&view=monitordatas",
dataType:"text",
data:myData,
success:function(response){
location.reload();},
error:function (xhr, ajaxOptions, thrownError){document.getElementById('sendtestsms_txt').innerHTML = thrownError;}
});
});
</script>

Скрипт, который внесет в сессию номер страницы - должен перехватить POST запрос

if(isset($_POST["pagenavtab"]) && strlen($_POST["pagenavtab"])>0)
{
$_SESSION['radmontabnav']= $_POST["pagenavtab"];
exit();
}

Вывод значений с учетом номера страницы

$datawhow=1;//счетчик элементов
foreach (база элементов)
{
....
if ($datashow<=($tabnav*$userlistcount) and $datashow>(($tabnav-1)*$userlistcount))
{
....
//вывод элементов
....
}
$datashow++;
}

Вариант №2 - использование $_GET и построение двойным списком

Переменные:

$posts_count = count($res->posts);//итого кол-во материалов

$posts_per_page = 6;//материалов на странице по умолчанию

if($_GET['per_page']){$posts_per_page = $_GET['per_page'];}//материалов на странице получаем из ссылки

$count_pages = round($posts_count / $posts_per_page);//кол-во страниц, округляем до целого

if (($count_pages*$posts_per_page)<$posts_count) $count_pages++;//ситуация: кол-во материалов не равно бьется с $posts_per_page

$perm_link = ...;//ссылка на страницу JURI::

$orderby = 'DESC';

if($_GET['orderby'] && $_GET['orderby'] == 2){$orderby = 'ASC';}

Алгоритм:

//Ситуация 1: страница всего одна, кнопок не требуется
if($count_pages ==1)
{
echo '<div class="pagination-wrap sit1"></div>';
}
//Ситуация 2: страниц до 6 включительно - отрисовываем 6 кнопок, если позволяет массив страниц
//кнопка назад - не требуется
if($count_pages > 1 and $count_pages <=6)
{
echo '<div class="pagination-wrap sit2">';
echo '<ul class="pagination">';
//выбрана не первая страница , показываем кнопку назад
if($paged>1)
{
echo '<li class="pagination-controls back-control fll">';
echo '<a href="'.$perm_link.'/page/'.($paged-1).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">Назад</a>';
echo '</li>';
} else
{
echo '<li class="pagination-controls back-control fll"></li>';
}
echo '<li class="align-center">';
echo '<ul class="page-nums">';
for ($ii = 1; $ii <= $count_pages; $ii++)
{
echo '<li '.(($paged==$ii)?'class="activepage"':'').'><a href="'.$perm_link.'/page/'.$ii.'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.$ii.'</a></li>';
}
echo '</ul>';
echo '</li>';
//выбрана не последняя страница, показываем кнопку вперед
if($paged<$count_pages)
{
echo '<li class="pagination-controls next-control flr">';
echo '<a href="'.$perm_link.'/page/'.($paged + 1).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">Вперед</a>';
echo '</li>';
} else
{
echo '<li class="pagination-controls next-control flr"></li>';
}
echo '</ul>';
echo '</div> ';
}
//ситуация 3: страниц больше 6, требуется кнопка разделитель и поделить страницы 3 вначале - разделитель - 3 в конце
else
if($count_pages>6)
{
echo '<div class="pagination-wrap">';
echo '<ul class="pagination">';
//выбрана не первая страница , показываем кнопку назад
if($paged>1)
{
echo '<li class="pagination-controls back-control fll">';
echo '<a href="'.$perm_link.'/page/'.($paged-1).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">Назад</a>';
echo '</li>';
} else
{
echo '<li class="pagination-controls back-control fll"></li>';
}
echo '<li class="align-center">';
echo '<ul class="page-nums">';
//смотрим на какой мы позиции
//выбраны страницы до первых или последних 3х - показываем последовательность 1,2,3...n-2,n-1,n
if ($paged<3 or $paged>($count_pages-2))
{
echo '<li '.(($paged==1)?'class="activepage"':'').'><a href="'.$perm_link.'/page/1/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">1</a></li>';
echo '<li '.(($paged==2)?'class="activepage"':'').'><a href="'.$perm_link.'/page/2/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">2</a></li>';
echo '<li '.(($paged==3)?'class="activepage"':'').'><a href="'.$perm_link.'/page/3/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">3</a></li>';
echo '<li><span>...</span></li>';
echo '<li '.(($paged==($count_pages-2))?'class="activepage"':'').'><a href="'.$perm_link.'/page/'.($count_pages-2).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.($count_pages-2).'</a></li>';
echo '<li '.(($paged==($count_pages-1))?'class="activepage"':'').'><a href="'.$perm_link.'/page/'.($count_pages-1).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.($count_pages-1).'</a></li>';
echo '<li '.(($paged==$count_pages)?'class="activepage"':'').'><a href="'.$perm_link.'/page/'.($count_pages).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.($count_pages).'</a></li>';
}
//мы в центре массива страниц последовательность 1...v-1,v,v+1...n
else
{
echo '<li><a href="'.$perm_link.'/page/1/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">1</a></li>';
if ($paged-2>=2)echo '<li><span>...</span></li>';
if ($paged-2>2) echo '<li><a href="'.$perm_link.'/page/'.($paged-2).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.($paged-2).'</a></li>';
echo '<li><a href="'.$perm_link.'/page/'.($paged-1).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.($paged-1).'</a></li>';
echo '<li class="activepage" ><a href="'.$perm_link.'/page/'.($paged).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.($paged).'</a></li>';
echo '<li><a href="'.$perm_link.'/page/'.($paged+1).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.($paged+1).'</a></li>';
if ($paged-2<$count_pages-2) echo '<li><a href="'.$perm_link.'/page/'.($paged+2).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.($paged+2).'</a></li>';
if ($paged-2<=$count_pages-2)echo '<li><span>...</span></li>';
echo '<li><a href="'.$perm_link.'/page/'.($count_pages).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">'.($count_pages).'</a></li>';
}
echo '</ul>';
echo '</li>';
//выбрана не последняя страница, показываем кнопку вперед
if($paged<$count_pages)
{
echo '<li class="pagination-controls next-control flr">';
echo '<a href="'.$perm_link.'/page/'.($paged + 1).'/?per_page='.$posts_per_page.'&orderby='.$orderby.'&type='.$type.'">Вперед</a>';
echo '</li>';
} else
{
echo '<li class="pagination-controls next-control flr"></li>';
}
echo '</ul>';
echo '</div> ';
}
?>
<style>.activepage{background: bisque;}.next-control{width: auto!important;}.back-control{width: auto!important;}.flr{float:right;}.fll{float:left;}.pagination{text-align:center;}</style>
 	

Комментарии (0)

Здесь ещё нет оставленных комментариев.

Оставьте свой комментарий

  1. Добавление комментария от гостя.
Вложения (0 / 3)
Share Your Location

Как с нами связаться

По всем вопросам пишите  

Телеграм: @radgura

OnLine заказ

Отправить сообщение

Нажимая на кнопку «Отправить сообщение», я соглашаюсь:
* с условиями публичной оферты
* обработку моих персональных данных


RAD компоненты

Please publish modules in offcanvas position.