2016-07-01 2 views
1

У меня есть код постраничной:Стиль постраничной PHP

//pagination 

$result1=$mysqli->query("SELECT * FROM product"); 
$row_per_page=10 ; 
$rows=$result1->num_rows; 
if ($rows>$row_per_page) $page=ceil($rows/$row_per_page); 
else $page=1; 
if(isset($_GET['start']) && (int)$_GET['start']) 
    $start=$_GET['start']; 
else 
    $start=0; 
$result=$mysqli->query("SELECT * FROM product limit $start,$row_per_page"); 

//End pagination 

while ($rows = $result->fetch_assoc()) { 
    echo $rows['name']; 
} 

$page_cr=($start/$row_per_page)+1; 
for($i=1;$i<=$page;$i++) 
{ 
    if ($page_cr!=$i) echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($i-1)."'>$i&nbsp;</a>"."</div>"; 
    else echo "<div class='pagination'>".$i." "."</div>"; 
} 

Этот код создать нумерацию страниц, как этот Pagination

Да, я хочу, чтобы удалить 6 7 8 9 ЭСТ ... и заменить " ... ". Когда я нажимаю на страницу 6, он будет удалять 1 2 3 4 5 - 10 11 12 13 и т. Д., Он показывает только 6 7 8 9 как изображение ниже [! [Pagination] [2]] [2]

enter image description here

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

+0

Вы должны быть более конкретными с логикой. Все это кажется произвольным. Когда вы находитесь на странице 1, вы показываете 5 страниц с начала и 4 страницы с конца. Когда вы находитесь на странице 6, вы показываете 4 страницы (начиная со страницы 6) и 4 страницы с конца. Существует ли какое-либо правило, регулирующее это? Любая спецификация? – apokryfos

+0

Вам просто нужны математические проверки, например 'if ($ i> $ page_cr + 5)' ... –

+0

Я редактирую свое сообщение, чтобы вы поняли. Благодаря !!! – XCode2015

ответ

0

Вот решения вашей проблемы постраничной, вид решения Google использует для постраничного это результатов поиска. В принципе, идея этого решения заключается в следующем:

В любой момент времени будет отображаться не более 5 ссылок на страницы, т. Е. С точки зрения текущей страницы, отображения двух страниц-предшественников и преемников. Позвольте мне объяснить эту вещь, используя два сценария,

Case (1): Когда количество страниц равно или меньше, чем 5 (Допустим, у нас есть 4 страницы)

В этом случае мы имеем отобразить все ссылки разбивки на страницы без каких-либо предшествующих или последующих точек, как это:

// User is on page 1 
1 2 3 4 
    - - - 

// User is on page 3 
1 2 3 4 
- - - 

// User is on page 4 
1 2 3 4 
- - - 

Случай (2): Когда количество страниц превышает 5 (Допустим, у нас есть 10 страниц)

В этом случае, мы должны отображать как ссылки разбивки на страницы и точки, соответственно, как это:

// User is on page 1 
1 2 3 4 5 ... 
    - - - - 

// User is on page 5 
... 3 4 5 6 7 ... 
    - - - - 

// User is on page 10 
... 6 7 8 9 10 
    - - - - 

