ecshop函数大全

合集下载

ecshop无限级分类的解析

ecshop无限级分类的解析

[php]function cat_options($spec_cat_id, $arr){static $cat_options = array();if (isset($cat_options[$spec_cat_id])){return $cat_options[$spec_cat_id];}/*初始化关键参数:$level:当前子节点深度$last_cat_id:当前父节点ID$options:带有缩进级别的数组$cat_id_array:沿同一路径的父节点依次进驻$level_array:该节点的子节点深度,也是依次进驻*/if (!isset($cat_options[0])){$level = $last_cat_id = 0;$options = $cat_id_array = $level_array = array();while (!empty($arr))//如果还有待构造的节点则继续遍历{foreach ($arr AS $key => $value){$cat_id = $value['cat_id'];//一级分类结点if ($level == 0 && $last_cat_id == 0){if ($value['parent_id'] > 0){break;}$options[$cat_id] = $value;$options[$cat_id]['level'] = $level;$options[$cat_id]['id'] = $cat_id;$options[$cat_id]['name'] = $value['cat_name'];//遍历过了就不再遍历unset($arr[$key]);if ($value['has_children'] == 0){continue;}$last_cat_id = $cat_id;//下层结点的父亲结点$cat_id_array = array($cat_id);$level_array[$last_cat_id] = ++$level;continue;}//当前结点的父亲结点ID等于它的上一级结点IDif ($value['parent_id'] == $last_cat_id){$options[$cat_id] = $value;$options[$cat_id]['level'] = $level;$options[$cat_id]['id'] = $cat_id;$options[$cat_id]['name'] = $value['cat_name'];unset($arr[$key]);//遍历过了就不再遍历//如果当前结点有孩子则当前结点要进驻,但不再遍历;反之不进驻也不再遍历if ($value['has_children'] > 0){if (end($cat_id_array) != $last_cat_id){$cat_id_array[] = $last_cat_id;}$last_cat_id = $cat_id;//当现结点做为下一级结点的新的父亲结点$cat_id_array[] = $cat_id;//进驻$level_array[$last_cat_id] = ++$level;//当前结点的下一级结点深度}}elseif ($value['parent_id'] > $last_cat_id){//如果当前结点父亲深度大于目前父亲结点的深度则进行下一轮循环break;}}//endforeach$count = count($cat_id_array);if ($count > 1){//取出最后进驻的父亲节点作为当前父亲节点$last_cat_id = array_pop($cat_id_array);}elseif ($count == 1){if ($last_cat_id != end($cat_id_array)){//进驻的父亲结点只有一个时并且没有作为当前父亲节点时把它取出$last_cat_id = end($cat_id_array);}else{ //否则最后取出的父亲结点一定是一级分类结点$level = 0;$last_cat_id = 0;$cat_id_array = array();continue;}}if ($last_cat_id && isset($level_array[$last_cat_id])){//取出当前结点的深度$level = $level_array[$last_cat_id];}else{$level = 0;}}//end while,此时已完成非递归前序遍历构造树的工作,其中$options已保存了从根结点开始的所有结点带有分层性质的数组$cat_options[0] = $options;}else{$options = $cat_options[0];}//如果从0开始即取整个树则直接返回不再处理.if (!$spec_cat_id){return $options;}//否则开始从指定结点截取,以下比较简单我还是稍微说说吧,要说就说几个参数含义吧/*$spec_cat_id_level:截取结点的深度$spec_cat_id_array:最终返回的以该结点为根结点的一棵商品分类树最终返回的数组是这样排序的:按父亲结点大小,按直接父亲结点,按同一父亲结点这样的先根遍历,具个例子:一级结点有1,5 二级结点有2,6,7 三级结点有8,9,如果1的直接孩子是2,6而2的直接孩子是8,9;另外5的直接孩子是7那么最终的数组是这样排列的1->2->8->9->6->5->7*/else{if (empty($options[$spec_cat_id])){return array();}$spec_cat_id_level = $options[$spec_cat_id]['level'];foreach ($options AS $key => $value){if ($key != $spec_cat_id){unset($options[$key]);}else{break;}}$spec_cat_id_array = array();foreach ($options AS $key => $value){if (($spec_cat_id_level == $value['level'] && $value['cat_id'] != $spec_cat_id) || ($spec_cat_id_level > $value['level'])){break;}else{$spec_cat_id_array[$key] = $value;}}$cat_options[$spec_cat_id] = $spec_cat_id_array;return $spec_cat_id_array;}}[/php]。

ecshop调用特定数量的特定分类的推荐、最新及精品商品

ecshop调用特定数量的特定分类的推荐、最新及精品商品

ecshop调用特定数量的特定分类的推荐、最新及精品商品最近都在搞ECSHOP的程序,网站建设过程中难免碰到网店等的网页网页设计,下面是关于ecshop调用特定数量的特定分类的推举产品的解决办法,数量的控制:【修改 lib_goods. 中 get_recommend_goods 函数, $num = get_library_number($data);挺直为$num赋值,就跳过了模板对推举数量的调用了】假如要自定义一个数量,在get_recommend_goods函数后多加一个可选参数,$rec_number=0 代码改为 if($rec_number==0) $num = get_library_number($data);ee $num = $rec_number; 关于分类的控制:在ind.php找到$smarty- assign( new_goods , get_recommend_goods( new )); // 最新商品修改为下面代码即可 $children = get_children(黄龙玉的大类ID); $smarty- assign( new_goods ,get_egory_recommend_goods( new , $children)); 试验胜利,详细步骤:【1、】lib_goods.php 函数get_category_recommend_goods,增强第三位参数$cat_num = 0 把$num =get_library_number($type2lib[$type]); 改为: if($cat_num==0) $num = get_library_number($type2lib[$type]); else $num = $cat_num; 【2、】index.php $children41 = get_children(41);第1页共1页。

ecshop计算各种价格函数

ecshop计算各种价格函数

ecshop计算各种价格函数function get_final_price($goods_id, $goods_num = '1', $is_spec_price = false, $spec = array()) {$final_price = '0'; //商品最终购买价格$volume_price = '0'; //商品优惠价格$promote_price = '0'; //商品促销价格$user_price = '0'; //商品会员价格//取得商品优惠价格列表$price_list = get_volume_price_list($goods_id, '1');if (!empty($price_list)){foreach ($price_list as $value){if ($goods_num >= $value['number']){$volume_price = $value['price'];}}}//取得商品促销价格列表/* 取得商品信息 */$sql = "SELECT g.promote_price, g.promote_start_date, g.promote_end_date, "."IFNULL(er_price, g.shop_price * '" . $_SESSION['discount'] . "') AS shop_price "." FROM " .$GLOBALS['ecs']->table('goods'). " AS g "." LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp "."ON mp.goods_id = g.goods_id AND er_rank = '" . $_SESSION['user_rank']. "' "." WHERE g.goods_id = '" . $goods_id . "'" ." AND g.is_delete = 0";$goods = $GLOBALS['db']->getRow($sql);/* 计算商品的促销价格 */if ($goods['promote_price'] > 0){$promote_price = bargain_price($goods['promote_price'], $goods['promote_start_date'], $goods['promote_end_date']);}else{$promote_price = 0;}//取得商品会员价格列表$user_price = $goods['shop_price'];//比较商品的促销价格,会员价格,优惠价格if (empty($volume_price) && empty($promote_price)){//如果优惠价格,促销价格都为空则取会员价格$final_price = $user_price;}elseif (!empty($volume_price) && empty($promote_price)){//如果优惠价格为空时不参加这个比较。

ecshop二次开发

ecshop二次开发

ecshop订单操作的状态对应的值ecshop电子商务系统中,ECSHOP的订单有很多的状态。

这些状态,是维持和保证ECSHOP后台操作订单状态转换的依据。

order_status = 0表示订单未确认order_status = 1表示订单已经确认order_status = 2表示订单已经取消pay_status = 0表示未付款pay_status = 2表示已付款shipping_status = 3表示已配货shipping_status = 1表示已发货shipping_status = 2表示已收货总结以上ecshop订单的状态,方便开发人员总结开发操作。

、Ecshop 前台显示已售出的数量category.php下面的category_get_goods函数中foreach循环添加$arr[$row['goods_id']]['count'] = selled_count($row['goods_id']);文件的最后部分添加函数function selled_count($goods_id){$sql= "select sum(goods_number) as count from ".$GLOBALS['ecs']->table('order_goods')."where goods_id ='".$goods_id."'";$res = $GLOBALS['db']->getOne($sql);if($res>0){return $res;}else{return('0');}模板goods_list.lbi<a href="javascript:;" id="compareLink"html"}','{$goods.type}')" class="f6">{$pare}</a> 下添加销售量:{$goods.count}如何轻松实现ecshop不同商品调用不同模板我们这里就按照分类来调用模板假如有4个分类CAT_ID 为 1 2 3 4对应的模板 goods.dwt goods1.dwt goods2.dwt goods3.dwt那麽在 goods.php中找到$smarty->display('goods.dwt', $cache_id);switch ($goods['cat_id']){case 1:$smarty->display('goods.dwt', $cache_id);break;case 2:$smarty->display('goods1.dwt', $cache_id);break;case 3:$smarty->display('goods2.dwt', $cache_id);break;case 4:$smarty->display('goods3.dwt', $cache_id);break;}如何将ecshop会员注册页的E-MAIL由必填项改为非必填项看到论坛里有不少朋友发帖询问解决办法,故共享之。

ecshop购买数量的加减按钮,加一个减一个代码,商品数量加减代码

ecshop购买数量的加减按钮,加一个减一个代码,商品数量加减代码

ecshop购买数量的加减按钮,加一个减一个代码,商品数量加减代码方法一:1.复制以下JS代码,添加到 js/common.js 的最后function cart_number(txt_id, type, num){ num = num || 1;var txt = document.getElementByIdx_x_x(txt_id);var source_num = parseInt(txt.value);if (source_num == 1 && type == '-'){alert('请最少购买一个商品');return;}var to_num = source_num;if (type == '+'){to_num += num;}else if (type == '-'){to_num -= num;}txt.value = to_num;showdiv(txt);}2.在flow.dwt中找到购买数量的文本框,在他的前后分别加上<ahref="javascript:cart_number('goods_number_{$goods.rec_id}', '-');">-</a><ahref="javascript:cart_number('goods_number_{$goods.rec_id}', '+');">+</a>方法二:在flow.dwt中找到购买数量的文本框,在他的前后分别加上<IMG style="PADDING-LEFT: 0px; CURSOR: pointer"onclick='if(document.getElementByIdx_x("number").value>1){document.g etElementByIdx_x("number").value--;}'src="images/down.gif" ><INPUT id=number style="WIDTH: 40px; TEXT-ALIGN: right" maxLength=4value=1 name=cart_quantity><IMG style="PADDING-RIGHT: 30px; MARGIN: 0px; WIDTH: 25px; CURSOR: pointer" onclick='document.getElementByIdx_x("number").value ++;'src="images/up.gif" >。

教你ecshop如何调用指定分类下的精品产品列表

教你ecshop如何调用指定分类下的精品产品列表

教你ecshop如何调用指定分类下的精品产品列表教你ecshop如何调用指定分类下的精品产品列表(2012-03-03 11:59:07)转载▼标签:调用循环次数纵向分类: ecshop列表精品杂谈原理其实很简单,根据ecshop分类id读取产品列表下,属于精品部分的产品,分析好原理后,我们开始来写代码:goods.php//// 获得cat_id精品列表。

//// @access private// @param integer// @return array//function index_get_cat_id_goods_best_list($cat_id, $num){$sql = 'Select g.goods_id, g.goods_name, g.goods_name_style, g.market_price, g.shop_price, g.promote_price, ' ."promote_start_date, promote_end_date, g.goods_brief, g.goods_thumb, goods_img, " ."g.is_best, g.is_new, g.is_hot, g.is_promote " .'FROM ' . $GLOBALS['ecs']->table('goods') . ' AS g ' ."Where g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 AND g.is_best = 1 AND g.cat_id = '$cat_id'"." LIMIT $num";$res = $GLOBALS['db']->getAll($sql);$goods = array();foreach ($res AS $idx => $row){$goods[$idx]['id'] = $row['article_id'];$goods[$idx]['id'] = $row['goods_id'];$goods[$idx]['name'] = $row['goods_name'];$goods[$idx]['brief'] = $row['goods_brief'];$goods[$idx]['brand_name'] = $row['brand_name'];$goods[$idx]['goods_style_name'] = add_style($row['goods_name'],$row['goods_name_style']);$goods[$idx]['short_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ?sub_str($row['goods_name'],$GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];$goods[$idx]['short_style_name'] = add_style($goods[$idx]['short_name'],$row['goods_name_style']);$goods[$idx]['market_price'] = price_format($row['market_price']);$goods[$idx]['shop_price'] =price_format($row['shop_price']);$goods[$idx]['thumb'] = empty($row['goods_thumb']) ? $GLOBALS['_CFG']['no_picture'] : $row['goods_thumb'];$goods[$idx]['goods_img'] = empty($row['goods_img']) ? $GLOBALS['_CFG']['no_picture'] : $row['goods_img'];$goods[$idx]['url'] = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);}return $goods;}声明后用$smarty调用$smarty->assign('cat_id2_best_goods',index_get_cat_id_goods_best_list(2,4));//2指分类id,4指循环次数然后就可以在dwt模板文件里开始调用了具体调用方法有两种,因为产品调用要是先js调用的效果的话,就是有H和V两种,图片价格和文字标题两种.如果是横向调用4个产品,带图片价格等.可以这样写<!--{foreach from=$cat_id2_best_goods item=goods}--><div class="goodsItem" style="float:left ; margin-left:10px;" ><a href="{$goods.url}"><img src="{$goods.thumb}" alt="{$|escape:html}" class="goodsimg" width="100" height="100" /></a><br /><p><a href="{$goods.url}" title="{$|escape:html}">{$goods.short_name|trunca te:7:true}</a></p><div class="shop_s" style="text-align:center; color:#CC0000" ><strong>{$goods.shop_price}</strong></div></div><!--{/foreach}-->如果需要调用纵向标题列表的话只需要把item=goods修改成item=list,然后删掉不需要的调用代码即可<!--{foreach from=$cat_id11_best_goods item=list}--><li><a href="{$list.url}" title="{$|escape:html}">{$|truncate:15:true}</ a></li><!--{/foreach}-->其实横向纵向的排列方式在模板文件里修改也可以,但方法都一样,就是在css里修改.加个float:left即可.。

cms与ecshop知识点总结

cms与ecshop知识点总结

2)、
解决方法:
调换一下两个函数的前后位置即可。
以 includes/modules/payment/alipay.php 为例:
将下面这两个函数的位置互换一下就OK了,__construct()在前,alipay()在后
function alipay(){
}
function __construct()
//字符串和数字都适用 使用异或运算
$a='a';
$b='b';
echo '交换前 $a:'.$a.',$b:'.$b.'<br />';
$a=$a^$b;
$b=$b^$a;
$a=$a^$b;
echo '交换后$a:'.$a.',$b:'.$b.'<br />';
echo '-----------------------<br/>';
{
$this->alipay();
}
复制代码,改成:
function __construct()
{
$this->alipay();
}
function alipay(){
}
大功告成。
phpcmsV9.5.8
商城:ecshop、shopex
论坛:主要两大类:phpwind(阿里巴巴) discuz(腾讯)
内容管理系统(CMS):phpcms v9
dedecms cms 织梦
php168、帝国cms.

ECSHOP常用后台SQL命令

ECSHOP常用后台SQL命令

ECSHOP常用后台SQL命令ECSHOP常用后台SQL命令并非适用于所有人。

特别注意:操作前注意备份好数据库。

(1)ECSHOP更新商品静态url:UPDATE ec272u2.ecs_goods SET goods_url = '4545444' WHERE ecs_goods.goods_id =3509 LIMIT 1 ;(2)ECSHOP更新商品seo标题:ALTERTABLE ecs_category ADD cat_seoname VARCHAR( 255 ) NOTNULLAFTER cat_seoname(3)ECSHOP更新商品clicks_count到小于800的点击:UPDATE [Case] SET click_count = click_count + CAST(CEILING(RAND(checksum(NEWID())) * 800) AS int) WHERE (Hits < 100) ;UPDATE ecs_goods SET click_count = click_count + 100 WHERE (click_count < 100);(4) ECSHOP更新商品salesvolume AND (/**FLOOR(x)返回小于x的最大整数值 RAND() 返回在范围0到1.0内的随机浮点值2。

ALTERTABLE ecs_goods ADD goods_salesvolume inNULLods_weight ;UPDATE ecs_goods set goods_salesvolume= FLOOR(1 +(RAND() * 2345));(5) ECSHOP批量更新替换货号UPDATE ecs_goods SET goods_sn = CONCAT('it',goods_id,'-', seller_note) where ;(6) ECSHOP更新订单初始基数,批量上下架alter table ecs_order_info AUTO_INCREMENT=10000;UPDATE ecs_goods SET is_on_sale = 1 where goods_id > ;(7)ECSHOP批量更新替换商品名称UPDATE ecs_goods SET goods_name = replace (goods_name,'Kate Co','') WHERE goods_name` LIKE '%Kate&Co%'; 分大小写请注意:操作会直接影响数据库,以防万一,请操作前注意备份。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

所有函数功能说明:lib_time.phpgmtime()P: 获得当前格林威治时间的时间戳/$0server_timezone()P: 获得服务器的时区/$0local_mktime($hour = NULL , $minute= NULL, $second = NULL, $month = NULL, $day = NULL, $year = NULL)P: 生成一个用户自定义时区日期的GMT时间戳local_date($format, $time = NULL)P: 将GMT时间戳格式化为用户自定义时区日期gmstr2time($str)P: 转换字符串形式的时间表达式为GMT时间戳local_strtotime($str)P: 将一个用户自定义时区的日期转为GMT时间戳local_gettime($timestamp = NULL)P: 获得用户所在时区指定的时间戳local_getdate($timestamp = NULL)P: 获得用户所在时区指定的日期和时间信息lib_base.phpsub_str($str, $length = 0, $append = true)P: 截取UTF-8编码下字符串的函数real_ip()P: 获得用户的真实IP地址str_len($str)P: 计算字符串的长度(汉字按照两个字符计算)get_crlf()P: 获得用户操作系统的换行符send_mail($name, $email, $subject, $content, $type = 0, $notification=false) P: 邮件发送gd_version()P: 获得服务器上的GD 版本file_get_contents($file)P: 如果系统不存在file_get_contents函数则声明该函数file_put_contents($file, $data, $flags = ”)P: 如果系统不存在file_put_contents函数则声明该函数floatval($n)P: 如果系统不存在floatval 函数则声明该函数file_mode_info($file_path)P: 文件或目录权限检查函数log_write($arg, $fi le = ”, $line = ”)P: 写入日志内容make_dir($folder)P: 检查目标文件夹是否存在,如果不存在则自动创建该目录gzip_enabled()P: 获得系统是否启用了gzipaddslashes_deep($value)P: 递归方式的对变量中的特殊字符进行转义addslashes_deep_obj($obj)P: 将对象成员变量或者数组的特殊字符进行转义stripslashes_deep($value)P: 递归方式的对变量中的特殊字符去除转义make_semiangle($str)P: 将一个字串中含有全角的数字字符、字母、空格或‟%+-()‟字符转换为相应半角字符check_file_type($filename, $realname = ”, $limit_ext_types = ”)P: 检查文件类型/文件名/真实文件名/允许的文件类型mysql_like_quote($str)P: 对MYSQL LIKE 的内容进行转义过滤掉_ %等字符.real_server_ip()P: 获取服务器的ipecs_header($string, $replace = true, $http_response_code = 0)P: 自定义header 函数,用于过滤可能出现的安全隐患ecs_iconv($source_lang, $target_lang, $source_string = ”)P: 自定义的编码转换ecs_geoip($ip)P: 取得IP的地址,采用IP库trim_right($str)P: 去除字符串右侧可能出现的乱码move_upload_file($file_name, $target_name = ”)P: 将上传文件转移到指定位置json_str_iconv($str)P: 将JSON传递的参数转码get_file_suffix($file_name, $allow_type = array())P: 获取文件后缀名,并判断是否合法read_static_cache($cache_name)P: 读结果缓存文件write_static_cache($cache_name, $caches)P: 写结果缓存文件lib_common.php (公用函数库)db_create_in($item_list, $field_name = ”)P: 创建像这样的查询: “IN(…a‟,‟b‟)” $item_list为数组is_email($user_email)P: 验证输入的邮件地址是否合法is_time($time)P: 检查是否为一个合法的时间格式assign_query_info()P: 获得查询时间和次数,并赋值给smartyregion_result($parent, $sel_name, $type)P: 创建地区的返回信息get_regions($type = 0, $parent = 0)P: 获得指定国家的所有省份, 函数需要数据库支持.get_shipping_config($area_id)P: 获得配送区域中指定的配送方式的配送费用的计算参数比如快捷公司不同.init_users()P: 初始化会员数据整合类cat_list($cat_id = 0, $selected = 0, $re_type = true, $level = 0, $is_show_all = true) P: 获得指定分类下的子分类的数组, $re_type控制返回类型cat_options($spec_cat_id, $arr)P: 过滤和排序所有分类,返回一个带有缩进级别的数组load_config()P: 载入配置信息get_brand_list()P: 取得品牌列表get_brands($cat = 0, $app = …brand‟)P: 获得某个分类下的品牌列表get_promotion_info($goods_id = ”)P: 所有的促销活动信息get_children($cat = 0)P: 获得指定分类下所有底层分类的IDget_article_children ($cat = 0)P: 获得指定文章分类下所有底层分类的IDget_mail_template($tpl_name)P: 获取邮件模板order_action($order_sn, $order_status, $shipping_status, $pay_status, $note = ”, $username = null)P: 记录订单操作记录price_format($price, $change_price = true)P: 格式化商品价格get_virtual_goods($order_id, $shipping = false)P: 返回订单中的虚拟商品记录是否发货.virtual_goods_ship(&$virtual_goods, &$msg, $order_sn, $return_result = false, $process = …other‟)P: 虚拟商品发货virtual_card_shipping ($goods, $order_sn, &$msg, $process = …other‟)P: 虚拟卡发货virtual_card_result($order_sn, $goods)P: 返回虚拟卡信息get_snatch_result($id)P: 获取指定id snatch 活动的结果clear_tpl_files($is_cache = true, $ext = ”)P: 清除指定后缀的模板缓存或编译文件clear_compiled_files($ext = ”)P: 清除模版编译文件clear_cache_files($ext = ”)P: 清除缓存文件clear_all_files($ext = ”)P: 清除模版编译和缓存文件smarty_insert_scripts($args)P: 页面上调用的js文件,组合功能.smarty_create_pages($params)P: 创建分页的列表build_uri($app, $params, $append = ”, $page = 0, $size = 0)P: 重写URL 地址formated_weight($weight)P: 格式化重量log_account_change($user_id, $user_money = 0, $frozen_money = 0, $rank_points = 0, $pay_points = 0, $change_desc = ”, $change_type = ACT_OTHERP: 记录帐户变动article_cat_list($cat_id = 0, $selected = 0, $re_type = true, $level = 0)P: 获得指定分类下的子分类的数组/ 向下取数组.article_cat_options($spec_cat_id, $arr)P: 过滤和排序所有文章分类,返回一个带有缩进级别的数组uc_call($func, $params=null)P: 调用UCenter的函数exception_handler($errno, $errstr, $errfile, $errline)P: error_handle回调函数未启用.get_image_path($goods_id, $image=”,$thumb=false, $call=‟goods‟, $del=false)P: 重新获得商品图片与商品相册的地址user_uc_call($func, $params = null)P: 调用使用UCenter插件时的函数get_volume_price_list($goods_id, $price_type = …1′)P: 取得商品优惠价格列表get_final_price($goods_id, $goods_num = …1′, $is_spec_price = false, $spec = array())P: 取得商品最终使用价格get_package_info($id) get_package_goods($package_id)P: 获取指定id package 的信息P: 获得指定礼包的商品lib_main.php (前台公用函数库)update_user_info()P: 更新用户SESSION,COOKIE及登录时间、登录次数。

相关文档
最新文档