CodeIgniter এর Pagination এবং Search Functionality

Web Development - কোডইগনাইটার (Codeigniter) -

CodeIgniter-এ Pagination এবং Search Functionality একত্রে ব্যবহার করা হয় যখন বড় ডেটা লিস্ট প্রদর্শন করতে হয়। Pagination ডেটাকে ছোট ছোট অংশে বিভক্ত করে দেখায়, আর Search Functionality ব্যবহারকারীদের নির্দিষ্ট ডেটা খুঁজে পেতে সাহায্য করে।


Pagination সেটআপ

Pagination পরিচালনার জন্য CodeIgniter একটি বিল্ট-ইন লাইব্রেরি সরবরাহ করে। এটি ডেটাকে পৃষ্ঠা আকারে বিভক্ত করতে সাহায্য করে।

১. Controller-এ Pagination যুক্ত করা

Controller-এ Pagination ক্লাস ব্যবহার করে Pagination সেটআপ করুন।

<?php
namespace App\Controllers;

use CodeIgniter\Controller;
use App\Models\ProductModel;

class Products extends Controller {
    public function index() {
        $productModel = new ProductModel();

        // Pagination কনফিগারেশন
        $pager = \Config\Services::pager();
        $perPage = 5;

        $data = [
            'products' => $productModel->paginate($perPage),
            'pager' => $productModel->pager
        ];

        return view('product_list', $data);
    }
}

২. Model-এ Pagination প্রস্তুত

Model ফাইল তৈরি করুন এবং paginate() Method ব্যবহার করুন।

<?php
namespace App\Models;

use CodeIgniter\Model;

class ProductModel extends Model {
    protected $table = 'products'; // আপনার টেবিলের নাম
    protected $primaryKey = 'id';
}

৩. View-তে Pagination লিঙ্ক প্রদর্শন

Pagination লিঙ্ক প্রদর্শন করতে নিচের কোড ব্যবহার করুন:

<?php foreach ($products as $product): ?>
    <p><?= $product['name']; ?> - $<?= $product['price']; ?></p>
<?php endforeach; ?>

<?= $pager->links(); ?>

Search Functionality যুক্ত করা

১. Controller-এ Search Logic

Pagination এবং Search Functionality একত্রিত করতে Query Filter যোগ করুন।

<?php
namespace App\Controllers;

use CodeIgniter\Controller;
use App\Models\ProductModel;

class Products extends Controller {
    public function index() {
        $productModel = new ProductModel();

        $search = $this->request->getGet('search');
        $perPage = 5;

        if ($search) {
            $productModel->like('name', $search);
        }

        $data = [
            'products' => $productModel->paginate($perPage),
            'pager' => $productModel->pager,
            'search' => $search
        ];

        return view('product_list', $data);
    }
}

২. View-এ Search Form এবং ফলাফল

<form action="<?= base_url('products'); ?>" method="get">
    <input type="text" name="search" value="<?= isset($search) ? $search : '' ?>" placeholder="Search products">
    <button type="submit">Search</button>
</form>

<?php if (!empty($products)): ?>
    <?php foreach ($products as $product): ?>
        <p><?= $product['name']; ?> - $<?= $product['price']; ?></p>
    <?php endforeach; ?>

    <?= $pager->links(); ?>
<?php else: ?>
    <p>No products found.</p>
<?php endif; ?>

সম্পূর্ণ উদাহরণ

Controller:

<?php
namespace App\Controllers;

use CodeIgniter\Controller;
use App\Models\ProductModel;

class Products extends Controller {
    public function index() {
        $productModel = new ProductModel();
        $search = $this->request->getGet('search');
        $perPage = 5;

        if ($search) {
            $productModel->like('name', $search);
        }

        $data = [
            'products' => $productModel->paginate($perPage),
            'pager' => $productModel->pager,
            'search' => $search
        ];

        return view('product_list', $data);
    }
}

View:

<!DOCTYPE html>
<html>
<head>
    <title>Product List</title>
</head>
<body>
    <h1>Product List</h1>

    <!-- Search Form -->
    <form action="<?= base_url('products'); ?>" method="get">
        <input type="text" name="search" value="<?= isset($search) ? $search : '' ?>" placeholder="Search products">
        <button type="submit">Search</button>
    </form>

    <!-- Product List -->
    <?php if (!empty($products)): ?>
        <?php foreach ($products as $product): ?>
            <p><?= $product['name']; ?> - $<?= $product['price']; ?></p>
        <?php endforeach; ?>

        <!-- Pagination Links -->
        <?= $pager->links(); ?>
    <?php else: ?>
        <p>No products found.</p>
    <?php endif; ?>
