Layout
Main Template
file berada di app\Views\main.php
PHP Variables
<?php
$session = session();
$baseUrl = base_url();
$currentUrl = current_url();
$klinikProfile = (new \App\Models\Option)->getClinicProfile()['text_value']['clinic_profile'];
$companyName = $klinikProfile['name'];
$companyAddress = $klinikProfile['address'];
$user = $session->get('user');
$dummy = $session->get('wasLogin') ? "?v=".rand(0, 99999) : '';
$newDummy = rand(0,9999999);
?>
$klinikProfile, berisi array identitas klinik
$user, berisi array user jika sudah login, null jika belum
$dummy, angka random yang digunakan untuk reset cache browser (cache direset ketika pertama kali login)
$newDummy, angka random yang digunakan untuk reset cache browser
Layout and CSS
<head>
<meta charset="UTF-8">
<base href="<?= $baseUrl ?>" id="baseUrl">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?= $title ?> • <?= $companyName ?>, Pelayanan Khusus Anak</title>
<link rel="shortcut icon" href="<?= "$baseUrl/img/favicon.png" ?>" type="image/x-icon">
<!-- ...Any CSS CDN -->
<?php if (! empty($additionalCss)): ?>
<?php foreach ($additionalCss as $src): ?>
<link rel="stylesheet" href="<?= $src . $dummy ?>" />
<?php endforeach ?>
<?php endif ?>
<link rel="stylesheet" href="<?= "$baseUrl/css/app.css$dummy" ?>">
<link rel="stylesheet" href="<?= "$baseUrl/css/overflower.css$dummy" ?>">
<?php if ($user) : $mainPath = url_title($user['role_name']) ?>
<link rel="stylesheet" href="<?= "$baseUrl/css/$mainPath/$mainPath.css" ?>">
<?php endif; ?>
<link rel="stylesheet" href="<?= "$baseUrl/css/$filePath.css" ?>">
<!-- Style untuk booking -->
<?php if (strpos($currentUrl, '/booking')) : ?>
<link rel="stylesheet" href="<?= "$baseUrl/css/partials/bottom-nav.css?v=$newDummy" ?>">
<?php endif; ?>
<?php if (strpos($currentUrl, '/dokter') || strpos($currentUrl, '/dokter/template-racikan')) : ?>
<link rel="stylesheet" href="<?= "$baseUrl/css/dokter/templateRacikan.css" ?>">
<?php endif; ?>
<?php if ($currentUrl != "$baseUrl/"): ?>
<style type="text/css">
/* Footer Fixed Jika bukan dihalaman utama */
footer {
position: fixed;
bottom: 0;
left: 0;
right: 0;
}
</style>
<?php endif; ?>
<!-- ...Any JS CDN -->
<?php if (!isset($noFooterJs)) : ?>
<script>
var companyName = "<?= $companyName ?>"
var companyAddress = "<?= $companyAddress ?>"
var refreshRateAntrian = "<?= env('app.refresh_rate_antrian') ?>"
var uploadPath = "<?= UPLOAD_PATH ?>"
var roleName = "<?= $user['role_name'] ?? '' ?>"
var roleNameUrl = roleName.replace(" ", '-')
</script>
<?php endif; ?>
<script defer src="<?= "$baseUrl/js/app.js$dummy" ?>"></script>
<?= $this->include('partials/scriptPartials') ?>
<?php if ($user): ?>
<script defer src="<?= "$baseUrl/js/$mainPath/$mainPath.js?v=$newDummy" ?>"></script>
<?php endif; ?>
<script defer src="<?= "$baseUrl/js/$filePath.js$dummy?v=$newDummy" ?>"></script>
</head>
$additionalCss, berisi array css tambahan, bisa ditambahkan di dalam controller method ketika return $data = ['additionalCss' => [...]]
$baseUrl/css/app.css$dummy, global css
<?php if ($user) : $mainPath = url_title($user['role_name']) ?>
<link rel="stylesheet" href="<?= "$baseUrl/css/$mainPath/$mainPath.css" ?>">
<?php endif; ?>
<link rel="stylesheet" href="<?= "$baseUrl/css/$filePath.css" ?>">
baris 1-3 adalah css global yang digunakan tiap user role, jika role finance maka $baseUrl/css/finance/finance.css
baris ke 5 adalah css yang diterapkan sesuai dengan view yang disupply dari $data.
Jika filePath berisi finance/ringkasan maka css yang digunakan adalah $baseUrl/css/finance/ringkasan.css, begitu pula JS
<script defer src="<?= "$baseUrl/js/app.js$dummy" ?>"></script>
<?= $this->include('partials/scriptPartials') ?>
<?php if ($user): ?>
<script defer src="<?= "$baseUrl/js/$mainPath/$mainPath.js?v=$newDummy" ?>"></script>
<?php endif; ?>
<script defer src="<?= "$baseUrl/js/$filePath.js$dummy?v=$newDummy" ?>"></script>
baris ke 1 adalah global js
baris ke 2 adalah potongan script
baris 4-7 sama seperti css diatas
HTML body tag section
<body class="position-relative">
<noscript>
<div>
<p>Oops! sepertinya JavaScript dimatikan. mohon hidupkan kembali di pengaturan browser anda.</p>
</div>
</noscript>
<?php if (!isset($noHeader)) : ?>
<?= $this->include('partials/navbar') ?>
<?php endif ?>
<main class="app mt-5" id="app">
<?php include_once "$filePath.php" ?>
</main>
<?php if (!isset($noFooter)) : ?>
<!-- Footer -->
<footer>
<span id="copyright">
<script>
document.getElementById("copyright").textContent = `Copyright ${new Date().getFullYear()}. <?= $companyName ?>.`;
</script>
</span>
</footer>
<?php endif ?>
<!-- untuk bungkus toast -->
<div class="container-toast"></div>
<!-- PhotoSwipe Requirements -->
<?= $this->include('libs/photoswipe') ?>
<!-- untuk sticky notification -->
<div class="sticky-notification-container"></div>
</body>
Login Front
login page khusus resepsionis
app\Views\auth\front\login.php 
class AuthController extends BaseController
{
// ...
public function frontLoginView()
{
$data = [
'filePath' => 'auth/front/login',
'title' => 'Login Front Office'
];
return view('main', $data);
}
}
filePath digunakan untuk view yang harus ditampilkan, path relative ke App\Views
title digunakan untuk title page
return view('main', $data);, merujuk ke file app\Views\main.php digunakan untuk layout utama
Login Back
login page khusus selain resepsionis
app\Views\auth\back\login.php 
class AuthController extends BaseController
{
// ...
public function backLoginView()
{
$data = [
'filePath' => 'auth/back/login',
'title' => 'Login Back Office'
];
return view('main', $data);
}
}
filePath digunakan untuk view yang harus ditampilkan, path relative ke App\Views
title digunakan untuk title page
return view('main', $data);, merujuk ke file app\Views\main.php digunakan untuk layout utama