简体   繁体   中英

dynamic dependent menu dropdown using ajax, codeigniter, php

how to display child menu from options in parent menu with php ci menu dependencies,(when admin check Make Sub Menu & choose Menu Parent in combobox, I want the list in the combobox to select the parent sub-menu containing the sub-menus under the parent menu (which have the selected parent menu)). anyone can help me? please...

But I have problem again, when I try to use ajax and go to (url :appearance/getSubMenu2) and the result is error, and if I try to use (url:"") the result is success.

Image include :

I have script & view like this (menu.php) :

    <!-- Content Header (Page header) -->
<section class="content-header" data-page="appearance">
  <h1>Menu</h1>
</section>

<!-- Main content -->
<section class="content">
  <!-- Main row -->
  <div class="row">
    <div class="col-md-4">
      <div class="box box-primary">
        <div class="box-header">
      <h3 class="box-title"><i class="fa fa-bars"></i> Insert Menu</h3>
    </div>
    <!-- /.box-header -->
    <!-- <link href="<?php echo base_url() ?>assets/css/"> -->
    <div class="box-body">
      <form action="<?php echo base_url('pengelola/appearance/tambahMenu') ?>" method="post">
        <fieldset class="form-group">
          <label for="menu-name">Menu Name</label>
          <input type="text" class="form-control" id="menu_name" name="menu_name" autofocus>
        </fieldset>
        <fieldset class="form-group">
          <label for="menu-link">Menu Link</label>
          <input type="url" class="form-control" id="menu_link" name="menu_link">
        </fieldset>
        <div class="checkbox">
          <label>
            <input type="checkbox" id="isChild" name="isChild"> Make Sub Menu
          </label>
        </div>
        <fieldset class="form-group">
          <label for="menu-parent">Sub Menu</label>
          <select class="form-control" name="menu_parent" data-placeholder="Choose Menu Parent" onchange="" disabled id="menu_parent">
            <option></option>
            <?php foreach ($menuParent as $key => $value): ?>
              <option value="<?php echo $value->menu_id ?>"><?php echo $value->menu_name ?></option>
            <?php endforeach; ?>
          </select>
        </fieldset>

        <div class="checkbox">
          <label>
            <input type="checkbox" id="isChild2" name="isChild2"> Make Sub Menu Level 2
          </label>
        </div>
        <fieldset class="form-group">
          <label for="menu-child">Sub Menu Level 2</label>
          <select class="form-control" name="menu_child" data-placeholder="Choose Sub Menu Parent" required="menu_parent" disabled id="menu_child">
            <!-- <select class="form-control" name="menu_child" id="menu_child" data-placeholder="Pilih Sub Menu Induk" disabled=""> -->
            <option></option>
            <?php foreach ($menuChild2 as $key => $value): ?>      
                <option value="<?php echo $value->menu_id ?>"><?php echo $value->menu_name ?></option>
            <?php endforeach; ?>
          </select>
        </fieldset>

        <script type="text/javascript">
            $(document).ready(function(){
                $("#isChild").change(function() {
                  if(this.checked) {
                    $('#menu_parent').removeAttr('disabled');

                    $('#menu_parent').on('change', function(){
                      var menu_id = $('#menu_parent').val();
                    if(menu_id == '') {
                      $('#menu_child').attr('disabled', true);
                      return;
                    } else {
                      $("#isChild2").change(function() {
                         if(this.checked) {
                           $('#menu_child').removeAttr('disabled');
                         } else {
                           $('#menu_child').val('').trigger('change');
                           $('#menu_child').attr('disabled', true);
                         }
                      });
                      $.ajax({
                        url:"<?php echo base_url(); ?>appearance/getSubMenu",
                        type: "POST",
                        data: {'menu_id' : menu_id},
                        dataType: 'json',
                        success: function(data){
                          alert('OK');
                          $('#menu_child').text(data);
                        },
                        error: function(){
                          alert('Error occur...!!');
                        }
                      });
                    }
                    });
                  } else {
                    $('#menu_parent').val('').trigger('change');
                    $('#menu_parent').attr('disabled', true);
                    $('#menu_child').attr('disabled', true);
                  }
              });
            });
          </script>

        <button type="submit" class="btn btn-primary btn-sm"><i class="fa fa-save"></i> Simpan</button>
      </form>
    </div>
    <!-- /.box-body -->
  </div>
  <!-- /.box -->