</body>
</html>

Database Table Structure (Example):

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    price DECIMAL(10,2) NOT NULL
);

Pagination কাস্টমাইজেশন

Pagination লিঙ্ক কাস্টমাইজ করতে app/Config/Pager.php ফাইল ব্যবহার করুন। উদাহরণ:

public $templates = [
    'default_full'   => 'CodeIgniter\Pager\Views\default_full',
    'default_simple' => 'CodeIgniter\Pager\Views\default_simple',
    'custom_pagination' => 'App\Views\custom_pagination'
];

সারসংক্ষেপ

CodeIgniter-এ Pagination এবং Search Functionality একত্রে ব্যবহার করা গেলে বড় ডেটাবেস পরিচালনা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করা যায়। Pagination ডেটাকে সংগঠিতভাবে দেখায়, আর Search ব্যবহারকারীকে প্রাসঙ্গিক ডেটা খুঁজে পেতে সাহায্য করে।

Content added By

Pagination Class ব্যবহার করে Pagination তৈরি করা

CodeIgniter-এর Pagination Class ব্যবহার করে বড় ডেটাসেটকে পৃষ্ঠাভিত্তিক বিভক্ত করে প্রদর্শন করা যায়। এটি ডেটাবেস থেকে রেকর্ড ফিল্টার এবং ডায়নামিক পেজ লিংক তৈরিতে সহায়ক।


Pagination তৈরির ধাপসমূহ

১. Controller তৈরি

Controller-এ Pagination সেটআপ এবং ডেটা লোড করার কোড লিখতে হবে।

উদাহরণ:
<?php

namespace App\Controllers;

use App\Models\ProductModel;

class ProductController extends BaseController
{
    public function index()
    {
        $productModel = new ProductModel();

        // Pagination কনফিগারেশন
        $data['products'] = $productModel->paginate(10); // প্রতি পৃষ্ঠায় ১০টি রেকর্ড
        $data['pager'] = $productModel->pager; // Pagination লিংক তৈরির জন্য

        return view('product_list', $data);
    }
}

২. View তৈরি

Pagination লিংক এবং ডেটা প্রদর্শনের জন্য View ফাইল তৈরি করতে হবে।

উদাহরণ:

app/Views/product_list.php ফাইল:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Product List</title>
</head>
<body>
    <h1>Product List</h1>

    <ul>
        <?php if (!empty($products)): ?>
            <?php foreach ($products as $product): ?>
                <li><?= esc($product['name']); ?> - <?= esc($product['price']); ?></li>
            <?php endforeach; ?>
        <?php else: ?>
            <li>No products found.</li>
        <?php endif; ?>
    </ul>

    <!-- Pagination লিংক -->
    <?= $pager->links(); ?>
</body>
</html>

৩. Model তৈরি

Pagination পরিচালনার জন্য Model তৈরি করতে হবে।

উদাহরণ:

app/Models/ProductModel.php ফাইল:

<?php

namespace App\Models;

use CodeIgniter\Model;

class ProductModel extends Model
{
    protected $table = 'products';
    protected $primaryKey = 'id';
    protected $allowedFields = ['name', 'price'];
}

Pagination কনফিগারেশন (ঐচ্ছিক)

Pagination-এর চেহারা এবং কার্যকারিতা কাস্টমাইজ করতে app/Config/Pager.php ফাইলটি ব্যবহার করতে পারেন।

উদাহরণ: কনফিগারেশন পরিবর্তন

public $defaultFull = [
    'full_tag_open'  => '<nav><ul class="pagination">',
    'full_tag_close' => '</ul></nav>',
    'first_tag_open' => '<li>',
    'first_tag_close'=> '</li>',
    'last_tag_open'  => '<li>',
    'last_tag_close' => '</li>',
    'next_tag_open'  => '<li>',
    'next_tag_close' => '</li>',
    'prev_tag_open'  => '<li>',
    'prev_tag_close' => '</li>',
    'cur_tag_open'   => '<li class="active"><a href="#">',
    'cur_tag_close'  => '</a></li>',
    'num_tag_open'   => '<li>',
    'num_tag_close'  => '</li>',
];

Custom Pagination লিংক

Pagination লিংক কাস্টমাইজ করতে $pager->makeLinks() ব্যবহার করতে পারেন।

উদাহরণ:

<?= $pager->makeLinks($currentPage, $perPage, $total, 'bootstrap_full'); ?>

