Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Пагинатор [3]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 2 [3]   

> Без описания
DeepVarvar Супермодератор
Отправлено: 31 Мая, 2012 - 12:30:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ребята в примере не совсем такой запрос как у меня.
Таблица не будет читаться полностью - у меня запрос в запросе, учитывайте этот момент.
 
 Top
tuareg
Отправлено: 31 Мая, 2012 - 12:49:59
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




DeepVarvar пишет:
Таблица не будет читаться полностью - у меня запрос в запросе, учитывайте этот момент.

Это понятно. Просто спросили я ответил.

P.S Правда я не думаю, что будет разница, если честно
 
 Top
DeepVarvar Супермодератор
Отправлено: 31 Мая, 2012 - 15:21:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Разница не в разнице. Разница в удобстве.
Ты пишешь любой запрос без всяких добавлений в него COUNT и прочего, только условия.
Отправляешь его в данной обертке и все - лимит будет внешним относительно запроса с условиями и пробежит уже по готовой таблице.
Я и не говорил что он в 10 раз шустрее - я говорил что он удобнее.
 
 Top
etoYA
Отправлено: 31 Мая, 2012 - 20:21:03
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Ясно).

(Отредактировано автором: 31 Мая, 2012 - 20:22:31)

 
 Top
etoYA
Отправлено: 31 Мая, 2012 - 23:41:13
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Люди, мозг кепит) уже 2 дня не могу составить условие для цикла, чтобы возвращало страницы

1-2-3-4-5-6-7-8-9-10 (если больше 10)
10-11-12-13-14-15-16-17-18-19-20 (и.т.д).
(Добавление)
сейчас вот такая вот беда...
PHP:
скопировать код в буфер обмена
  1. for ($i = 1, $x = 0; $i < $total + 1; $i++, $x++){
  2.         if ($x === 10) break;
  3.         if ($i === 10);
  4.         self::$navigation[] = '<a href="'. $link .'/'. $i .'">'. $i .'</a>';
  5. }

(Добавление)
Т.е. нужно чтобы показовала ссылки на страницы до 10 штук.

К примеру 12 страниц.

1-2-3-4-5-6-7-8-9-10
после перехода на 10
11-12

(Отредактировано автором: 31 Мая, 2012 - 23:51:28)

 
 Top
tuareg
Отправлено: 01 Июня, 2012 - 00:11:09
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




etoYA пишет:
Люди, мозг кепит) уже 2 дня не могу составить условие для цикла, чтобы возвращало страницы

1-2-3-4-5-6-7-8-9-10 (если больше 10)
10-11-12-13-14-15-16-17-18-19-20 (и.т.д).

А в чем проблема?
Есть количество страниц, есть номер страницы
цикл
PHP:
скопировать код в буфер обмена
  1.  
  2. $countPage=10;//всего страниц
  3. $currentPage=5;//текущая страница
  4. $str='';
  5. for($i=1;$i<=$countPage;$i++){
  6.   $str.='<a '(($i==$currentPage)?'class="current"':'')' href="url">'.$i.'</a>';
  7. }
  8.  

Много страниц, а нужно допустим выводить по 10 тогда
PHP:
скопировать код в буфер обмена
  1.  
  2. $printPage=10;//кол-во страниц
  3. $countPage=50;//всего страниц
  4. $currentPage=25;//текущая страница
  5. $partPage=$printPage/2;// находишь половину не знаю как правильно сформулировать
  6. /*Находишь нужна ли ссылка на последнюю страницу*/
  7. $lastPage=(($countPage-$currentPage-$partPage)>0)?'<a href="/url последней страницы">>></a>':'';
  8. /*Находишь нужна ли ссылка на первую страницу*/
  9. $firstPage=(($currentPage-$partPage)>0)?'<a href="/url первой страницы"><<</a>':'';
  10. $str='';
  11. $i1=($firstPage==='')?0:$currentPage-$partPage;// начало цикла
  12. $j=($lastPage==='')?$countPage:$currentPage+$partPage;// конец цикла
  13. for($i=$i1;$i<$j;$i++){
  14.   $str.='<a '(($i==$currentPage)?'class="current"':'')'>'.$i.'</a>';
  15. }
  16. echo $firstPage.$str.$lastPage;
  17.  

