CakePHP তে Pagination বা পৃষ্ঠা বিভাজন ব্যবহার করা হয় দীর্ঘ ডেটা তালিকা দেখানোর জন্য, যাতে ব্যবহারকারী সহজে তাদের প্রয়োজনীয় তথ্য দেখতে পারেন। ডিফল্টভাবে, CakePHP তে Pagination এর মাধ্যমে ডেটা খুব সহজে পৃষ্ঠায় বিভক্ত করা যায়, তবে কিছু ক্ষেত্রে কাস্টম পেজিনেশন লজিক প্রয়োগ করতে হয়, যেমন ডেটার উপর কাস্টম ফিল্টার, অর্ডারিং, বা সীমিত ফলাফল দেখানো।
CakePHP এর Paginator কম্পোনেন্ট ব্যবহার করে খুব সহজে Pagination পরিচালনা করা যায়, এবং কাস্টম Pagination লজিক তৈরি করার জন্য আপনার Controller এবং View তে কিছু কনফিগারেশন ও কোড লিখতে হয়।
CakePHP তে Pagination ব্যবহারের মৌলিক ধারণা
Pagination ব্যবহার করার জন্য প্রথমে PaginatorComponent কন্ট্রোলারে লোড করতে হয়, তারপর ডেটাবেস কোয়েরি থেকে Pagination রেসাল্ট পেতে হয়। সাধারণত, PaginatorComponent ব্যবহার করা হয় CakePHP তে পৃষ্ঠার বিভাজন পরিচালনা করতে।
১. Pagination কনফিগারেশন (Controller)
CakePHP তে Pagination কনফিগার করার জন্য আপনাকে Controller এ PaginatorComponent লোড করতে হবে।
namespace App\Controller;
use App\Controller\AppController;
class ArticlesController extends AppController
{
public function initialize(): void
{
parent::initialize();
$this->loadComponent('Paginator'); // Paginator কম্পোনেন্ট লোড
}
public function index()
{
// পৃষ্ঠায় প্রদর্শনের জন্য ডেটা ফেচ করা
$articles = $this->Paginator->paginate($this->Articles->find('all'));
// ডেটা ভিউতে পাঠানো
$this->set(compact('articles'));
}
}
এখানে:
- Paginator->paginate() মেথডটি ডেটাবেসের কোয়েরি থেকে পৃষ্ঠা বিভাজিত ডেটা ফেচ করে।
find('all')ব্যবহার করে সব অর্কিটেল গুলি পাওয়া যাচ্ছে।
কাস্টম Pagination লজিক
CakePHP তে Pagination কাস্টমাইজ করা সম্ভব এবং আপনি এই প্রক্রিয়াতে বিভিন্ন কন্ডিশন ব্যবহার করতে পারেন, যেমন কাস্টম অর্ডারিং, ফিল্টারিং, বা লিমিটেশন। নিচে কাস্টম Pagination লজিকের কয়েকটি উদাহরণ দেয়া হলো।
২. কাস্টম Pagination (অর্ডারিং এবং ফিল্টারিং)
ধরা যাক, আপনি ডেটার উপর কাস্টম অর্ডারিং এবং ফিল্টার প্রয়োগ করতে চান। আপনি Query Builder ব্যবহার করে Pagination রুলস কাস্টমাইজ করতে পারেন।
namespace App\Controller;
use App\Controller\AppController;
class ArticlesController extends AppController
{
public function initialize(): void
{
parent::initialize();
$this->loadComponent('Paginator');
}
public function index()
{
// কাস্টম ফিল্টারিং (যেমন 'category' ফিল্টার)
$conditions = [];
if ($this->request->getQuery('category')) {
$conditions['category'] = $this->request->getQuery('category');
}
// কাস্টম অর্ডারিং
$query = $this->Articles->find('all')
->where($conditions)
->order(['Articles.created' => 'desc']); // নবীনতম প্রথমে দেখানোর জন্য
// Pagination প্রয়োগ
$articles = $this->Paginator->paginate($query);
$this->set(compact('articles'));
}
}
এখানে:
- $this->request->getQuery('category') এর মাধ্যমে URL তে
categoryপ্যারামিটার চেক করা হয়েছে। - $query->order() মেথড ব্যবহার করে আপনি ডেটাকে অর্ডার করতে পারবেন, যেমন
createdফিল্ডের উপর ডেটা অর্ডার করা হয়েছে।
৩. কাস্টম Pagination (সীমিত ফলাফল এবং কাস্টম লিমিট)
আপনি ডেটার সংখ্যা সীমিত করতে চাইলে limit() এবং page() প্যারামিটার ব্যবহার করতে পারেন।
namespace App\Controller;
use App\Controller\AppController;
class ArticlesController extends AppController
{
public function initialize(): void
{
parent::initialize();
$this->loadComponent('Paginator');
}
public function index()
{
// কাস্টম লিমিট এবং পেজ সেট করা
$page = $this->request->getQuery('page', 1); // ডিফল্ট পৃষ্ঠা ১
$limit = 5; // প্রতি পৃষ্ঠায় ৫টি আর্টিকেল দেখানো হবে
// Pagination কোয়েরি
$query = $this->Articles->find('all')
->limit($limit) // প্রতি পৃষ্ঠায় ৫টি রেকর্ড
->page($page); // পৃষ্ঠা পরিবর্তন
// Pagination প্রয়োগ
$articles = $this->Paginator->paginate($query);
$this->set(compact('articles'));
}
}
এখানে:
- limit() এবং page() মেথড ব্যবহার করে কাস্টম লিমিট এবং পেজ সেট করা হয়েছে।
- পৃষ্ঠায় মোট ৫টি আর্টিকেল প্রদর্শিত হবে এবং প্রতিটি পৃষ্ঠায় ভিন্ন পৃষ্ঠার জন্য কাস্টম পেজ রেন্ডার করা হবে।
Pagination এর সাথে কাস্টম লিঙ্ক এবং URL তৈরি
CakePHP তে Pagination কম্পোনেন্ট ব্যবহার করার সময় পৃষ্ঠার লিঙ্কগুলি স্বয়ংক্রিয়ভাবে তৈরি হয়, তবে আপনি কাস্টম URL স্ট্রাকচার তৈরি করতে পারেন।
৪. কাস্টম পেজ লিঙ্ক
namespace App\Controller;
use App\Controller\AppController;
class ArticlesController extends AppController
{
public function initialize(): void
{
parent::initialize();
$this->loadComponent('Paginator');
}
public function index()
{
// Pagination কোয়েরি
$query = $this->Articles->find('all')
->order(['Articles.created' => 'desc']);
// Pagination প্রয়োগ
$articles = $this->Paginator->paginate($query);
// কাস্টম লিঙ্ক তৈরি করা
$this->set('pagination', $this->Paginator->links());
$this->set(compact('articles'));
}
}
এই কোডটি Pagination লিঙ্কগুলি ভিউতে পাঠায়, যা ব্যবহারকারীকে সহজে পৃষ্ঠার মধ্যে নেভিগেট করতে সাহায্য করবে।
ভিউতে Pagination রেন্ডার করা
Pagination এর লিঙ্কগুলি ভিউ ফাইলে PaginatorHelper ব্যবহার করে রেন্ডার করা হয়।
// src/Template/Articles/index.ctp
<h1>Articles</h1>
<table>
<thead>
<tr>
<th>Title</th>
<th>Created</th>
</tr>
</thead>
<tbody>
<?php foreach ($articles as $article): ?>
<tr>
<td><?= h($article->title) ?></td>
<td><?= h($article->created) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<!-- Pagination Links -->
<div class="pagination">
<?= $this->Paginator->prev('<< Previous') ?>
<?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next('Next >>') ?>
</div>
এখানে:
- $this->Paginator->prev() এবং $this->Paginator->next() মেথড ব্যবহার করে পূর্ববর্তী এবং পরবর্তী পৃষ্ঠার লিঙ্ক তৈরি করা হয়েছে।
- $this->Paginator->numbers() মেথডটি বর্তমান পৃষ্ঠার চারপাশের পৃষ্ঠা নম্বরগুলি রেন্ডার করবে।
CakePHP তে কাস্টম Pagination লজিক তৈরি করতে, আপনি Paginator কম্পোনেন্ট ব্যবহার করে ডেটার ফিল্টারিং, অর্ডারিং, এবং লিমিট কাস্টমাইজ করতে পারেন। কাস্টম Pagination এর মাধ্যমে আপনি ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে পারেন, যাতে তারা দীর্ঘ ডেটা তালিকাগুলির মধ্যে সহজে নেভিগেট করতে পারে। Paginator কম্পোনেন্ট এবং PaginatorHelper ব্যবহার করে আপনি কাস্টম লিঙ্ক এবং URL স্ট্রাকচার তৈরি করতে পারেন, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং ইউজার ইন্টারফেসকে উন্নত করবে।
Read more