Codeigniter Pagination - Sayfalama

Codeigniter Pagination - Sayfalama

Daha önceki yazılarımda bahsetmiştim Codeigniter bir alet çantası diye. Alet çantasından kullanacağımız sayfalama(pagination) sınıfı. Çalışma mantığı her hangi bir siteye baktığınızda sayfa değiştirmek için altta ileri geri ve sayıların olduğu bir ufak ön yüz vardır. Bu sayede sayfa hızı düşmez ve daha kullanışlı bir hal alır. Örneğin blog sitelerinde, haber sitelerinde vs. Gelelim kullanım şekline.

En temel yapısı şu şekilde: 

Controller php dosyamızda fonksiyon içine yazacağımız alan:

$this->load->library('pagination');

$config['base_url'] = 'http://example.com/index.php/test/page/';
$config['total_rows'] = 200;//veri tabanında kaç satır var sorusunun cevabı. bu sayede sayfalama için gereken link yapısını oluşturuyor.
$config['per_page'] = 20;//her sayfada kaç data gösterilecekse onu yazıyoruz buraya

$this->pagination->initialize($config);

echo $this->pagination->create_links();//bu kısım sayfalamak için gereken sayı ve ileri geri tuşlarının temel halinin çıktısını geriyor

en temeli bu şekilde fakat bu şekilde bir işimize pek yaramaz. Temelden bir seviye daha ileriye gidelim.

Benim kullandığım şekil ve düzen ise şu şekilde:

Model PHP dosyasındaki fonksiyonlarım:

public function blogList($where = [], $select = '*', $limit, $pkCount)
{
//bu fonksiyon blog veritabanından limiti kullanarak listeyi çekiyor.
        return $this->db->select($select)
            ->join('blogCategories', 'blogCategories.id=blogContent.blogCategory', 'left')
            ->where($where)
            ->limit($limit, $pkCount)
            ->get('blogContent')
            ->result();
}

public function blogListCount($where = [], $select = '*')
{
//kaç satır var onu hesaplaması için yazılmış olan fonksiyon
        return $this->db->select($select)
            ->join('blogCategories', 'blogCategories.id=blogContent.blogCategory', 'left')
            ->where($where)
            ->count_all_results('blogContent');
}

Helper PHP dosyamda şu şekilde bir yardımcı yazdım:

if (!function_exists('paginationHelper')) {
    function paginationHelper($baseUrl, $totalRows, $perPage, $uriSegment, $usePageNumber = false, $attributes = [])
    {
        $ci = get_instance();
        $ci->load->library('pagination');
        $config = ['base_url' => $baseUrl,
                   'total_rows' => $totalRows,
                   'per_page' => $perPage,
                   'uri_segment' => $uriSegment,
                   'use_page_numbers' => $usePageNumber,
                   'first_link' => ' << First ',
                   'last_link' => ' Last >> ',
                   /*template for pagination*/
                   'attributes' => $attributes,
                   'full_tag_open' => "<ul class='pagination'>",
                   'full_tag_close' => "</ul>",
                   'num_tag_open' => '<li class=\'page-item\'>',
                   'num_tag_close' => '</li>',
                   'cur_tag_open' => "<li class='page-item'><a href='#' class='page-link active'>",
                   'cur_tag_close' => "</a></li>",
                   'next_tag_open' => "<li class='page-item'>",
                   'next_tag_close' => "</li>",
                   'prev_tag_open' => "<li class='page-item'>",
                   'prev_tag_close' => "</li>",
                   'first_tag_open' => "<li class='page-item'>",
                   'first_tag_close' => "</li>",
                   'last_tag_open' => "<li class='page-item'>",
                   'last_tag_close' => "</li>"];

        $ci->pagination->initialize($config);
        return $ci->pagination->create_links();
    }
}

contoller PHP dosyası:

public function blog()
    {
$perPage = 12;
$pageNumber=true;
$pageSegment = ($this -> uri -> segment(2)) ? $this -> uri -> segment(2) : 1;
        if ($pageNumber == true) //sayfa numarasına göre iş yapsın
            $pkCount = ($pageSegment - 1) * $perPage;
        else
            $pkCount = $pageSegment - 1;
        $links = paginationHelper(base_url('blog'),
        $this->main->blogListCount(['blogContent.lang' => $this->page->lang, 'blogContent.showcase' => 1, 'blogContent.isActive' => 1]),
        $perPage, 2, pageNumber, ['class' => 'page-link']);
$page=['blogLists' => $this->main->blogList(['blogContent.lang' => $this->page->lang, 
                 'blogContent.showcase' => 1, 'blogContent.isActive' => 1],
                     'blogContent.*,blogCategories.sefLink as categoryGroup,blogCategories.categoryName', $perPage, $pkCount),
       'recentBlogs' => $this->main->recentBlogs(['blogContent.lang' => $this->page->lang,'blogContent.isActive' => 1],
       'blogContent.*,blogCategories.categoryName'),
       'pageLinks' => $links]

$this->template->content->view('blogList', $page);
}

view dosyasını da artık kendi veri tabanınza göre düzenleyip yayınlamanız gerekir. sadece view de kullanacağınız link için gereken php kodu şu şekilde:

echo $pageLinks;

 

Codeigniter Pagination - Sayfalama - bertugfahriozer.com Codeigniter Pagination - Sayfalama - bertugfahriozer.com Codeigniter Pagination - Sayfalama - bertugfahriozer.com Codeigniter Pagination - Sayfalama - bertugfahriozer.com

Codeigniter Pagination - Sayfalama - bertugfahriozer.com

Codeigniter Pagination - Sayfalama - bertugfahriozer.com

Codeigniter Pagination - Sayfalama - bertugfahriozer.com

Codeigniter Pagination - Sayfalama - bertugfahriozer.com

Codeigniter Pagination - Sayfalama - bertugfahriozer.com
Codeigniter Pagination - Sayfalama - bertugfahriozer.com