</div>



<div class="col-md-8">

  <div class="box box-success">
    <div class="box-header">
      <h3 class="box-title"><i class="fa fa-check"></i> Menu Active</h3>
    </div>
    <!-- /.box-header -->
    <div class="box-body">
      <!-- <ul class="todo-list"> -->
      <ul class="todo-list sortableParent">
        <?php $item = 1; foreach ($menuParent as $key => $value): ?>
          <li id="item-<?php echo $value->menu_id ?>">
            <span class="handle">
              <i class="fa fa-ellipsis-v"></i>
              <i class="fa fa-ellipsis-v"></i>
            </span>
            <span class="text"><?php echo $value->menu_name ?></span>
            <div class="tools">
              <a href="<?php echo base_url('pengelola/appearance/menuForm/'.$value->menu_id) ?>" style="color:blue"><i class="fa fa-pencil"></i></a> &nbsp;
              <?php if ($value->menu_hide != 0): ?>
                <a href="<?php echo base_url('pengelola/appearance/hideMenu/'.$value->menu_id) ?>" style="color:black"><i class="fa fa-eye"></i></a> &nbsp;
              <?php else: ?>
                <a href="<?php echo base_url('pengelola/appearance/hideMenu/'.$value->menu_id) ?>" style="color:green"><i class="fa fa-eye-slash"></i></a> &nbsp;
              <?php endif; ?>
              <?php if ($value->menu_can_delete != 0): ?>
                <a href="<?php echo base_url('pengelola/appearance/deleteMenu/'.$value->menu_id) ?>" style="color:red" class="delete"><i class="fa fa-trash-o"></i></a>
              <?php endif; ?>
            </div>
            <?php if ($value->menuChild): ?>
              <ul class="todo-list sortableChild">
                <?php foreach ($value->menuChild as $k => $v): ?>
                  <li id="itemChild-<?php echo $value->menu_id ?>-<?php echo $v->menu_id ?>">
                    <span class="handle">
                      <i class="fa fa-ellipsis-v"></i>
                      <i class="fa fa-ellipsis-v"></i>
                    </span>

                    <span class="text"><?php echo $v->menu_name ?></span>
                    <div class="tools">
                      <a href="<?php echo base_url('pengelola/appearance/menuForm/'.$v->menu_id) ?>" style="color:blue"><i class="fa fa-pencil"></i></a> &nbsp;
                      <?php if ($v->menu_hide != 0): ?>
                        <a href="<?php echo base_url('pengelola/appearance/hideMenu/'.$v->menu_id) ?>" style="color:black"><i class="fa fa-eye"></i></a> &nbsp;
                      <?php else: ?>
                        <a href="<?php echo base_url('pengelola/appearance/hideMenu/'.$v->menu_id) ?>" style="color:green"><i class="fa fa-eye-slash"></i></a> &nbsp;
                      <?php endif; ?>
                      <a href="<?php echo base_url('pengelola/appearance/deleteMenu/'.$v->menu_id) ?>" style="color:red" class="delete"><i class="fa fa-trash-o"></i></a>
                    </div>

                    <?php if (($v->menu_id == 69) && ($value->menuChildest)): ?>
                    <!-- //cek apakah menuChild(sub menu) mempunyai anak lagi (sub menu 2) atau cek apakah menu_id dari menuChild == menu_child dari menuChildest -->
                        <ul class="todo-list">
                          <?php foreach ($value->menuChildest as $key => $v): ?>
                          <!-- untuk setiap menuChildest(yang nilainya ada di sub menu a maka) -->
                        <li id="itemGrandChild-<?php echo $value->menu_id ?>-<?php echo $v->menu_parent ?>-<?php echo $v->menu_child ?>">
                            <span class="handle">
                            <i class="fa fa-ellipsis-v"></i>
                            <i class="fa fa-ellipsis-v"></i>
                        </span>
                        <span class="text"><?php echo $v->menu_child ?></span>
                        <div class="tools">
                            <a href="<?php echo base_url('pengelola/appearance/menuForm/'.$v->menu_id) ?>" style="color:blue"><i class="fa fa-pencil"></i></a> &nbsp;
                            <?php if ($v->menu_hide != 0): ?>
                              <a href="<?php echo base_url('pengelola/appearance/hideMenu/'.$v->menu_id) ?>" style="color:black"><i class="fa fa-eye"></i></a> &nbsp;
                            <?php else: ?>
                              <a href="<?php echo base_url('pengelola/appearance/hideMenu/'.$v->menu_id) ?>" style="color:green"><i class="fa fa-eye-slash"></i></a> &nbsp;
                            <?php endif; ?>
                            <a href="<?php echo base_url('pengelola/appearance/deleteMenu/'.$v->menu_id) ?>" style="color:red" class="delete"><i class="fa fa-trash-o"></i></a>
                        </div>
                        </li>
                        <?php endforeach; ?>
                        </ul>
                    <?php endif; ?>


                    </li>
                <?php endforeach; ?>
              </ul>
            <?php endif; ?>

          </li>
        <?php $item++; endforeach; ?>
      </ul>
      <br>
      <span>
        Keterangan : <br>
        <table width="100%">
          <tr style="color:blue">
            <td width="5%"><i class="fa fa-pencil"></i></td>
            <td>Untuk Mengubah Menu (Edit)</td>
          </tr>
          <tr style="color:black">
            <td><i class="fa fa-eye"></i></td>
            <td>Untuk Menyembunyikan Menu (Hide)</td>
          </tr>
          <tr style="color:green">
            <td><i class="fa fa-eye-slash"></i></td>
            <td>Untuk Menampilkan Menu (Show)</td>
          </tr>
          <tr style="color:red">
            <td><i class="fa fa-trash"></i></td>
            <td>Untuk Menghapus Menu (Delete)</td>
          </tr>
        </table>
      </span>
    </div>
    <!-- /.box-body -->
  </div>
  <!-- /.box -->
