Website dinamis dengan CodeIgniter

tulisan ini sebagian besar mengambil dari tutorial codeigniter.

Konfigurasi awal

Konfigurasi awal melakukan perubahan pada file env rename menjadi .env

menjadi

buka file .env dan cari baris kode berikut dan ubah.

# app.baseURL = ''

hilangkan tanda # dan sisiplan alamat website kalian.

app.baseURL = 'codeigniter4.test'

1. Konfigurasi basisdata

Untuk membuat halaman dinamis diperlukan basisdata, kalian dapat menggunakan mysql, buatlah basisdata ci4tutorial dan tambahkan tabel news,

CREATE TABLE news (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT,
    title VARCHAR(128) NOT NULL,
    slug VARCHAR(128) NOT NULL,
    body TEXT NOT NULL,
    PRIMARY KEY (id),
    KEY slug (slug)
);

Strukturnya seperti gambar berikut

dan masukkan beberapa data

INSERT INTO news VALUES
(1,'Elvis sighted','elvis-sighted','Elvis was sighted at the Podunk internet cafe. It looked like he was writing a CodeIgniter app.'),
(2,'Say it isn\'t so!','say-it-isnt-so','Scientists conclude that some programmers have a sense of humor.'),
(3,'Caffeination, Yes!','caffeination-yes','World\'s largest coffee shop open onsite nested coffee shop for staff only.');

basisdata sudah jadi, sekarang sambungkan basisdata tersebut dengan codeigniter.

selanjutnya lakukan perubahan pada isi code .env cari baris kode

# database.default.hostname = localhost
# database.default.database = ci4
# database.default.username = root
# database.default.password = root
# database.default.DBDriver = MySQLi
# database.default.DBPrefix =

hilangkan tanda # pada awal code dan atur database yang akan digunakan

database.default.hostname = localhost
database.default.database = ci4tutorial
database.default.username = root
database.default.password = 
database.default.DBDriver = MySQLi
database.default.DBPrefix =

atau sesuaikan dengan pengaturan database kalian.

2. konfigurasi model

pada saat ini aplikasi codeigniter telah terhubung dengan basisdata, namun query harus ditempatkan pada model untuk dapat digunakan, yaitu dengan membuat file baru dalam direktori app/Models beri nama NewsModel.php

dan kodenya adalah sebagai berikut

<?php
namespace App\Models;
use CodeIgniter\Model;
class NewsModel extends Model
{
    protected $table = 'news';
    public function getNews($slug = false)
    {
       if ($slug === false) {
          return $this->findAll();
       }
       return $this->where(['slug' => $slug])->first();
    }
}

kode tersebut dapat melakukan dua (2) query yaitu jika variable $slug bernilai false maka metode findAll() akan dikerjakan pada variable $table, namun jika $slug bernilai true maka akan mengerjakan metode first pada $table dengan mengerjakan where clause.

2. Buat halaman view

buat direktori baru pada app/Views dengan nama news dan dua (2) file dengan nama overview.php dan view.php.

kode pada overview.php dan view.php terhubung dengan controller yang akan dibuat nantinya,

a. overview.php

<h2><?= esc($title) ?></h2>
<?php if (! empty($news) && is_array($news)): ?>
    <?php foreach ($news as $news_item): ?>
        <h3><?= esc($news_item['title']) ?></h3>
        <div class="main">
            <?= esc($news_item['body']) ?>
        </div>
        <p><a href="/news/<?= esc($news_item['slug'], 'url') ?>">View article</a></p>
    <?php endforeach ?>
<?php else: ?>
    <h3>No News</h3>
    <p>Unable to find any news for you.</p>
<?php endif ?>

a. view.php

<h2><?= esc($news['title']) ?></h2>
<p><?= esc($news['body']) ?></p>

3. Menampilkan berita

Setelah queri ditulis pada model dan view telah dibuat, model harus kaitkan ke view dan ditampilkan dalam item berita kepada pengguna. Ini bisa dilakukan di halaman controller yang akan dibuat. Buat controller baru dengan nama News.php dan tempatkan dalam direktori app/Controllers/

Isi kodenya

<?php
namespace App\Controllers;
use App\Models\NewsModel;
class News extends BaseController
{
    public function index()
    {
        $model = model(NewsModel::class);
        $data = [
            'news'  => $model->getNews(),
            'title' => 'News archive',
        ];
        echo view('news/overview', $data);
    }
    public function view($slug = null)
    {
        $model = model(NewsModel::class);
        $data['news'] = $model->getNews($slug);
        if (empty($data['news'])) {
            throw new \CodeIgniter\Exceptions\PageNotFoundException('Cannot find the news item: ' . $slug);
        }
        $data['title'] = $data['news']['title'];
        echo view('news/view', $data);
    }
}

4. Routes

Secara defaul alamat url bekerja sebagai mana mestinya dengan menentukannya pada code controller, lihat gambar berikut.

namun codeigneter juga CodeIgniter dapat memetakan ulang pengendali URL. Aturan perutean ditentukan dalam file app/Config/ Routes .php

// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Home::index');
$routes->get('news', 'News::index');
$routes->get('news/(:segment)', 'News::view/$1');
/*

perhatikan baris 35 dan 36 pada kode,

baris 35, ‘news’ bila di panggil pada browser maka akan mengembalikan nilai pada controller News Home function public index dengan kode ‘News::index.

Baris 36, $routes->get('news/(:segment)', 'News::view/$1');

'news/(:segment)' akan bekerja jika halaman browser news/(:segment) (:segmen) adalah kode pengganti untuk mengambil nilai $1 pada controller News function views, perhatikan function views public function view($slug = null) perhatikan argumen $slug nilai pada adalah pengganti dari variable $1 pada $routes. jika halaman view article pada halaman news di akses maka halaman slug dari masing masing data akan titampilkan pada halaman.

Tinggalkan komentar