Save a custom menu.
$menu: An array representing a custom menu:
Modules should always pass a fully populated $menu when saving a custom menu, so other modules are able to output proper status or watchdog messages.
function menu_save($menu) {
$status = db_merge('menu_custom')
->key(array(
'menu_name' => $menu['menu_name'],
))
->fields(array(
'title' => $menu['title'],
'description' => $menu['description'],
))
->execute();
menu_cache_clear_all();
switch ($status) {
case SAVED_NEW:
// Make sure the menu is present in the active menus variable so that its
// items may appear in the menu active trail.
// See menu_set_active_menu_names().
$config = config('system.menu');
$active_menus = $config
->get('active_menus_default') ?: array_keys(menu_get_menus());
if (!in_array($menu['menu_name'], $active_menus)) {
$active_menus[] = $menu['menu_name'];
$config
->set('active_menus_default', $active_menus);
}
module_invoke_all('menu_insert', $menu);
break;
case SAVED_UPDATED:
module_invoke_all('menu_update', $menu);
break;
}
}