Bootstrap দিয়ে Pagination Styling

Bootstrap ক্লাস ব্যবহার করে Pagination লিংক স্টাইলিং করা যায়।

উদাহরণ:

public $defaultFull = [
    'full_tag_open'  => '<ul class="pagination">',
    'full_tag_close' => '</ul>',
    'first_tag_open' => '<li class="page-item">',
    'first_tag_close'=> '</li>',
    'last_tag_open'  => '<li class="page-item">',
    'last_tag_close' => '</li>',
    'next_tag_open'  => '<li class="page-item">',
    'next_tag_close' => '</li>',
    'prev_tag_open'  => '<li class="page-item">',
    'prev_tag_close' => '</li>',
    'cur_tag_open'   => '<li class="page-item active"><a class="page-link" href="#">',
    'cur_tag_close'  => '</a></li>',
    'num_tag_open'   => '<li class="page-item">',
    'num_tag_close'  => '</li>',
    'attributes'     => ['class' => 'page-link'],
];

সম্পূর্ণ উদাহরণ

Controller:

public function index()
{
    $productModel = new ProductModel();
    $data['products'] = $productModel->paginate(10);
    $data['pager'] = $productModel->pager;

    return view('product_list', $data);
}

View:

<ul>
    <?php foreach ($products as $product): ?>
        <li><?= esc($product['name']); ?> - <?= esc($product['price']); ?></li>
    <?php endforeach; ?>
</ul>
<?= $pager->links(); ?>

Model:

<?php

namespace App\Models;

use CodeIgniter\Model;

class ProductModel extends Model
{
    protected $table = 'products';
    protected $primaryKey = 'id';
    protected $allowedFields = ['name', 'price'];
}

সারাংশ

CodeIgniter-এ Pagination Class ব্যবহার করে বড় ডেটাসেটকে পৃষ্ঠাভিত্তিক বিভক্ত করা সহজ। Default Pagination, Custom Pagination, এবং Bootstrap Styling ব্যবহার করে এটি আরও কার্যকর ও আকর্ষণীয় করা যায়।

Content added By

Search Functionality এর মাধ্যমে ডেটা ফিল্টার করা

CodeIgniter-এ Search Functionality ব্যবহার করে ডেটা ফিল্টার করা খুবই সহজ। এটি সাধারণত ব্যবহারকারীদের নির্দিষ্ট ডেটা খুঁজে পেতে সাহায্য করে। উদাহরণস্বরূপ, একটি টেবিল বা তালিকা থেকে ডেটা ফিল্টার করা।


Search Functionality ইমপ্লিমেন্ট করার ধাপ

১. ডাটাবেস সেটআপ

ডাটাবেসে একটি টেবিল তৈরি করুন। উদাহরণস্বরূপ, একটি products টেবিল:

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    category VARCHAR(255),
    price DECIMAL(10, 2)
);

ডাটাবেসে কিছু ডেটা যোগ করুন:

INSERT INTO products (name, category, price) VALUES
('Laptop', 'Electronics', 50000),
('Smartphone', 'Electronics', 20000),
('Table', 'Furniture', 1500),
('Chair', 'Furniture', 800);

২. Model তৈরি

app/Models/ProductModel.php ফাইল তৈরি করুন:

<?php

namespace App\Models;

use CodeIgniter\Model;

class ProductModel extends Model
{
    protected $table = 'products';
    protected $allowedFields = ['name', 'category', 'price'];

    // ডেটা সার্চ করার মেথড
    public function searchProducts($keyword)
    {
        return $this->like('name', $keyword)
                    ->orLike('category', $keyword)
                    ->findAll();
    }
}

৩. Controller তৈরি

app/Controllers/Product.php ফাইল তৈরি করুন:

<?php

namespace App\Controllers;

use App\Models\ProductModel;

class Product extends BaseController
{
    public function index()
    {
        $productModel = new ProductModel();

        // সার্চ কিওয়ার্ড রিসিভ করা
        $keyword = $this->request->getVar('q');

        // সার্চ কন্ডিশন অনুযায়ী ডেটা ফিল্টার করা
        if ($keyword) {
            $products = $productModel->searchProducts($keyword);
        } else {
            $products = $productModel->findAll();
        }

        $data = [
            'products' => $products,
            'keyword' => $keyword
        ];

        return view('product_list', $data);
    }
}

৪. View তৈরি

