public function listDOM($page) { $model = new Navigator(); $result = ''; //get biggest level (<4) $maxLv = $model->where('in_page', $page)->max('level'); //count amount root tag $countRoot = $model->where('in_page', $page)->where('level', 0)->count(); $listNavigators = []; //get all Tag from level root(0)-> biggest(3); for ($i = 0; $i <= $maxLv; $i++) { $listNavigators[] = $model->where('in_page', $page)->where('level', $i)->get(['id', 'parent_id', 'uri', 'level', 'name'])->toArray(); } //loop time = amount root tag for ($i = 0; $i < $countRoot; $i++) { //get id ,name of root tag [[0]=>[root=>['id'=>,...],[1]=>['child_lv1'=>['],,]] $result .= '<option value="' . array_get($listNavigators[0][$i], 'id') . '">----'; $result .= array_get($listNavigators[0][$i], 'name'); $result .= '</option>'; //end tag root //check has list child(1) if (isset($listNavigators[1])) { //true, loop = amount child(1) tag for ($j = 0; $j < sizeof($listNavigators[1]); $j++) { //check is child(1) of current root tag if (array_get($listNavigators[1][$j], 'parent_id') == array_get($listNavigators[0][$i], 'id')) { //True, get id ,name of child(1) tag $result .= '<option value="' . array_get($listNavigators[1][$j], 'id') . '">--------'; $result .= array_get($listNavigators[1][$j], 'name'); $result .= '</option>'; //check has list child(2) if (isset($listNavigators[2])) { //true, loop = amount child(2) tag for ($m = 0; $m < sizeof($listNavigators[2]); $m++) { if (array_get($listNavigators[2][$m], 'parent_id') == array_get($listNavigators[1][$j], 'id')) { $result .= '<option value="' . array_get($listNavigators[2][$m], 'id') . '">------------'; $result .= array_get($listNavigators[2][$m], 'name'); $result .= '</option>'; //check has list child(3) if (isset($listNavigators[3])) { //true, loop = amount child(3) tag for ($n = 0; $n < sizeof($listNavigators[3]); $n++) { //check is child(1) of current child(2) tag if (array_get($listNavigators[3][$n], 'parent_id') == array_get($listNavigators[2][$m], 'id')) { $result .= '<option value="' . array_get($listNavigators[3][$n], 'id') . '">----------------'; $result .= array_get($listNavigators[3][$n], 'name'); $result .= '</option>'; $result .= array_get($listNavigators[3][$n], 'name'); } } } } } } } } } } echo $result; }
public function destroyByAjax(Request $request) { $rules = ['navigator' => 'required|exists:navigators,name', 'in_page' => 'required|in:0,1']; $validator = Validator::make($request->all(), $rules); if ($validator->fails()) { return '{"type":"e","message":"Error!"}'; } $inPage = Input::get('in_page'); $navigator = Input::get('navigator'); $arrayNavigator = explode(', ', $navigator); $model = new Navigator(); //true , get id current tag $Parent = Navigator::where('name', 'like', $navigator)->where('in_page', $inPage)->first()->toArray(); $idParent = $Parent['id']; //if current differ root tag allow delete if ($Parent['level'] == 0) { return '{"message":"Cannot delete root!","type":"e"}'; } //check current tag has child yet? $check = Navigator::where('parent_id', 'like', $idParent)->where('in_page', $inPage)->count(); if ($check > 0) { $child = Navigator::where('parent_id', 'like', $idParent)->where('in_page', $inPage)->get()->toArray(); //delete current tag Navigator::where('parent_id', 'like', $idParent)->where('in_page', $inPage)->delete(); foreach ($child as $aChild) { $check = Navigator::where('parent_id', 'like', $aChild['id'])->where('in_page', $inPage)->count(); if ($check > 0) { Navigator::where('parent_id', 'like', $aChild['id'])->where('in_page', $inPage)->delete(); } } } $model->where('name', 'like', $navigator)->where('in_page', $inPage)->delete(); return '{"message":"Delete!","type":"s"}'; }