</div>

I have code like this in controller (appearance.php) :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Appearance extends MY_Controller {

  public function __construct()
  {
    parent::__construct();
    if (!$this->check_is_login()) { redirect('pintu_masuk'); }
    $this->clear_cache();
    $this->load->model(array('widget_model', 'menu_model'));
  }

  function index()
  {
    $this->header();
    $data['menu_child'] = $this->menu_model->getSubMenuQuery();
    $this->load->view('appearance', $data);
  }
  function getSubMenu()
  {
    $menu_id = $this->input->post('menu_id');
    $submenu = $this->menu_model->getSubMenuQuery($menu_id);
    if (count($submenu) > 0) {
      $pro_select_box = '';
      $pro_select_box .= '<option>Select Sub Menu</option>';

      foreach ($submenu as $menu_child) {
        $pro_select_box .= '<option value ="'.$menu_child->menu_id.'">'.$menu_child->menu_name.'</option>';
      }
      echo json_encode($pro_select_box);
    }
  }

I have code like this in (menu_model.php) :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Menu_model extends MY_Model{

  public function __construct()
  {
    parent::__construct();
    $this->setTable('menu');
  }

  public function getSubMenuQuery($menu_id)
  {
    $query = $this->db->get_where('menu', array('menu_id'));
    return $query->result();
  }
}

您到底想要什么,请正确描述步骤并显示html代码,以便我为您提供帮助。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM