Hvis du gerne vil have det automatiseret ville jeg gøre det sådan, så controllers der kvalificerer sig til at deltage i admin-dashboardet (altså ikke controllers der beskæftiger sig med frontend-ting), har en konstant, statisk variabel, statisk funktion eller lignende, der rapporterer det, når det bliver efterspurgt af dit dashboard (fx ved at lave en glob() på controller-mappen, for at finde alle controller-filerne).
Hvis vi fx siger at din Useradmin controller skal fremgå i dashboardet, så kan controlleren se sådan ud:
class Useradmin extends CI_Controller {
const IN_DASHBOARD = true;
// og her vil dine controller-metoder så være
}
Så kan din Dashboard controller have følgende i sin index action
public function index() {
$data = array(
'controllers' => array()
);
foreach(glob(APPPATH . 'controllers/*.php') as $controllerfile) {
$classname = basename($controllerfile, '.php'); //find ud af hvad controllerens klassenavn er ved at fjerne .php fra dens filnavn
include_once $controllerfile;
if (defined($classname . '::IN_DASHBOARD')) {
$data['controllers'] => $classname;
}
}
$this->load->view('admin/dashboard', $data);
}
og så kan dit dashboard view have følgende:
<?php foreach($controllers as $controller) {
echo '<a href="' . strtolower($controller) . '/">' . $controller . '</a><br>';
} ?>
Du skal nok tweake koden lidt og rette småfejl hist og her, men slutresultatet vil være at når du går ind på dashboard/index, vil den løbe alle controllers igennem, checke om de har en class constant der hedder "IN_DASHBOARD", og hvis det er tilfældet vil de lave et link til den controllers index-action på dashboardet.
Men det lyder egentlig lidt underligt hvis den funktionalitet ikke allerede er bygget ind i CI - har du tjekket docs?
Lad os lige få nogle ting på plads:
CodeIgniter er et udviklingsframework. CodeIgniter beskæftiger sig med at gøre en MVC-kodestruktur tilgængelig for udvikleren, CodeIgniter beskæftiger sig med at gøre alskens common-use libraries (at sende mails, uploade filer mv.) tilgængelige for udvikleren, og CodeIgniter beskæftiger sig med at håndtere urls og config filer.
CodeIgniter er
ikke et CMS. CodeIgniter beskæftiger sig ikke med modulære visninger af arbitrær data i meget specifik kontekst. Den giver dig værktøjerne der skal til for at skabe den slags funktionalitet, men CodeIgniter antager ikke, at det nødvendigvis er sådan en funktionalitet, din applikation skal bruge. At have en masse ekstra-kode til at lave et modulært admin-dashboard er et
meget specifikt stykke arbejde, der ikke hører hjemme i et general purpose framework. Det er fx ret useless når du bruger CodeIgniter som IRC-bot, som REST-api server for en phonegap javascript app, eller lignende.
Indlæg senest redigeret d. 20.06.2014 17:33 af Bruger #8223