day' => '今天 ', 'hour_ago' => '小时前', 'minute_ago' => '分钟前', 'second_ago' => '秒前', ); $lan = array_merge($haya_lan, $lan); if ($seconds > 43200) { if (date('Y-m-d', $timestamp) == date('Y-m-d')) { return $lan['today'].date('H:i:s', $timestamp); } elseif (date('Y-m-d', $timestamp) == date('Y-m-d', strtotime("-1 day"))) { return $lan['yesterday'].date('H:i:s', $timestamp); } elseif (date('Y', $timestamp) == date('Y')) { return date('m-d H:i:s', $timestamp); } else { return date('Y-m-d H:i:s', $timestamp); } } elseif($seconds > 3600) { return floor($seconds / 3600).$lan['hour_ago']; } elseif($seconds > 60) { return floor($seconds / 60).$lan['minute_ago']; } else { return $seconds.$lan['second_ago']; } } ?>,并被新的菜单项代替;false:正常流程 */ function xn_nav_menu_item_set($slot_name, $menu_item, $override = false) { if (empty($slot_name) || empty($menu_item)) { return false; } global $xn_nav_menus; if (!isset($xn_nav_menus)) { $xn_nav_menus = setting_get('abs_nav_menus'); } $xn_current_menu = array(); if (isset($xn_nav_menus[$slot_name])) { //如果槽位不存在,则结束 $xn_current_menu = $xn_nav_menus[$slot_name]; } else { return false; } $s_lid_arr = array_column($xn_current_menu, 'lid'); // 如果传入的是字符串,则检查是否为序列化的 if (is_string($menu_item) && isSerialized(base64_decode($menu_item))) { // 反序列化,希望传入的是正确的 try { $menu_item = unserialize(base64_decode($menu_item)); } catch (\Throwable $th) { die; } // 安全考量,强制检查是否为数组,如果是其他类型,直接结束 if (!is_array($menu_item)) { //message(-1,''); return false; } } // 继续... if (is_array($menu_item)) { if (!$override) { // 正常流程 if (isset($menu_item[0]) && is_array($menu_item[0])) { //如果$menu_item是数组的话 foreach ($menu_item as $value) { $k = array_search($value['lid'], $s_lid_arr); if ($k !== false) { $new_menu_item = array(); $new_menu_item['lid'] = isset($value['lid']) ? $value['lid'] : (isset($xn_current_menu[$k]['lid']) ? $xn_current_menu[$k]['lid'] : ''); $new_menu_item['icon'] = isset($value['icon']) ? $value['icon'] : (isset($xn_current_menu[$k]['icon']) ? $xn_current_menu[$k]['icon'] : ''); $new_menu_item['name'] = isset($value['name']) ? $value['name'] : (isset($xn_current_menu[$k]['name']) ? $xn_current_menu[$k]['name'] : ''); $new_menu_item['title'] = isset($value['title']) ? $value['title'] : (isset($xn_current_menu[$k]['title']) ? $xn_current_menu[$k]['title'] : ''); $new_menu_item['desc'] = isset($value['desc']) ? $value['desc'] : (isset($xn_current_menu[$k]['desc']) ? $xn_current_menu[$k]['desc'] : ''); $new_menu_item['href'] = isset($value['href']) ? $value['href'] : (isset($xn_current_menu[$k]['href']) ? $xn_current_menu[$k]['href'] : ''); $new_menu_item['order'] = isset($value['order']) ? $value['order'] : (isset($xn_current_menu[$k]['order']) ? $xn_current_menu[$k]['order'] : ''); $new_menu_item['class'] = isset($value['class']) ? $value['class'] : (isset($xn_current_menu[$k]['class']) ? $xn_current_menu[$k]['class'] : ''); $new_menu_item['attr'] = isset($value['attr']) ? $value['attr'] : (isset($xn_current_menu[$k]['attr']) ? $xn_current_menu[$k]['attr'] : ''); //如果有新值,就用新值;如果没有新值,就用旧值;如果没有旧值,就用空字符串 $xn_current_menu[$k] = $new_menu_item; } else { continue; } } } else { if (isset($menu_item['lid'])) { $k = array_search($menu_item['lid'], $s_lid_arr); if ($k !== false) { $new_menu_item = array(); $new_menu_item['lid'] = isset($menu_item['lid']) ? $menu_item['lid'] : (isset($xn_current_menu[$k]['lid']) ? $xn_current_menu[$k]['lid'] : 0); $new_menu_item['icon'] = isset($menu_item['icon']) ? $menu_item['icon'] : (isset($xn_current_menu[$k]['icon']) ? $xn_current_menu[$k]['icon'] : ''); $new_menu_item['name'] = isset($menu_item['name']) ? $menu_item['name'] : (isset($xn_current_menu[$k]['name']) ? $xn_current_menu[$k]['name'] : ''); $new_menu_item['title'] = isset($menu_item['title']) ? $menu_item['title'] : (isset($xn_current_menu[$k]['title']) ? $xn_current_menu[$k]['title'] : ''); $new_menu_item['desc'] = isset($menu_item['desc']) ? $menu_item['desc'] : (isset($xn_current_menu[$k]['desc']) ? $xn_current_menu[$k]['desc'] : ''); $new_menu_item['href'] = isset($menu_item['href']) ? $menu_item['href'] : (isset($xn_current_menu[$k]['href']) ? $xn_current_menu[$k]['href'] : ''); $new_menu_item['order'] = isset($menu_item['order']) ? $menu_item['order'] : (isset($xn_current_menu[$k]['order']) ? $xn_current_menu[$k]['order'] : 0); $new_menu_item['class'] = isset($menu_item['class']) ? $menu_item['class'] : (isset($xn_current_menu[$k]['class']) ? $xn_current_menu[$k]['class'] : ''); $new_menu_item['attr'] = isset($menu_item['attr']) ? $menu_item['attr'] : (isset($xn_current_menu[$k]['attr']) ? $xn_current_menu[$k]['attr'] : ''); //如果有新值,就用新值;如果没有新值,就用旧值;如果没有旧值,就用空字符串 $xn_current_menu[$k] = $new_menu_item; } } else { return false; } } $xn_nav_menus[$slot_name] = $xn_current_menu; } else { // 强制使用新的菜单项 $new_menu = array(); foreach ($menu_item as $k => $v) { $new_menu_item = array(); $new_menu_item['lid'] = isset($v['lid']) ? $v['lid'] : 0; $new_menu_item['icon'] = isset($v['icon']) ? $v['icon'] : ''; $new_menu_item['name'] = isset($v['name']) ? $v['name'] : ''; $new_menu_item['title'] = isset($v['title']) ? $v['title'] : ''; $new_menu_item['desc'] = isset($v['desc']) ? $v['desc'] : ''; $new_menu_item['href'] = isset($v['href']) ? $v['href'] : ''; $new_menu_item['order'] = isset($v['order']) ? $v['order'] : 0; $new_menu_item['class'] = isset($v['class']) ? $v['class'] : ''; $new_menu_item['attr'] = isset($v['attr']) ? $v['attr'] : ''; $new_menu_item['submenu'] = isset($v['submenu']) && in_array($v['submenu'], array_keys(xn_nav_menu_get_available_slots())) ? $v['submenu'] : ''; //如果有新值,就用新值;如果没有新值,就用空字符串 $new_menu[$k] = $new_menu_item; } $xn_nav_menus[$slot_name] = $new_menu; } //var_dump($xn_nav_menus[$slot_name]); setting_set('abs_nav_menus', $xn_nav_menus); return true; } } /** * 删除指定菜单槽位的指定菜单项 * * @param string $slot_name 槽位ID * @param string|array $menu_item 菜单项ID */ function xn_nav_menu_item_del($slot_name, $menu_item) { if (empty($slot_name) || empty($menu_item)) { return false; } global $xn_nav_menus; if (!isset($xn_nav_menus)) { $xn_nav_menus = setting_get('abs_nav_menus'); } $xn_current_menu = array(); if (isset($xn_nav_menus[$slot_name])) { //如果槽位不存在,则结束 $xn_current_menu = $xn_nav_menus[$slot_name]; } else { return false; } $s_lid_arr = array_column($xn_current_menu, 'lid'); if (isset($menu_item[0]) && is_array($menu_item[0])) { //如果$menu_item是数组的话 foreach ($menu_item as $value) { $k = array_search($value, $s_lid_arr); if ($k !== false) { unset($xn_current_menu[$k]); } else { continue; } } } else { if ($menu_item != 0) { $k = array_search($menu_item, $s_lid_arr); if ($k !== false) { unset($xn_current_menu[$k]); } } else { return false; } } $xn_nav_menus[$slot_name] = $xn_current_menu; setting_set('abs_nav_menus', $xn_nav_menus); return true; } //========== 【CURD功能结束】 ==========// //========== 【杂项功能开始】 ==========// /** * 获取可用菜单槽位;请尽量使用$abs_nav_menus_slots全局变量,除非无法直接获取$abs_nav_menus_slots,才用该函数 * @return array */ function xn_nav_menu_get_available_slots() { global $abs_nav_menus_slots; return $abs_nav_menus_slots; } /** * 获取可用魔法菜单项;请尽量使用$abs_nav_menus_magic_href,除非无法直接获取$abs_nav_menus_magic_href,才用该函数 * @return array */ function xn_nav_menu_get_available_magic_href() { global $abs_nav_menus_magic_href; return $abs_nav_menus_magic_href; } /** * 将菜单栏位里的内容转换成字符串,用于备份 * * @param string $slot 槽位 * @return string 序列化的数组 */ function xn_nav_menu_slot_items_to_string($slot_name) { $r = xn_nav_menu_get($slot_name); return base64_encode(serialize($r)); } if (!function_exists('isSerialized')) { /** * 是否为序列化的字符串 * * @param string $str * @return bool */ function isSerialized($str) { try { $r = ($str == serialize(false) || @unserialize($str) !== false); } catch (\Throwable $th) { return false; } return $r; } } //========== 【杂项功能结束】 ==========//l'=>$total); return $output; } function fox_tag_words_check($str, &$error){ global $fox_tag_kv; $tag_filter = fox_tag_filter($str); if(!empty($tag_filter['arr']) && !empty($tag_filter['total'])){ $s = implode(',', $tag_filter['arr']); $words_check = !empty($fox_tag_kv['tag_words']) ? explode(',', $fox_tag_kv['tag_words']) : array(); if(!isset($words_check) || !is_array($words_check)){ return false; } foreach($words_check as $v){ if(empty($v)) continue; if(strpos(strtolower($s),strtolower($v)) !== false) { $error = $v; return true; } } return false; } return false; } function fox_tag_str_safe($s) { $s = str_replace(array('\'', '\\', '"', '%', '<', '>', '`', '*', '&', '#'), '', $s); $s = preg_replace('#\s+#', ' ', $s); $s = trim($s); return $s; } /* * 二维数组去掉重复值 array_unique */ function fox_tag_array_unique($array){ $out = array(); if(is_array($array)){ foreach($array as $key=>$value){ if(!in_array($value, $out)){ $out[$key] = $value; } } $out = array_values($out); } return $out; } ?>