app/Views/product_list.php ফাইল তৈরি করুন:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Product List</title>
</head>
<body>
    <h1>Product List</h1>

    <!-- সার্চ ফর্ম -->
    <form method="get" action="/product">
        <input type="text" name="q" value="<?php echo $keyword; ?>" placeholder="Search...">
        <button type="submit">Search</button>
    </form>

    <!-- প্রোডাক্ট তালিকা -->
    <ul>
        <?php if ($products): ?>
            <?php foreach ($products as $product): ?>
                <li>
                    <?php echo $product['name']; ?> - <?php echo $product['category']; ?> - <?php echo $product['price']; ?> BDT
                </li>
            <?php endforeach; ?>
        <?php else: ?>
            <li>No products found.</li>
        <?php endif; ?>
    </ul>
</body>
</html>

৫. Route সেট করা

app/Config/Routes.php ফাইলে Route যুক্ত করুন:

$routes->get('product', 'Product::index');

ফিচার পরীক্ষা

  1. ব্রাউজারে যান এবং http://localhost/your_project_name/product URL অ্যাক্সেস করুন।
  2. সার্চ বক্সে একটি কীওয়ার্ড লিখুন (যেমন: Electronics বা Table) এবং ফলাফল ফিল্টার হওয়া দেখুন।

Query Explanation

Model এর searchProducts মেথডে like() এবং orLike() ব্যবহার করা হয়েছে:

  • like('field', 'value'): একটি ফিল্ডের নির্দিষ্ট মান অনুসারে ডেটা ফিল্টার করে।
  • orLike('field', 'value'): OR কন্ডিশনের মাধ্যমে একাধিক ফিল্ড ফিল্টার করে।
return $this->like('name', $keyword)
            ->orLike('category', $keyword)
            ->findAll();

সুবিধা

  1. সহজ এবং দ্রুত: CodeIgniter-এর Query Builder দিয়ে সহজেই সার্চ ইমপ্লিমেন্ট করা যায়।
  2. ডাইনামিক ফিল্টারিং: একাধিক কলামে সার্চ ফিল্টার প্রয়োগ করা যায়।
  3. রিসপন্সিভ: বড় ডেটাবেসে দ্রুত ফলাফল রিটার্ন করে।

CodeIgniter-এ Search Functionality ইমপ্লিমেন্ট করে আপনি ব্যবহারকারীদের জন্য একটি কার্যকর ডেটা ফিল্টারিং সিস্টেম তৈরি করতে পারবেন। এটি আপনার অ্যাপ্লিকেশনকে আরও ইন্টারঅ্যাকটিভ এবং ইউজার-ফ্রেন্ডলি করে তুলবে।

Content added By

Pagination এবং Search এর সাথে Complex Queries

CodeIgniter এ Pagination এবং Search ইমপ্লিমেন্ট করা সহজ। Pagination ব্যবহারকারীদের বড় ডেটাসেট থেকে নির্দিষ্ট সংখ্যক ডেটা দেখানোর সুযোগ দেয়। Pagination এবং Search এর সাথে Complex Queries যোগ করে উন্নত ডেটা ফিল্টারিং এবং প্রদর্শন করা যায়।


Pagination সেটআপ

CodeIgniter এর Pagination লাইব্রেরি ব্যবহার করে সহজেই Pagination ইমপ্লিমেন্ট করা যায়।

ডাটাবেস টেবিল উদাহরণ

ধরুন, products নামে একটি ডাটাবেস টেবিল রয়েছে:

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    description TEXT,
    price DECIMAL(10, 2) NOT NULL
);

Pagination এর ধাপসমূহ

১. Controller তৈরি

Controller ফাইলে Pagination সেটআপ করুন:

namespace App\Controllers;

use App\Models\ProductModel;

class ProductController extends BaseController
{
    public function index()
    {
        $model = new ProductModel();

        // পেজিনেশন সেটআপ
        $perPage = 10; // প্রতি পৃষ্ঠায় ডেটা সংখ্যা
        $page = $this->request->getVar('page') ?? 1; // বর্তমান পৃষ্ঠা

        $data['products'] = $model
            ->paginate($perPage, 'group1', $page); // পেজিনেশন

        $data['pager'] = $model->pager; // পেজার লোড

        return view('product_list', $data);
    }
}

২. View ফাইলে Pagination লিঙ্ক দেখানো

Pagination লিঙ্ক দেখানোর জন্য View ফাইলে নিচের কোড যোগ করুন:

<h1>Product List</h1>
<ul>
    <?php foreach ($products as $product): ?>
        <li><?= $product['name']; ?> - $<?= $product['price']; ?></li>
    <?php endforeach; ?>
</ul>

