大致效果如图客户可以随便编辑菜单;ajax编辑或全部保存操作:
public function getData()
{
$store = $this->getStore();
$data = Option::get('user_center_data', $this->store_id); //获取用户中心菜单数据
$default_data = $this->getDefaultData(); //获取默认数据
if (!$data) {
$data = $default_data; //这几行代码就是精髓所在
} else {
$data = json_decode($data, true);
$data = $this->checkData($data, $default_data);
}
$arr = ['/pages/web/authorization/authorization'];
foreach ($data['menus'] as $i => $menu) {
if ($menu['id'] == 'dianhua') {
$data['menus'][$i]['tel'] = $store->contact_tel;
}
// 去除支付宝不需要的菜单
if ($this->_platform === 'my' && in_array($menu['url'], $arr)) {
unset($data['menus'][$i]);
}
}
$data['menus'] = array_values($data['menus']);
return [
'code' => 0,
'data' => $data,
'menu_list' => $default_data['menus'],
];
}
//下面这部分的代码思想!!!完美;使用2个数组重新规划出一个新数组
public function checkData($list = array(), $default_list = array()) { $new_list = []; foreach ($default_list as $index => $value) { if (isset($list[$index])) { if (is_array($value) && $index != 'menus') { $new_list[$index] = $this->checkData($list[$index], $value); } else { $new_list[$index] = $list[$index]; } } else { $new_list[$index] = $value; } } return $new_list; }