我怎么能做一个菜单列表与许可的codeigniter


how can I do a menu list with permission on codeigniter?

我想显示具有权限的相应模块的菜单列表。我有我的模型和控制器,但我不知道如何传递它到我的主视图和显示它。可直接用于PHP或ajax。

控制器

 <?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Login extends MY_Controller {
    public function __construct(){
        parent::__construct();
    }
    public function index(){
        $data['module'] = 'Login';
        $this->load->view('login',$data);
    }
    public function getAccess(){
        if ($this->session->userdata('logged_in') == TRUE){
            redirect('home');
        }else{
            $username = $this->security->xss_clean($this->input->post('username'));
            $password = $this->security->xss_clean($this->input->post('password'));
            $array = $this->user->login($username,$password);
            if ($array[0] == 0) {
                echo 0;
            }else{
                $data_session = array(
                    'id' => $array[0]['id'],
                    'name' => $array[0]['nombre'],
                    'last_name' => $array[0]['apellido'],
                    'type' => $array[0]['id_perfil'],
                    'logged_in' => TRUE 
                );
                $this->session->set_userdata('log',$data_session);
            }
        }
    } 
    public function logout(){
        $this->session->sess_destroy();
        redirect('login');
    }
    public function getModules($module_id){
        if ($this->session->userdata('log')){
            $data = $this->session->userdata('log');
            $menu = array();
            $seccions = $this->module->get_rows();
            foreach ($seccions as $index => $seccion) {
                //echo json_encode($seccion);
                $modules = $this->module->query("SELECT concat('".$seccion['id']."',storelte_modulo.id) AS id, storelte_modulo.modulo AS VALUE,storelte_modulo.seccion_id,concat('".base_url()."',storelte_modulo.url) as url FROM storelte_modulo INNER JOIN storelte_modulo_perfil ON  storelte_modulo_perfil.modulo_id = storelte_modulo.id WHERE seccion_id = $seccion[id] AND storelte_modulo_perfil.perfiles_id =  $data[id] AND storelte_modulo_perfil.status = 1");
                $seccions[$index]['data']= $modules;
                if(!count($seccions[$index]['data']))
                    unset($seccions[$index]);
            }
            foreach($seccions as $item)
                array_push($menu,$item);
            $this->json($menu);
        }
    }
}

module_model

class Module extends CI_Model {
    public function __construct(){
        parent::__construct();
    }
    public function get_rows(){
        $this->db->select('id,seccion');
        $this->db->from('storelte_seccion');
        return $this->db->get()->result_array();
    }
    public function query($query){
        return $this->db->query($query)->result_array();
    }
}

html将显示具有权限的模块

<div class="row">
              <h3 class="text-center">Welcome to storeLTE, click a module below to get started!</h3>
              <div class="home_module_list">
              </div>
          </div>

为了通过php编写模块列表,您必须将$menu数组传递给视图文件(html)。如果这样做,function getModules()应该:

  • 返回$menu数组,如果getModules()是从控制器
  • 的另一个方法调用的

——或——

  • 将数组直接传递给视图文件(对代码示例来说最简单的方法)。因此,在本例中,将控制器上的函数getModules()更改为:
<>之前getModules($module_id){如果会话($ this -> ->用户数据(日志)){$data = $this->session->userdata('log');$menu = array();$seccions = $this->module->get_rows();Foreach ($ sectionas $index => $ sectionas) {$modules = $this->module->query("SELECT concat(' ') ")$seccion['id'] ."',storelte_modulo.id) AS id, storelte_modulo.id。modulo AS VALUE, storete_modulo。seccion_id concat('"。base_url() . ' ',storelte_modulo.url)作为url FROM storelte_modulo INNER JOIN storelte_modul_perfil ON storelte_modul_perfil . 'module_id = storelte_modulo。WHERE seccion_id = $seccion[id] AND storelte_modullo_perfil . idperfiles_id = $data[id] AND storelte_modullo_perfil。状态= 1";//假设从上面的查询中只得到1行If (!empty($modules;)) {$modules['index'] = $index;$menu[' sections '] = $modules;}}$ this ->加载>视图(modules_view,美元菜单);}}之前

然后在你的视图文件(modules_view.php)中你可以遍历$menu项:

<div class="row">
<h3 class="text-center">Welcome to storeLTE, click a module below to get started!</h3>
<div class="home_module_list">
  <ul>
  <?php
     foreach($seccions as $session) {
        echo '<li><a href="'. $session['url'] .'">'. $session['index'] .' - '. $session['id'] .' - '. $session['VALUE'] .'</a></li>';
     }
  ?>
  </ul>
</div>
</div>

如果你想通过ajax传递菜单,你必须在你的html文件中使用javascript,但首先你的函数getModules()应该echo JSON数组(或你即将嵌入在"home_module_list"div中的html)。在这种情况下,我建议您给div一个id