Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Постраничный вывод фиксированной длины, Как реализовать? 
:(
    Опции темы
Guedda
Дата 27.5.2010, 09:38 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 13
Всего: 78



Добрый день, уважаемые программисты. Столкнулся, по сути, с тривиальной задачей, но ума не приложу, как ее лучше и оптимизированнее реализовать.
Суть такова:
Есть количество страниц (любое, от 1 до 1000). Мне необходимо, чтобы выводились ссылки на 10 страниц, присутствовали ссылки "Назад" и "Вперед" (соответственно, если страница одна, то никаких Назад и Вперед нет). 
Пример:
Цитата

1 2 3 4 5 6 7 8 9 10 Next >>

Так вот если пользователь находится на 10 странице (а страниц, допустим, 65), то при нажатии на ссылку Next >> он переходил на 11 страницу, а ссылки на страницы были такими:
Цитата

<<Prev 11 12 13 14 15 16 17 18 19 20 Next >>

Начал делать код, и застопорился. Пожалуйста, помогите. Вот код:
Код

<?php
$pages = 500;
if (isset($_GET['page'])) 
{
    $page = $_GET['page'];
}
else $page = 1;

if ($pages > 1)
                    {
                       $for_fifteen = 1;

                       if ($pages > 10)
                       {
                           $fifteen_ceil = ceil($pages / 10);
                       }

                       if ( $page > 1 )
                        {
                            echo "<span style=\"display: inline-block; width: 50px;\"><a href=\"?page=" . ($page - 1) . "\">" . "<< Prev" . "</a></span>";
                        }
                       for ($page_element = $for_fifteen; $page_element <= $pages; $page_element++)
                       {
                          if ($page_element == $page)
                          {
                             echo "<span style=\"display: inline-block; width: 50px;\">$page_element</span>";
                          }
                          else
                          {
                              echo "<span style=\"display: inline-block; width: 50px;\"><a href=\"?page=$page_element\">$page_element</a></span>";
                          }
                        }
                        if ( $page < $pages )
                        {
                            echo "<span style=\"display: inline-block; width: 50px;\"><a href=\"?page=" . ($page + 1) . "\">" . "Next >>" . "</a></span>";
                        }
                    }


Заранее благодарю за ответы.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
ksnk
Дата 27.5.2010, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



а если страниц 11, то на 11 странице внизу будут только << Prev и 11 ?
Кнопка Next переводит на следующую страницу? Была 3 стала 4?

А так - для каждого значка отдельно проверять нужно его выводить или нет. Никакой магии пока не придумалось, вроде... Думать некогда, трясти надо...


Это сообщение отредактировал(а) ksnk - 27.5.2010, 09:57


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Guedda
Дата 27.5.2010, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 13
Всего: 78



Цитата(ksnk @  27.5.2010,  10:56 Найти цитируемый пост)
а если страниц 11, то на 11 странице внизу будут только << Prev и 11 ?

Да
Цитата(ksnk @  27.5.2010,  10:56 Найти цитируемый пост)
Кнопка Next переводит на следующую страницу? Была 3 стала 4?

Да
Цитата(ksnk @  27.5.2010,  10:56 Найти цитируемый пост)
А так - для каждого значка отдельно проверять нужно его выводить или нет.

Я думаю, что это будет неоптимизировано и будут лишние итерации... До сих пор нормального ничего не придумал... Давайте подумаем вместе...



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
patap
Дата 27.5.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



до этого дрянь была )) надо prev доделать
Код

define(PAGE_LIST, 10);
  define(PAGES, 104);
  
  $result = '';
  
  $current = $_GET['page'];
  $part = floor($current / 10);
  
  
  
  $page = $part * 10 + 1;
  
  $result .= ($part > 1 || $current == 10) ? '<a href="2.php?page='.($page - 1).'">prev</a> ' : '';
  
  $i = 1;
  $flag = true;
  while ($i <= PAGE_LIST) {
    if ($page <= PAGES) {
      $text = ($page == $current) ? '<b>'.$page.'</b>' : $page;
      
      $result .= '<a href="2.php?page='.$page.'">'.$text.'</a>&nbsp;&nbsp;&nbsp;';
      $page++;
      $i++;
    } else {
      $flag = false;
      break;
    }
  }
  
  $result .= ($flag) ? '<a href="2.php?page='.($current + 1).'">next</a> ' : '';
  
  echo $result;


Это сообщение отредактировал(а) patap - 27.5.2010, 16:54


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.