Codeigniter 4 – Menampilkan Data Berita (Lanjutan)

بِسْمِ اللَّهِ Mudah-mudahan tutorial Codeigniter 4 – Menampilkan Data Berita (Lanjutan) ini bermanfaat

Tutorial ini melanjutkan dan melengkapi turorial sebelumnya yaitu menampilkan berita. Sebelumnya hanya menampilkan 3 data berita yang terakhir di publis. Disini akan menambah beberapa fungsi yaitu: menampilkan berdasarkan yang diklik atau dipilih, menampilkan semua berita untuk semua user.

Persiapan Codeigniter 4 – Menampilkan Data Berita (Lanjutan)

Untuk melanjutkan tutorial pastikan sudah:

Harus sudah mengerjakan tutorial sebelumnya (Codeigniter 4 – Menampilkan Data Berita)

Pertama

Tambahkan script berikut pada controller News yang ada di \app\Controllers\

    public function view($slug)
    {
        $model = new NewsModel();

        $data['news'] = $model->getPageSlug($slug);
        $data['title'] = 'Lihat Berita';
        $data['menu'] = 'news';
        return view('news/view', $data);
    }

    public function index_all()
    {
        return redirect()->to(base_url('/news/list_all?page=1'));
    }

    public function list_all()
    {
        $pager = \Config\Services::pager();
        $model = new NewsModel();
        $body = $this->request->getVar('body');
        $vartitle = $this->request->getVar('title');
        
        $per_page = 6;
		$page = $this->request->getVar('page');
		$start = ($page -1) * $per_page;
        $publish_date = "";

        $data = [
            'body' => $body,
            'vartitle' => $vartitle,
            'per_page' => $per_page,
            'start' => $start,
            'page' => $page,
            'pager' => $pager
        ];

        $data['count_all'] = $model->count_all($publish_date, $vartitle, $body);
        
        $data['news'] = $model->fetch_data($per_page, $start < 0 ? 0 : $start, $publish_date, $vartitle, $body);

        if($data['count_all']>0 && count($data['news'])===0) {
            $page = 1;
            $start = ($page -1) * $per_page;
            $data['news'] = $model->fetch_data($per_page, $start < 0 ? 0 : $start, $publish_date, $vartitle, $body);
        }

        foreach ($data['news'] as $key => $row) {
			$dataIsiNews["row"] = $row;
			$data["row".$row->id] = view('news/row_last_news', $dataIsiNews);
		} 

        $data['start'] = $start;        
        $data['page'] = $page;

        $data['menu'] = 'news';        
        $data['title'] = 'Berita-berita';
        
        return view('news/list_all', $data);
    }

Kedua

Buat file view list_all.php lokasinya di \app\Views\news\. View ini adalah view yang dipanggil oleh fungsi list_all pada controller News. Scriptnya sebagai berikut

<?= $this->extend('template/index') ?>            

<?= $this->section('page-content') ?>
    <form class="user">
        <input type="hidden" name="page" value="<?= $page; ?>" />
        <div class="form-group row">
            <div class="col-sm-6 mb-3 mb-sm-0">
                <input name="title"
                    type="text"
                    class="form-control form-control-user"
                    placeholder="Judul Berita" value="<?= $vartitle; ?>"/>
            </div>
            <div class="col-sm-6">
                <input name="body"
                type="text"
                class="form-control form-control-user"
                placeholder="Isi Berita" value="<?= $body; ?>"/>
            </div>
        </div>
        <div class="col-sm-12">
            <div class="row">
                <div class="col-sm-6">
                    <button type="submit" class="btn btn-success">Cari Berita</button>
                </div>
            </div>
            <?= $pager->makeLinks($page, $per_page, $count_all, 'bootstrap-bullet_pagination') ?>
        </div>
    </form>                            
    <div class="row">
        <?php
            foreach($news as $row):
                $rowNews = "row".$row->id;
                echo $$rowNews;
            endforeach; 
        ?>
    </div>

<?= $this->endSection() ?>  

Satu lagi file view yaitu view.php dengan lokasi di \app\Views\news\. View ini adalah view yang dipanggil oleh fungsi view pada controller News. Scriptnya sebagai berikut

<?= $this->extend('template/index') ?>            

<?= $this->section('page-content') ?>   
    <!-- start page title -->
    <div class="row">
        <div class="col-12">
            <div class="page-title-box d-sm-flex align-items-center justify-content-between">
                <h1 class="h3 mb-4 text-gray-800"><?= $title; ?></h1>

                <div class="page-title-right">
                    <ol class="breadcrumb m-0">
                        <li class="breadcrumb-item"><a href="<?= base_url(); ?>">Halaman Utama</a></li>

                        <li class="breadcrumb-item"><a href="<?= base_url('news/index_all'); ?>">Daftar Berita</a></li>

                        <li class="breadcrumb-item active">

                            <?=$title;?>

                        </li>
                    </ol>
                </div>

            </div>
        </div>
    </div>
    <!-- end page title -->                              
    <div class="card shadow mb-4">
        
        <div class="card-header py-3">
            <h6 class="m-0 font-weight-bold text-primary"><?= $news->title; ?></h6>
        </div>
        <div class="card-body">
            <div class="text-center">
                <img class="img-fluid px-3 px-sm-4 mt-3 mb-4" style="width: 25rem;"
                    src="<?= base_url() ?>/images/news/<?= $news->image; ?>" alt="...">
            </div>
            <?php 
                echo $news->body;
            ?>
        </div>
    </div>
<?= $this->endSection() ?>  

Ketiga

Update konfigurasi Router yaitu \app\Config\Routes.php. Tambahkan script berikut.

$routes->get('news/list', 'News::list', ['filter' => 'role:administrator, user']);
$routes->get('news/list_all', 'News::list_all');
$routes->get('news/index_all', 'News::index_all');
$routes->get('news/(:segment)', 'News::view/$1');

Pada baris yang terakhir yaitu $routes->get(‘news/(:segment)’, ‘News::view/$1’);, ini berfungsi untuk mengarahkan link berita dengan kriteria slug berita.

Jadi pada waktu klik slug berita maka akan diarahkan ke controller News dan memanggil fungsi view dengan membawa kriteria slug berita

Akhirnya

Setelah dijalankan tampilannya akan seperti ini

View berita

Daftar semua berita

Demikian tutorial Codeigniter 4 – Menampilkan Data Berita (Lanjutan). Silakan dilanjutkan dan dikembangkan lagi.

Untuk contohnya bisa dilihat di https://demo.belajardisiniaja.com/

Mudah-mudahan tutorial ini bermanfaat.

Share

You may also like...

1 Response

  1. tempmail says:

    Receive and send emails through your temporary messaging system. Use our webmail or your favorite email software with our absolutely free disposable email. temp mail

Leave a Reply

Your email address will not be published. Required fields are marked *