Bagaimana untuk Mengoptimumkan Algoritma Penomboran untuk Pengalaman Pengguna yang Dipertingkatkan?

Mary-Kate Olsen
Lepaskan: 2024-10-17 16:14:02
asal
821 orang telah melayarinya

How to Optimize Pagination Algorithms for Enhanced User Experience?

Algoritma Penomboran Pintar

Masalah

Penomboran standard menghasilkan senarai halaman yang kelihatan tidak berkesudahan, tetapi proses ini boleh dioptimumkan dengan memaparkan hanya khusus halaman bersebelahan dengan halaman semasa. Ini menghalang senarai halaman yang terlalu panjang, menjadikannya lebih mudah untuk pengguna menavigasi sistem penomboran.

Penyelesaian

Satu kaedah untuk melaksanakan strategi penomboran "pintar" ini ialah mengubah suai kod penomboran sedia ada untuk dipotong senarai halaman yang dipaparkan sambil mengekalkan kefungsian. Algoritma yang diubah suai hendaklah menggabungkan langkah berikut:

  • Tetapkan bilangan halaman bersebelahan (bersebelahan) untuk ditunjukkan pada setiap sisi halaman semasa.
  • Kira item pertama yang akan dipaparkan pada halaman semasa menggunakan mula = (halaman - 1) * had.
  • Tentukan sama ada bilangan halaman cukup kecil (halaman terakhir < 7 (bersebelahan * 2)) untuk memaparkan semua halaman berturut-turut. Jika ya, gelung setiap halaman dan paparkannya.
  • Jika bilangan halaman melebihi ambang, analisa kedudukan halaman semasa dalam sistem penomboran:

    • Jika halaman semasa hampir dengan permulaan (halaman < 1 (bersebelahan * 2)), paparkan beberapa halaman pertama, diikuti dengan elipsis (...) untuk menunjukkan halaman yang ditinggalkan, dan kemudian beberapa halaman terakhir.
    • Jika halaman semasa berada di tengah (halaman terakhir - (bersebelahan * 2) > halaman > (bersebelahan * 2)), paparkan beberapa halaman pertama, elipsis, beberapa halaman di sekeliling halaman semasa, elipsis lain, dan kemudian beberapa halaman terakhir.
    • Jika halaman semasa hampir ke penghujung (halaman > $lastpage - (2 (bersebelahan * 2))), paparkan beberapa halaman pertama, elipsis, beberapa halaman di sekeliling halaman semasa, dan kemudian beberapa halaman terakhir.
  • Jana pautan penomboran berdasarkan algoritma yang diubah suai.
  • Paparkan data yang diambil untuk halaman semasa.
  • Ulang penjanaan penomboran dan paparan data untuk seberapa banyak halaman yang diperlukan.
  • Kod Contoh

    Berikut ialah contoh pelaksanaan PHP algoritma penomboran pintar:

    <code class="php">// Set adjacent page count
    $adjacents = 3;
    
    // Initialize page number and items per page
    $page = (int)$_GET["page"] ?? 1;
    $limit = 5;
    
    // Calculate start item
    $start = ($page - 1) * $limit;
    
    // Fetch data
    $data = $db->query("SELECT * FROM mytable LIMIT $start, $limit")->fetchAll();
    
    // Calculate total pages
    $total_pages = count($data);
    
    // Set up page variables
    $prev = $page - 1;
    $next = $page + 1;
    $lastpage = ceil($total_pages / $limit);
    $lpm1 = $lastpage - 1;
    
    // Generate pagination HTML
    $pagination = "<nav aria-label='page navigation'><ul class='pagination'>";
    
    // Previous button
    $disabled = ($page === 1) ? "disabled" : "";
    $pagination .= "<li class='page-item $disabled'><a class='page-link' href='?page=$prev'>« previous</a></li>";
    
    // Pages
    // Too few pages to hide any
    if ($lastpage < 7 + ($adjacents * 2)) {
        for ($i = 1; $i <= $lastpage; $i++) {
            $active = ($i === $page) ? "active" : "";
            $pagination .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
        }
    } elseif ($lastpage > 5 + ($adjacents * 2)) {
        // Close to beginning
        if ($page < 1 + ($adjacents * 2)) {
            for ($i = 1; $i < 4 + ($adjacents * 2); $i++) {
                $active = ($i === $page) ? "active" : "";
                $pagination .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
            }
            $pagination .= "<li class='page-item disabled'><span class='page-link'>...</span></li>";
            $pagination .= $last_pages;
        } elseif ($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) {
            // In middle
            $pagination .= $first_pages;
            $pagination .= "<li class='page-item disabled'><span class='page-link'>...</span></li>";
            for ($i = $page - $adjacents; $i <= $page + $adjacents; $i++) {
                $active = ($i === $page) ? "active" : "";
                $pagination .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
            }
            $pagination .= "<li class='page-item disabled'><span class='page-link'>...</span></li>";
            $pagination .= $last_pages;
        } else {
            // Close to end
            $pagination .= $first_pages;
            $pagination .= "<li class='page-item disabled'><span class='page-link'>...</span></li>";
            for ($i = $lastpage - (2 + ($adjacents * 2)); $i <= $lastpage; $i++) {
                $active = ($i === $page) ? "active" : "";
                $pagination .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
            }
        }
    }
    
    // Next button
    $disabled = ($page === $lastpage) ? "disabled" : "";
    $pagination .= "<li class='page-item $disabled'><a class='page-link' href='?page=$next'>next »</a></li>";
    
    $pagination .= "</ul></nav>";
    
    if ($lastpage <= 1) {
        $pagination = "";
    }
    
    echo $pagination;
    foreach ($data as $row) {
        // Display your data
    }
    echo $pagination;</code>
    Salin selepas log masuk

    Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Algoritma Penomboran untuk Pengalaman Pengguna yang Dipertingkatkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!