<!-- পেজিনেশন লিঙ্ক -->
<?= $pager->links('group1', 'default_full') ?>

Search এর সাথে Complex Queries

Pagination এর সাথে Search ফিচার যুক্ত করার জন্য Complex Query ব্যবহার করতে পারেন।

১. Controller এ Search যুক্ত করা

Controller এ Search ফিল্টারিং যোগ করুন:

public function index()
{
    $model = new ProductModel();

    $search = $this->request->getVar('search'); // সার্চ কিওয়ার্ড
    $perPage = 10;
    $page = $this->request->getVar('page') ?? 1;

    // সার্চ কন্ডিশন
    $builder = $model->builder();
    if ($search) {
        $builder->like('name', $search);
        $builder->orLike('description', $search);
    }

    // পেজিনেশন
    $data['products'] = $builder->paginate($perPage, 'group1', $page);
    $data['pager'] = $builder->pager;
    $data['search'] = $search;

    return view('product_list', $data);
}

২. View ফাইলে Search ফর্ম যোগ করা

Search ফর্ম এবং Pagination লিঙ্ক প্রদর্শনের জন্য View ফাইলে কোড যোগ করুন:

<h1>Product List</h1>

<!-- সার্চ ফর্ম -->
<form method="get" action="/products">
    <input type="text" name="search" value="<?= $search ?? ''; ?>" placeholder="Search products">
    <button type="submit">Search</button>
</form>

<ul>
    <?php foreach ($products as $product): ?>
        <li><?= $product['name']; ?> - $<?= $product['price']; ?></li>
    <?php endforeach; ?>
</ul>

<!-- পেজিনেশন লিঙ্ক -->
<?= $pager->links('group1', 'default_full') ?>

Complex Queries

Pagination এবং Search এর সাথে Complex Query যুক্ত করা:

public function index()
{
    $model = new ProductModel();

    $search = $this->request->getVar('search');
    $priceMin = $this->request->getVar('price_min');
    $priceMax = $this->request->getVar('price_max');
    $perPage = 10;
    $page = $this->request->getVar('page') ?? 1;

    // Complex Query
    $builder = $model->builder();
    if ($search) {
        $builder->like('name', $search);
        $builder->orLike('description', $search);
    }
    if ($priceMin) {
        $builder->where('price >=', $priceMin);
    }
    if ($priceMax) {
        $builder->where('price <=', $priceMax);
    }

    $data['products'] = $builder->paginate($perPage, 'group1', $page);
    $data['pager'] = $builder->pager;
    $data['search'] = $search;
    $data['price_min'] = $priceMin;
    $data['price_max'] = $priceMax;

    return view('product_list', $data);
}

View ফাইলে Complex Query এর ফর্ম

<h1>Product List</h1>

<!-- Complex Search Form -->
<form method="get" action="/products">
    <input type="text" name="search" value="<?= $search ?? ''; ?>" placeholder="Search products">
    <input type="number" name="price_min" value="<?= $price_min ?? ''; ?>" placeholder="Min Price">
    <input type="number" name="price_max" value="<?= $price_max ?? ''; ?>" placeholder="Max Price">
    <button type="submit">Filter</button>
</form>

<ul>
    <?php foreach ($products as $product): ?>
        <li><?= $product['name']; ?> - $<?= $product['price']; ?></li>
    <?php endforeach; ?>
</ul>

<!-- Pagination Links -->
<?= $pager->links('group1', 'default_full') ?>

Pagination, Search এবং Complex Queries এর সুবিধা

  1. ডেটা ফিল্টারিং: সার্চ এবং ফিল্টারিংয়ের মাধ্যমে ব্যবহারকারীকে প্রাসঙ্গিক ডেটা প্রদর্শন।
  2. ডেটা পরিচালনা সহজ: বড় ডেটাসেট Pagination এর মাধ্যমে সহজেই পরিচালনা করা যায়।
  3. উন্নত ব্যবহারকারীর অভিজ্ঞতা: দ্রুত এবং নির্ভুল ডেটা রিট্রিভাল ব্যবহারকারীদের অভিজ্ঞতা উন্নত করে।

CodeIgniter এর Pagination এবং Search ফিচার Complex Queries এর সাথে ব্যবহার করে উন্নত ডেটা ম্যানেজমেন্ট সিস্টেম তৈরি করা যায়। উপরের উদাহরণ অনুসরণ করে সহজেই এই ফিচারগুলো আপনার অ্যাপ্লিকেশনে যুক্ত করতে পারবেন।

Content added By
Promotion