Ajax এর মাধ্যমে Dynamic Pagination তৈরি

Web Development - অ্যাজাক্স (Ajax) - Ajax এর মাধ্যমে Pagination তৈরি করা (Creating Pagination with Ajax) |
3
3

Ajax ব্যবহার করে Dynamic Pagination তৈরি করা একটি আধুনিক পদ্ধতি, যা বড় ডাটাসেটকে পেজে ডায়নামিক্যালি লোড করে দেখায়। এই পদ্ধতিতে, Ajax রিকোয়েস্টের মাধ্যমে ডাটাবেস থেকে ডেটা ফেচ করা হয় এবং ব্যবহারকারী যখন পেজ নেভিগেট করে, তখন নতুন ডেটা লোড হয় পেজ রিফ্রেশ ছাড়াই। এটি ব্যবহারকারীর অভিজ্ঞতাকে আরও উন্নত করে এবং ওয়েব অ্যাপ্লিকেশনকে আরও ইন্টারেক্টিভ করে তোলে।

উদাহরণ: Ajax এর মাধ্যমে Dynamic Pagination

১. HTML এবং JavaScript (index.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dynamic Pagination Example</title>
    <style>
        /* Pagination স্টাইল */
        .pagination {
            margin-top: 20px;
        }
        .pagination button {
            margin: 2px;
            padding: 5px 10px;
        }
    </style>
</head>
<body>
    <h1>Employee List</h1>
    <table id="employee-table" border="1" style="width: 100%; margin-top: 20px;">
        <thead>
            <tr>
                <th>Name</th>
                <th>Email</th>
                <th>Department</th>
            </tr>
        </thead>
        <tbody>
            <!-- ডেটা এখানে ডায়নামিক্যালি যোগ করা হবে -->
        </tbody>
    </table>

    <div class="pagination" id="pagination">
        <!-- পেজিনেশন বাটন এখানে ডায়নামিক্যালি যোগ করা হবে -->
    </div>

    <script>
        // বর্তমান পেজ ট্র্যাক করার জন্য ভ্যারিয়েবল
        let currentPage = 1;
        const rowsPerPage = 5;

        // পেজ লোড হলে ডেটা লোড করা
        document.addEventListener('DOMContentLoaded', function() {
            fetchData(currentPage);
        });

        // Ajax এর মাধ্যমে ডেটা ফেচ করার ফাংশন
        function fetchData(page) {
            var xhr = new XMLHttpRequest();
            xhr.open("GET", "fetch_employees.php?page=" + page + "&rowsPerPage=" + rowsPerPage, true);

            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    var response = JSON.parse(xhr.responseText);
                    renderTable(response.data);
                    renderPagination(response.totalPages, page);
                }
            };

            xhr.send();
        }

        // টেবিল রেন্ডার করার ফাংশন
        function renderTable(data) {
            var tbody = document.querySelector("#employee-table tbody");
            tbody.innerHTML = ""; // টেবিল ক্লিয়ার করা

            data.forEach(function(employee) {
                var row = document.createElement("tr");
                row.innerHTML = `<td>${employee.name}</td>
                                 <td>${employee.email}</td>
                                 <td>${employee.department}</td>`;
                tbody.appendChild(row);
            });
        }

        // পেজিনেশন রেন্ডার করার ফাংশন
        function renderPagination(totalPages, currentPage) {
            var pagination = document.getElementById('pagination');
            pagination.innerHTML = "";

            for (let i = 1; i <= totalPages; i++) {
                var button = document.createElement("button");
                button.textContent = i;
                if (i === currentPage) {
                    button.disabled = true;
                }
                button.onclick = function() {
                    fetchData(i);
                };
                pagination.appendChild(button);
            }
        }
    </script>
</body>
</html>

২. PHP স্ক্রিপ্ট (fetch_employees.php)

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "company_db";

$conn = new mysqli($servername, $username, $password, $dbname);

// কানেকশন চেক করা
if ($conn->connect_error) {
    http_response_code(500);
    echo json_encode(["error" => "Database connection failed."]);
    exit();
}

// ইনপুট প্যারামিটার সংগ্রহ করা
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$rowsPerPage = isset($_GET['rowsPerPage']) ? intval($_GET['rowsPerPage']) : 5;
$offset = ($page - 1) * $rowsPerPage;

// মোট রেকর্ডের সংখ্যা পাওয়া
$totalResult = $conn->query("SELECT COUNT(*) as total FROM employees");
$totalRows = $totalResult->fetch_assoc()['total'];
$totalPages = ceil($totalRows / $rowsPerPage);

// SQL কুয়েরি তৈরি করা
$sql = "SELECT name, email, department FROM employees LIMIT ?, ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii", $offset, $rowsPerPage);
$stmt->execute();
$result = $stmt->get_result();

// ডেটা অ্যারে তৈরি করা
$employees = [];
while ($row = $result->fetch_assoc()) {
    $employees[] = $row;
}

// JSON রেসপন্স তৈরি করা
header('Content-Type: application/json');
echo json_encode([
    "data" => $employees,
    "totalPages" => $totalPages
]);

$stmt->close();
$conn->close();
?>

ডাটাবেস সেটআপ:

ডাটাবেসের নাম company_db এবং টেবিলের নাম employees। টেবিলের একটি সিম্পল স্ট্রাকচার:

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL,
    department VARCHAR(100) NOT NULL
);

প্রোগ্রামটি কিভাবে কাজ করে:

  1. HTML এবং JavaScript:
    • পেজ লোড হলে fetchData() ফাংশন কল হয় যা Ajax রিকোয়েস্ট পাঠায়।
    • fetchData() রিকোয়েস্ট পাঠানোর সময় বর্তমান পেজ নম্বর এবং প্রতি পেজে কতটি রেকর্ড (rows) দেখাতে হবে সেটি প্যারামিটার হিসেবে পাঠায়।
    • রেসপন্স সফল হলে, JSON ডেটা প্রসেস করে renderTable() এবং renderPagination() ফাংশন কল হয়।
  2. PHP স্ক্রিপ্ট:
    • PHP স্ক্রিপ্ট ইনপুট প্যারামিটার (পেজ এবং rowsPerPage) গ্রহণ করে এবং ডাটাবেসে কুয়েরি চালিয়ে ডেটা রিটার্ন করে।
    • PHP JSON ফরম্যাটে রেসপন্স রিটার্ন করে যাতে JavaScript এটি প্রসেস করতে পারে।
  3. Pagination এবং Table Rendering:
    • renderTable() ফাংশন Ajax থেকে প্রাপ্ত ডেটা ব্যবহার করে টেবিল আপডেট করে।
    • renderPagination() ফাংশন টোটাল পেজ সংখ্যা এবং বর্তমান পেজ অনুযায়ী পেজিনেশন বাটন তৈরি করে।

সুবিধা:

  • Ajax এর মাধ্যমে Dynamic Pagination: পেজ রিফ্রেশ ছাড়াই ব্যবহারকারী পেজ নেভিগেট করতে পারে, যা ব্যবহারকারীর অভিজ্ঞতাকে উন্নত করে।
  • ডায়নামিক ডেটা আপডেট: JavaScript এর মাধ্যমে Ajax রিকোয়েস্টের মাধ্যমে ডেটা এবং পেজিনেশন ডায়নামিক্যালি আপডেট হয়।
  • সিম্পল এবং কার্যকর পদ্ধতি: JavaScript, PHP, এবং MySQL ব্যবহার করে সহজে Dynamic Pagination ইমপ্লিমেন্ট করা যায়।
Promotion