2010-06-14 28 views
10

başına 10 sayfa Öyle gibi tüm sayfaların listesini görüntüleyen bir sayfalama komut dosyası vardır:
prev [1][2][3][4][5][6][7][8][9][10][11][12][13][14] next
Ama bir defada sadece sayıların on göstermek istiyorum:
prev [3][4][5][6][7][8][9][10][11][12] nextsayfalandırma sayfa

Bunu nasıl başarabilirim? Eğer sadece hızlı bir düzeltme, kendi for döngü biraz değiştirerek deneyebilirsiniz isterseniz

<?php 
/* Set current, prev and next page */ 
$page = (!isset($_GET['page']))? 1 : $_GET['page']; 
$prev = ($page - 1); 
$next = ($page + 1); 

/* Max results per page */ 
$max_results = 2; 

/* Calculate the offset */ 
$from = (($page * $max_results) - $max_results); 

/* Query the db for total results. 
    You need to edit the sql to fit your needs */ 
$result = mysql_query("select title from topics"); 

$total_results = mysql_num_rows($result); 

$total_pages = ceil($total_results/$max_results); 

$pagination = ''; 

/* Create a PREV link if there is one */ 
if($page > 1) 
{ 
    $pagination .= '< a href="?page='.$prev.'">Previous</a> '; 
} 

/* Loop through the total pages */ 
for($i = 1; $i <= $total_pages; $i++) 
{ 
    if(($page) == $i) 
    { 
     $pagination .= $i; 
    } 
    else 
    { 
     $pagination .= '< a href="index.php?page='.$i.'">'.$i.'</a>'; 
    } 
} 

/* Print NEXT link if there is one */ 
if($page < $total_pages) 
{ 
    $pagination .= '< a hr_ef="?page='.$next.'"> Next</a>'; 
} 

/* Now we have our pagination links in a variable($pagination) ready to 
    print to the page. I pu it in a variable because you may want to 
    show them at the top and bottom of the page */ 

/* Below is how you query the db for ONLY the results for the current page */ 
$result=mysql_query("select * from topics LIMIT $from, $max_results "); 

while ($i = mysql_fetch_array($result)) 
{ 
    echo $i['title'].'<br />'; 
} 
echo $pagination; 
?> 
+1

Sizin için işini yapmıyorsun, sorulara cevap istiyorum. –

+0

Sayfayı 10 kayıt gösterdikten sonra otomatik olarak nasıl taşımak istiyorsunuz? – Starx

+2

bildiğiniz için JS'ye ihtiyacınız var – Starx

cevap

25

10 sonraki sayfa

for($i = $page + 1; $i <= min($page + 11, $total_pages); $i++) 

yoksa ben sadece aynı orijinal sorunun yanıtını arayan ve edemedim oldum

for($i = max(1, $page - 5); $i <= min($page + 5, $total_pages); $i++) 
+0

sağladım, Gerçekten yardımcı oldu .. Hiç bu kadar hızlı olacağını düşünmemiştim! :) – arthur

+0

ahh .. bu şeyi kabul etmedi. sadece son soru .. Bunu yapmak için sürekli olarak sayfa sayısı (sayı) görüntülenir. - açtığımda, 1-6 arası sayfalar görüntüledim, her defasında bastığımda 1 ek - 1 ekleniyor - 1-7; 1-8; 1-9; ve sonuna kadar kapatarak teker teker kaldırır ... – arthur

+1

@arthur: ikincisini kullanın, sayfa 5'te çalışıyorsanız 1-10 gibi çalışır ve sonraki tıklatırsanız sayfa 6'ya gidersiniz. 11, sayfa 7'de 3-12 var. Ve yazının sol tarafındaki oy numarasının altındaki işareti tıklayarak soruyu kabul edebilirsiniz. – Svisstack

0

: Burada şimdiye kadar benim kodudur. Örneğin, 1'den başlamak istemezsiniz ve $i <= $total_pages numaralı telefonu kullanırken mutlaka döngü yapmak istemezsiniz.

Tek bir sayfa numaralandırma sayfalarını görüntülemek daha mantıklı olabilir: geçerli sayfayı, ardından dörtte birini ve sağdaki dört görüntüyü görüntülersiniz. Böyle bir şey:

for($i = $page_number - 4; $i <= $page_number + 4; $i++) { 

ama belli ki negatif sayıların göstermeden veya sayfalar sayısından daha fazla bağlantısı yer almıyorsa emin olmak için biraz daha fazla çaba gerekir.

+0

Bu çözüm bir araba, sayfa 4 veya daha az çalışıyorsanız ve son 4 sayfa – Svisstack

+0

dolayısıyla son paragraf doğru çalışmazsanız, işe yaramazsa - hızlı bir yanıt için teşekkürler sadece bir başlangıç ​​noktası –

0
$page = 3; 
$totalPages = 33; 
$count = 9; 
$startPage = max(1, $page - $count); 
$endPage = min($totalPages, $page + $count); 

if($page-1 > 0){ 
    echo '<a class="btn btn-default" href="/search-results?page="'.($page- 
1).'"><< Prev</a>'; 
} 

for($i = $startPage; $i < $endPage; $i++): if($i <= $totalPages): 

    echo '<a class="btn btn-<?=$i == $page || $i == 1 && $page == "" ? 
    'success' : 'primary';?>"style="margin-right:2px;" href="/search- 
    results?page="'.$i.'">'.$i.'</a>'; 

endif; endfor; 
if($page < $totalPages){ 
    echo '<a class="btn btn-default" href="/search-results?page="'. 
    ($page+1).'">Next >></a>'; 
} 
0

önümüzdeki 5 prev ve 5 isterseniz Bulmadım, işte bu yüzden geldim. Umarım başka biri yararlı bulur.

$totalPages = 20; 
$currentPage = 1; 

if ($totalPages <= 10) { 
    $start = 1; 
    $end = $totalPages; 
} else { 
    $start = max(1, ($currentPage - 4)); 
    $end = min($totalPages, ($currentPage + 5)); 

    if ($start === 1) { 
     $end = 10; 
    } elseif ($end === $totalPages) { 
     $start = ($totalPages - 9); 
    } 
} 

for ($page = $start; $page <= $end; $page++) { 
    echo '[' . $page . ']'; 
} 

Sonuçlar:

$currentPage = 1; // [1][2][3][4][5][6][7][8][9][10] 
$currentPage = 4; // [1][2][3][4][5][6][7][8][9][10] 
$currentPage = 10; // [6][7][8][9][10][11][12][13][14][15] 
$currentPage = 17; // [11][12][13][14][15][16][17][18][19][20] 
$currentPage = 20; // [11][12][13][14][15][16][17][18][19][20] 
İlgili konular