제목 | 멀티형 분류 어떻게들 만드시나요 ? | ||
---|---|---|---|
글쓴이 | 람이 | 작성시각 | 2014/09/25 14:19:53 |
|
|||
제가 부족한 실력으로 카테고리를 만들어 보고 있는데 (쇼핑몰에 쓸) 이게 답은 아닌듯 해서요... 어거지로 만들고 있다는 느낌이 드네요., 컨트롤러 case 'category': $this->load->model('admin_shm'); if( $this->input->get_post('id',TRUE) ) { $data['ca_value'] = $this->admin_shm->ca_name($this->input->get_post('id',TRUE)); } $data['list'] = $this->admin_shm->ca_getDB('lio_category','',''); $page = 'shop/category_list'; $data['nav'] = array('0'=>'분류 관리','1'=>'분류 목록'); break; case 'category_ok': $this->load->library('form_validation'); $this->form_validation->set_error_delimiters('<span class="text-red">', '</span>'); $this->form_validation->set_rules('ca_name', '분류명', 'trim|required|min_length[1]|max_length[255]|xss_clean'); if ($this->form_validation->run() == FALSE) { alert_back('분류명이 비어 있습니다.'); return false; } else { $this->load->model('admin_shm'); $query = $this->admin_shm->ca_insert(); if($query) { redirect('/admin/shop/category/'.$this->input->post('sh_id',TRUE)); } else { alert('디비에 저장하지 못했습니다.'); } } break; case 'addca': $ca_id = $this->input->post('msg'); if(strlen($ca_id)==3) { echo " <select name='sel2' id='sel2' onchange='sub(2)'> <option value=''>::중분류 선택::</option>"; $this->load->model('admin_shm'); $user = $this->admin_shm->getDB('lio_category','ca_id',$ca_id); foreach($user as $d) { echo "<option value='{$d->ca_id}'>{$d->ca_name}</option>"; } echo "</select>"; } else if(strlen($ca_id)==6) { echo " <select name='sel3' id='sel3' onchange='sub(3)'> <option value=''>::소분류 선택::</option>"; $this->load->model('admin_shm'); $user = $this->admin_shm->getDB('lio_category','ca_id',$ca_id); foreach($user as $d) { echo "<option value='{$d->ca_id}'>{$d->ca_name}</option>"; } echo "</select>"; } else if(strlen($ca_id)==9) { echo " <select name='sel4' id='sel4' onchange='sub(4)'> <option value=''>::최종분류 선택::</option>"; $this->load->model('admin_shm'); $user = $this->admin_shm->getDB('lio_category','ca_id',$ca_id); foreach($user as $d) { echo "<option value='{$d->ca_id}'>{$d->ca_name}</option>"; } echo "</select>"; } else if(strlen($ca_id)==12) { echo " <select name='sel5' id='sel5' onchange='sub(5)'> <option value=''>::최종분류 선택::</option>"; $this->load->model('admin_shm'); $user = $this->admin_shm->getDB('lio_category','ca_id',$ca_id); foreach($user as $d) { echo "<option value='{$d->ca_id}'>{$d->ca_name}</option>"; } echo "</select>"; } exit; break; 모델 ////////////////////////////////////////// 분류 관련 /////////////////////////////////////////// function ca_insert() { $sh_id = $this->input->post('sh_id',TRUE); $sql = "select ca_id from `lio_category` where ca_name='".$this->input->post('ca_name')."' order by ca_id desc limit 1"; $query = $this->db->query($sql); $temp_id = $query->num_rows(); if($temp_id>0) { alert_back('동일한 카테고리명이 존재 합니다.'); return false; } $next_id = $this->Next_ca($sh_id); if(strlen($next_id) > 15) { alert_back('5단계이상은 생성할 수 없습니다.'); return false; } $data = array( 'ca_id' => $next_id, 'ca_name' => $this->input->post('ca_name',TRUE), 'weight' => $this->input->post('weight',TRUE) ); $insert = $this->db->insert('lio_category', $data); return $insert; } // 하위 매장 또는 최상위 매장 코드 가져오기 // function Next_ca($parent='') { $length=3; $next_id = $right_pad = $left_pad= null; if(!$parent) { $sql = "select ca_id from `lio_category` where length(ca_id) = $length order by ca_id desc limit 1"; $query = $this->db->query($sql); $temp_id = $query->row(); if(!$temp_id) { $next_id = "101"; }else { $next_id = $temp_id->ca_id + 1; } } else { $son_length = strlen($parent) + $length; $que = "select ca_id from `lio_category` where `ca_id` like '$parent%' and length(ca_id) = $son_length order by ca_id desc limit 1"; $query = $this->db->query($que); $temp_id = $query->row(); if(!$temp_id) { $que = "select ca_id from `lio_category` where `ca_id` like '$parent%' and length(ca_id) = $son_length order by ca_id desc limit 1"; $query = $this->db->query($que); $temp_id = $query->result(); if(!$temp_id) { $next_id = $parent.'001'; }else { $next_id = $temp_id->ca_id + 1; } }else { $right_pad = substr($temp_id->ca_id,-$length); $right_id = $right_pad + 1; for($i=strlen($right_id); $i < $length; $i++) { $left_pad .= '0'; } $next_id = $parent.$left_pad.$right_id; } } return $next_id; }뷰어 <strong>+ 분류 추가</strong> <form method='post' class='form-control' name='form1' action='/admin/shop/category_ok'> <input type='hidden' name='sh_id' value='<?php echo $this->uri->segment(4);?>' /> <input type='hidden' name='modify' value='<?=($this->input->get_post('id',TRUE))?'1':'0';?>' /> <ul> <li><label for='ca_name' class='form_label_title'>분류명</label><input type='text' id='ca_name' name='ca_name' size='50' value='<?php echo set_value('ca_name');?>' placeholder='' autofocus /><br /> <span class='text-red'>분류명을 입력하세요.</span></li> <li><label for='ca_name' class='form_label_title'>순서</label><input type='text' id='weight' name='weight' size='4' value='<?=(isset($list->weight)&&$list->weight)?$list->weight:set_value('weight');?>' /><br /><span class='text-red'>순서를 정하고자 할 경우 숫자를 입력하세요. 낮은 순으로 정렬됩니다.</span></li> <li><input type='submit' class='btn btn-primary' id='submit' value='생성' /></li> </ul> </form> <div><strong>+ 분류 목록</strong></div> <?php echo "<p><a href='".ADM_PATH."/shop/category'>TOP</a></p>"; foreach($list as $ls) { if(strlen($ls->ca_id)=='3') { $space = ''; } else if(strlen($ls->ca_id)=='6') { $space = ' ㄴ'; } else if(strlen($ls->ca_id)=='9') { $space = ' ㄴ'; } else if(strlen($ls->ca_id)=='12') { $space = ' ㄴ'; } else if(strlen($ls->ca_id)=='15') { $space = ' ㄴ'; } echo "<p>$space<a href='".ADM_PATH."/shop/category/".$ls->ca_id."'>".$ls->ca_name."</a></p>"; } ?> </div> 지금은 리스트에서 추가를 누르면 새로 생성되고 리스트 목록에서 해당 분류를 클릭하고 생성하면 그 카테고리 아래에 추가로 생성하는 구조인데 ... 이게 맞는건지 원.... 참고할 만한 구글링에 소스도 그리 많지 않고.... 혼자 헤맬려니 정말 미치겠네요.... |
|||
다음글 | 안녕하세요. ajax input 배열일때 질문드립니다.... (3) | ||
이전글 | 파일upload시 파일사이즈 체크가 안되요 (1) | ||
darkninja
/
2014/09/25 14:31:40 /
추천
0
|
람이
/
2014/09/26 14:44:05 /
추천
0
darkninja님 답변 주셔서 감사합니다.
음 이리 복잡하게 해야 하는거 군요... 휴 ~ 카테고리는 쉬워 질 순 없는건가봐요 ㅠ.ㅜ |
darkninja
/
2014/09/26 15:06:10 /
추천
0
다른걸 사용하더라도
결국은 nested set 과 비슷한 모양이 될겁니다. 이걸 완전히 이해해서 적용한다면 아마도 sql 실력이 한단계 업그레이드 될거 같네요^^ 코딩을 한다면 언젠가는 해야하는거니 이번기회에 해보세요 ㅋ |
https://github.com/olimortimer/ci-nested-sets
이걸 약간 보완해서 사용하는게 나을거 같습니다.
고수정도 되면
자체 라이브러리를 구축할수 있겠지만
일단 무한 카테고리 생성이 되고
검색이 비교적 쉽습니다.
입출력이 많지 않으니 사용하는데 큰 문제는 없을거라 봅니다.
다만 익숙해지는데 시간이 많이 걸립니다.
다른 소스들도 많이 있는데
검색부분으로 들어가면
nested set 말고는 답답한거 같더군요!
이상 개인적인 의견이었습니다.