[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Постраничная навигация
okapo
Всем привет,
и так имею класс постраничной навигаций но вот проблема

в 1 плагин есть сортировка и она идет через POST запрос

и вот тут когда нужно идти на 2ю или дальше по страницам теряется сортировка

как можно решать это ?



Спустя 1 час, 1 минута, 26 секунд (14.12.2011 - 22:15) Игорь_Vasinsky написал(а):
это решается использованием GET - ссылки должы дописываться GET параметрами. неужели в этом классе нету.

Спустя 31 минута, 17 секунд (14.12.2011 - 22:46) okapo написал(а):
так что передавать все в гет ?

Спустя 2 минуты, 25 секунд (14.12.2011 - 22:49) okapo написал(а):
                    include('inc/classes/pagination.php');
$pagination = new pagination();
$pagination->num = $task_per_page;
$pagination->height = $per_page_height;
$pagination->url = '?s=work&do=tasks';
// Сортировка
if (isset($_POST['sort']) || isset($_GET['adver']))
{
if (!empty($_POST['status']) && $_POST['status'] > 0 AND $_POST['status'] < 6)
{
if ($_POST["status"]==1)
{
$status = " and `reusable`='1'";
$order = " ORDER BY top ASC";
}
if ($_POST["status"]==2)
{
$status = " and `id` NOT IN(SELECT `id_item` FROM ".DB_PREFIX."_checks WHERE `type`='task' and `loginID`='".$mres['id']."')";
$order = " ORDER BY date DESC";
}
else if ($_POST["status"]==3)
{
$status = " and `id` IN(SELECT `id_item` FROM ".DB_PREFIX."_checks WHERE `type`='task' and `loginID`='".$mres['id']."' and `status`='pending')";
}
else if ($_POST["status"]==4)
{
$status = " and id IN(SELECT `taskID` FROM ".DB_PREFIX."_tasks_notice WHERE `loginID`='".$mres['id']."')";
}
else if ($_POST["status"]==5)
{
$status = " and id IN(SELECT `id_item` FROM ".DB_PREFIX."_checks WHERE `type`='task' and `loginID`='".$mres['id']."' and `status`='ok')";
}
else if ($_POST["status"]==6)
{
$status = " and id IN(SELECT `id_item` FROM ".DB_PREFIX."_checks WHERE `type`='task' and `loginID`='".$mres['id']."' and `status`='fail')";
}
}

else
{
$status = "";
}

// категория
if (!empty($_POST['cat']) && $_POST['cat'] > 0 && $_POST['cat'] < 10)
{
$cat = " and `cat`='".intval($_POST['cat'])."'";
}

// рекламодатель
if (!empty($_GET['adver']))
{
$adver = " AND `author`='".intval($_GET['adver'])."'";
}

// цены
if (!empty($_POST['price']))
{
$price = "AND `price` > '".floatval($_POST['price'])."'";
}
$sort = $status.$cat.$adver.$price;
list($items) = mysqli_fetch_row($mysqli->query("SELECT COUNT(`id`) FROM ".DB_PREFIX."_tasks WHERE `active`='1,2' AND `plan`>`okay` ".$sort));
$pagination->elements = $items;
$sql = $mysqli->query("SELECT `t`.`id`,`t`.`cat`,`t`.`title`,`t`.`url`,`t`.`price`,`t`.`top`,`t`.`days`,`t`.`reusable`,
MAX(CASE WHEN a.`to` = `t`.`id` THEN a.minus END) as minus,
MAX(CASE WHEN a.`to` = `t`.`id` THEN a.plus END) as plus
FROM "
.DB_PREFIX."_tasks t
LEFT JOIN (SELECT `to`,
COUNT(CASE WHEN `rint`='-' AND `type`='task' THEN id END) as minus,
COUNT(CASE WHEN `rint`='+' AND `type`='task' THEN id END) as plus
FROM "
.DB_PREFIX."_rating WHERE `type`='task' AND (`rint`='-' OR `rint`='+')
GROUP BY `to`) a ON (a.`to` = `t`.`id`)
WHERE active='1,2' and `plan` > `okay` "
.$sort." GROUP BY t.id".$order.$pagination->createlimit());
}




вот то что я написал, не знаю ужасно или нет, но как тут взять с GET не мешая навигаций постранично ?

Спустя 8 минут, 1 секунда (14.12.2011 - 22:57) Ramzil_Nixon написал(а):
okapo, глняь-ка в этот топик: http://phpforum.ru/index.php?showtopic=36773

Спустя 3 минуты, 49 секунд (14.12.2011 - 23:00) Игорь_Vasinsky написал(а):

Спустя 4 минуты, 36 секунд (14.12.2011 - 23:05) okapo написал(а):
Цитата (Ramzil_Nixon @ 14.12.2011 - 19:57)
okapo, глняь-ка в этот топик: http://phpforum.ru/index.php?showtopic=36773

я свой класс тоже почти такой, но дело не в pagination

а в сортировке, как сделать ?

через пост теряет смысл

а через гет как быть ? как создать ссылку нужными параметрами из формы пост ?

вот форма
<form class="taskselect" action="" method="POST">
<table
width="100%">
<body>
<td>

Статус:<br />
<select
name="status">
<option
value="">Все задания</option>
<option
value="1">Многоразовое</option>
<option
value="2">Только новые задания</option>
<option
value="3">Над которыми работаю</option>
<option
value="4">На проверке</option>
<option
value="5">Оплачены</option>
<option
value="6">Отклонены</option>
</select>
</td>
<td>

Категория:<br />
<select
name="cat">
<option
value="">Все задания</option>
<option
value="1">Только регистрация</option>
<option
value="2">Только клики</option>
<option
value="3">Регистрация с активностью</option>
<option
value="4">Постинг в форумы и/или блоги</option>
<option
value="5">Написать статью или пресс-релиз</option>
<option
value="6">Оставить отзыв</option>
<option
value="7">Проголосовать</option>
<option
value="8">Играть в игры</option>
<option
value="9">Инвестировать</option>
<option
value="10">Прочее</option>
</select>
</td>
<td>
Цена от:<br /><input type="edit" name="price" style="width: 55px;"></td>
<td
align="center"><input type="submit" name="sort" class="btnsearch" value="" /></td>
</body>
</table>
</form>

Спустя 5 минут, 42 секунды (14.12.2011 - 23:11) Игорь_Vasinsky написал(а):
#Проверяем на какой странице мы находимся и задаём предел для вывода из БД
global $start;

if(!$_GET['page'] OR $_GET['page'] == 1)
{
$page = 1;
$start = 0;
}
else
{
$page = (int)$_GET['page'];
$start = ($page * $countStrings) - $countStrings;
}

$end = $start + $countStrings;


всё внимание на первую строчку ;)

Спустя 6 минут, 4 секунды (14.12.2011 - 23:17) okapo написал(а):
вот класс что я использую для страниц

class pagination
{
public $elements;
public $num = 10;
public $height = 5;
public function createLink()
{ if ($this->elements > 0)
{
$total = ceil($this->elements / $this->num);
if (empty($_GET['p'])) $page = 1;
else if ($_GET['p'] == 'last') $page = $total;
else $page = (int)$_GET['p'];
$url = $this->url;
if ($page < 1)
$page = 1;
else if ($page > $total)
$page = $total;
$start = ($page - 1) * $this->num;
$left = $page - $this->height;
if ($left < 1) $left = 1;
$right = $page + $this->height;
if ($right > $total) $right = $total;
$pagin = '';
if ($this->elements > $this->num)
{
$pagin .= '<div class="paging">';
if ($page > 1)
{
$pagin .= '<div class="prev"><a href="'.$url.'&p='. ($page - 1) .'">Предыдущая</a></div>';
}
else
{
$pagin .= ' <div class="prev"><span>Предыдущая</span></div>';
}
$pagin .= '<div class="pages">';
if($page - $this->height-1 > 1) $punctel = '...';
if($page - $this->height > 1) $pagin .= '<div class="page"><a href="'.$url.'&p=1">1</a></div>'.$punctel;
for ($i = $left; $i <= $right; ++$i)
{
if ($i != $page)
{
$pagin .= '<div class="page"><a href="'.$url.'&p='. $i .'">'. $i .'</a></div>';
}
else
{
$pagin .= '<div class="page current"><a>'. $i .'</a></div>';
}
}

if($this->height + $page+1 < $total) $puncter = '...';
if($this->height + $page < $total) $pagin .= $puncter.'<div class="page"><a href="'.$url.'&p='. $total .'">'. $total .'</a></div>';
$pagin.="</div>";
if ($page < $total)
{
$pagin .= '<div class="next"><a href="'.$url.'&p='. ($page + 1) .'">Следующая</a></div>';
}
else
{
$pagin .= '<div class="next"><span>Следующая</span></div>';
}
$pagin.="</div>";
return $pagin;
}
}
}


public function createlimit()
{
if ($this->elements > 0)
{
$total = ceil($this->elements / $this->num);
if (empty($_GET['p'])) $page = 1;
else if ($_GET['p'] == 'last') $page = $total;
else $page = (int)$_GET['p'];
if ($page < 1)
$page = 1;
else if ($page > $total)
$page = $total;
$start = ($page - 1) * $this->num;
$formate_limit = " LIMIT ". $start .", ". $this->num."";
return $formate_limit;
}
}
}


вопрос как, из формы передавать параметры для сортировки в адрес сайта?

после как быть после отсортировки ?

ссылка вида tasks&p=2 ( р - это страница )

не знаю как передать данные потом как навигацией делать что бы при навигаций опять не разрушалось ссылка с параметрами сортировки

Спустя 1 минута, 24 секунды (14.12.2011 - 23:18) okapo написал(а):
или может параметры в сессий засунуть ?

Спустя 28 минут, 17 секунд (14.12.2011 - 23:46) Игорь_Vasinsky написал(а):
тебе выше дали ссылки.

в гет ты передаёшь из навигации, навигацию ты строешь из выборки БД + LIMIT + расчёты

Спустя 17 часов, 31 минута, 7 секунд (15.12.2011 - 17:18) okapo написал(а):
                        $_POST = array('status' => $_POST['status'],
'cat' => $_POST['cat'],
'price' => $_POST['price']);



$_GET = array('status' => $_GET['status'],
'cat' => $_GET['cat'],
'price' => $_GET['price'],
'p' => $_GET['p']);



$args = array_filter(array_merge($_GET, $_POST),
function($x)
{
return!!strlen($x);
});


вот нашел способ, но тут уже адрес сломается после нажатия на 3 страницы хотя до 3 страницы в адрес сайта заданы параметры сортировки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.