Таким образом, после получения текущего номера страницы с помощью $page_cr=($start/$row_per_page)+1;, алгоритма этой пользовательских постраничной системы будет так :

  1. Проверьте, больше ли количество страниц больше 5 или нет. Если это больше 5, перейдите к шагу 2 в противном случае перейдите к шагу 5.

  2. Найдите диапазон надстроек страниц, например 1-10 или 1-20 и т. Д. Например, если $page = 10, то этот диапазон надмножеств будет 1-10. Код для этого шага заключается в следующем:

    // Superset range of pages 
    $superset_range = range(1, $page); 
    
  3. Найти диапазон подмножества страниц для отображения, как 1-5 или 3-7 и т.д. Например, если $page = 10, то этот диапазон подмножества будет 1-5 , или 3-7, или 6-10 и т. д., это может быть любая последовательная пятерка страниц между 1 и 10. Кроме того, при необходимости отрегулируйте этот диапазон. Код этого шага заключается в следующем:

    // Subset range of pages to display 
    $subset_range = range($page_cr - 2, $page_cr + 2); 
    
    // Adjust the range 
    foreach($subset_range as $p){ 
        if($p <= 0){ 
         array_shift($subset_range); 
         $subset_range[] = $subset_range[count($subset_range) - 1] + 1; 
        }elseif($p > $page){ 
         array_pop($subset_range); 
         array_unshift($subset_range, $subset_range[0] - 1); 
        } 
    } 
    
  4. Показать разбивки на страницы ссылки и точек соответственно.Код этого шага заключается в следующем:

    // Display pagination links and dots 
    if($subset_range[0] > $superset_range[0]){ 
        echo "<div class='pagination'>...&nbsp;</div>"; 
    } 
    foreach($subset_range as $p){ 
        if($page_cr != $p){ 
         echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($p-1)."'>$p&nbsp;</a>"."</div>"; 
        }else{ 
         echo "<div class='pagination'>".$p." "."</div>"; 
        } 
    
    } 
    if($subset_range[count($subset_range) - 1] < $superset_range[count($superset_range) - 1]){ 
        echo "<div class='pagination'>&nbsp;...</div>"; 
    } 
    
  5. Показать все разбиения на страницы ссылки, используя ваш старый код, как это:

    // Display all page links 
    for($i = 1; $i <= $page; $i++){ 
        if($page_cr != $i){ 
         echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($i-1)."'>$i&nbsp;</a>"."</div>"; 
        }else{ 
         echo "<div class='pagination'>".$i." "."</div>"; 
        } 
    } 
    

Так вот полный код:

$result1 = $mysqli->query("SELECT * FROM product"); 
$row_per_page= 10; 
$rows=$result1->num_rows; 

if ($rows > $row_per_page){ 
    $page=ceil($rows/$row_per_page); 
}else{ 
    $page=1; 
} 
if(isset($_GET['start']) && (int)$_GET['start']){ 
    $start=$_GET['start']; 
}else{ 
    $start=0; 
} 
$result=$mysqli->query("SELECT * FROM product limit $start,$row_per_page"); 

while ($rows = $result->fetch_assoc()) { 
    echo $rows['name']; 
} 

$page_cr=($start/$row_per_page) + 1; // Page number 

if($page > 5){ 
    // From the current page's perspective, display two predecessor and successor pages 

    // Superset range of pages 
    $superset_range = range(1, $page); 

    // Subset range of pages to display 
    $subset_range = range($page_cr - 2, $page_cr + 2); 

    // Adjust the range 
    foreach($subset_range as $p){ 
     if($p <= 0){ 
      array_shift($subset_range); 
      $subset_range[] = $subset_range[count($subset_range) - 1] + 1; 
     }elseif($p > $page){ 
      array_pop($subset_range); 
      array_unshift($subset_range, $subset_range[0] - 1); 
     } 
    } 

    // Display pagination links and dots 
    if($subset_range[0] > $superset_range[0]){ 
     echo "<div class='pagination'>...&nbsp;</div>"; 
    } 
    foreach($subset_range as $p){ 
     if($page_cr != $p){ 
      echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($p-1)."'>$p&nbsp;</a>"."</div>"; 
     }else{ 
      echo "<div class='pagination'>".$p." "."</div>"; 
     } 

    } 
    if($subset_range[count($subset_range) - 1] < $superset_range[count($superset_range) - 1]){ 
     echo "<div class='pagination'>&nbsp;...</div>"; 
    } 
}else{ 
    // Display all page links 
    for($i = 1; $i <= $page; $i++){ 
     if($page_cr != $i){ 
      echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($i-1)."'>$i&nbsp;</a>"."</div>"; 
     }else{ 
      echo "<div class='pagination'>".$i." "."</div>"; 
     } 
    } 
} 
+0

это действительно помогает мне экономить время. спасибо – XCode2015

Смежные вопросы