Hejsa.
Jeg mangler lidt hjælp til min menu.
Jeg vil gerne smide den i databasen for nemmere at kunne rette navne og ikoner uden at skulle have fat i selve koden.
Det er en to-level menu hvor jeg gerne skulle have mulighed for via databasen at kunne redigere forskellige ting for et element.
Jeg er lidt på bar bund hvorfra jeg skal lave min database. Jeg har netop set en video som viser nested contra adjust metoderne at gøre det på. Umiddelbart så falder adjust mest i min smag, da jeg ikke har et stort menu træ.
Lige nu har jeg følgende kode:
MY_Model
- <?php
-
- class MY_Model extends CI_Model{
-
- protected $_table_name = '';
- protected $_primary_key = 'id';
- protected $_primary_filter = 'intval';
- protected $_order_by = 'id';
- protected $_timestamps = FALSE;
-
- public function __construct(){
- parent::__construct();
- }
-
- public function get($id = NULL, $single = FALSE){
- if($id != NULL){
- $filter = $this->_primary_filter;
- $id = $filter($id);
- $this->db->where($this->_primary_key, $id);
- $method = "row";
- } elseif($single == TRUE) {
- $method = "row";
- } else {
- $method = "result";
- }
-
- if (!count($this->db->ar_orderby)) {
- $this->db->order_by($this->_order_by);
- }
- return $this->db->get($this->_table_name)->$method();
- }
-
- public function get_by($where, $single = FALSE){
- $this->db->where($where);
- return $this->get(NULL, $single);
- }
-
- public function save(){}
- public function delete(){}
- }
menu_model
- <?php
-
- class Menu_model extends MY_Model{
- protected $_table_name = 'menu';
- protected $_primary_key = 'id';
- protected $_primary_filter = 'intval';
- protected $_timestamps = FALSE;
- }
Dashboard
- class Dashboard extends Admin_Controller{
- public function __construct(){
- parent::__construct();
- $this->load->model('menu_model');
- }
-
- public function index(){
- $menu = $this->menu_model->get();
- var_dump($menu);
- }
Output
array(2) { [0]=> object(stdClass)#26 (7) { ["id"]=> string(1) "1" ["name"]=> string(9) "Dashboard" ["link"]=> string(15) "admin/dashboard" ["icon"]=> string(2) "90" ["active"]=> string(1) "1" ["date"]=> string(19) "2013-12-26 22:48:47" ["parent_id"]=> string(1) "0" } [1]=> object(stdClass)#27 (7) { ["id"]=> string(1) "2" ["name"]=> string(8) "Settings" ["link"]=> string(14) "admin/settings" ["icon"]=> string(2) "65" ["active"]=> string(1) "1" ["date"]=> string(19) "2013-12-26 22:48:51" ["parent_id"]=> string(1) "0" } }
Men hvordan får jeg lavet min query så den henter ud så det bare lige er til at udskrive?
Min tabel er som følger:
id
name
link
icon
active
date
parent_id
Dernæst så har jeg et ekstra spørgsmål omkring når jeg bruger flexi_auth så vil jeg gerne at der kun bliver udskrevet menu elementer for de områder som brugeren har adgang til. Hvordan får jeg bygget det på? Skal jeg bare tilføje en ekstra kolonne i min menu tabel og tage den fra den?
EDITJeg fandt en løsning på det med min menu.
Løsningen kom via en tutorial. Koden følger:
menu_model
- class Menu_model extends MY_Model{
-
- protected $_table_name = 'menu';
-
- public function get_nested ()
- {
- $items = $this->db->get('menu')->result_array();
-
- $array = array();
- foreach ($items as $item) {
- if (! $item['parent_id']) {
- $array[$item['id']] = $item;
- }
- else {
- $array[$item['parent_id']]['children'][] = $item;
- }
- }
- return $array;
- }
- }
Controller
- public function menu(){
- $this->data['menu'] = $this->menu_model->get_nested();
-
- $this->load->view('admin/menu', $this->data);
- }
View
- <?php
- echo get_ol($menu);
-
- function get_ol($array, $child = FALSE){
-
- $str = '';
-
- if(count($array)){
- $str .= $child == FALSE ? '<ol class="top">' : '<ol>';
-
- foreach($array as $item){
- $str .= '<li id="id-' . $item['id'] . '">';
- $str .= $item['name'];
-
- if(isset($item['children']) && count($item['children'])){
- $str .= get_ol($item['children'], TRUE);
- }
-
- $str .= '</li>' . PHP_EOL;
- }
-
- $str .= '</ol>' . PHP_EOL;
- }
-
- return $str;
- }
Jeg er klar over der skal ryddes lidt op. Men hovedsagen er at det virker nu
Mangler blot en løsning på det her med hvilke bruger hvilke elementer skal vises for.
Indlæg senest redigeret d. 27.12.2013 00:20 af Bruger #15663