Получится(должно Улыбка ) Что-то типа << 20 21 22 23 24 25 26 27 28 29 >>

(Отредактировано автором: 01 Июня, 2012 - 00:25:54)

 
 Top
etoYA
Отправлено: 01 Июня, 2012 - 15:23:57
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




DeepVarvar, а как быть с такими запросами

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `u`.*, `g`.`name` AS 'group' FROM `users` `u` INNER JOIN `groups` `g` ON `u`.`group` = `g`.`id` ORDER BY `id` ASC


Где дублируется название колонки?

p.s знаю, что можно Но еще варианты есть?

(Отредактировано автором: 01 Июня, 2012 - 15:30:40)

 
 Top
DeepVarvar Супермодератор
Отправлено: 01 Июня, 2012 - 15:50:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Других вариантов нет - только алиасы, которые ты уже привел в примере.
 
 Top
etoYA
Отправлено: 01 Июня, 2012 - 22:12:18
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




DeepVarvar, ясно, еще раз спасибо. Почитав более подробно про твой способ решил его использовать).

Выглядит это как то так=)

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class Paginator{
  3.         public static $navigation = array();
  4.        
  5.         public static function split($sql, $perPage, $page, $link){
  6.                 $page = !isset($page) || $page <= 0 ? 1 : intval($page);
  7.                 $limit = $page - 1 == 0 ? 0 : ($page - 1) * $perPage;
  8.                 $r = mysqli()->query("SELECT SQL_CALC_FOUND_ROWS * FROM ($sql) TBL LIMIT $limit, $perPage");
  9.                 if (!is_object($r)) throw new ErrorController('db');
  10.                 $total = intval(array_shift(mysqli()->query("SELECT FOUND_ROWS()")->fetch_row()));
  11.                 $partPage = ceil($total / $perPage);
  12.                 return $r;
  13.         }
  14. }
  15. ?>
  16.  

Впринципе изменил только название переменных и этот запрос

PHP:
скопировать код в буфер обмена
  1. $total = intval(array_shift(mysqli()->query("SELECT FOUND_ROWS()")->fetch_row()));

(Отредактировано автором: 01 Июня, 2012 - 22:31:29)

 
 Top
etoYA
Отправлено: 02 Июня, 2012 - 02:32:07
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




Блин все,уже вообще нет сил). Обьясните мне по полочкам. Как сделать эту долбаную навигацию)).

tuareg, твой способ не оч работает, он показывает то 5, то 10, и при переходе ссылки меняются (т.е. 1я отображаемая становаится $currentPage). А мне нужно, чтобы были статическими и показовало ссылки 10 штук(но эта цифры может быть любой).
Допустим

1-2-3-4-5-6-7-8-9-10 (на страницах 1-9)
11-12-13-14-15-16-17-18-19-20 (на страницах 10-19)
А если страниц всего 25, то
21-22-23-24-25. (на страницах 21-30, но так как их 25, то 25Улыбка)

e.t.c


P.S мне не нужен код, а лишь по полочкам разложить что нужно сделать). А то уже мозг кепит 3й день, и все никак. Аж хочется сделать 2 кнопки назад и впередУлыбка

(Отредактировано автором: 02 Июня, 2012 - 02:36:59)

 
 Top
ams
Отправлено: 02 Июня, 2012 - 10:22:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010  


Помог: 13 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $numPage  = $_GET['page'];
  3. $tmpVar     = $numPage;
  4.  
  5. $intervalStart = 0;
  6. $intervalEnd   = 0;
  7.  
  8. if ( $tmpVar % 10 == 0 ) {
  9.         print "10, 20, 30 page...";
  10. }
  11.  
  12. while ( $tmpVar % 10 != 0 ) {
  13.         $interval = $tmpVar++;
  14. }
  15. $intervalEnd    = $interval + 1;
  16. $intervalStart  = $intervalEnd - 9;
  17.  
  18. print "from: $intervalStart to: $intervalEnd";
  19.  


etoYA пишет:
мне не нужен код

Сырое... Улыбка

(Отредактировано автором: 02 Июня, 2012 - 10:23:42)

 
 Top
etoYA
Отправлено: 03 Июня, 2012 - 15:52:41
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


Помог: 21 раз(а)




ams, еп, кажется то, что нужно! Спасибо)).
 
 Top
Страниц (3): « 1 2 [3]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB