首页
Search
1
解决 docker run 报错 oci runtime error
49,410 阅读
2
WebStorm2025最新激活码
27,763 阅读
3
互点群、互助群、微信互助群
22,811 阅读
4
常用正则表达式
21,583 阅读
5
罗技鼠标logic g102驱动程序lghub_installer百度云下载windows LIGHTSYNC
19,582 阅读
自习室
CODER
课程
SEO
学习视频
手册资料
呆萌
工具软件
运维
DBA
互通有无
资源
微信群
激活工具
搞钱日记
养生记
包罗万象
Search
标签搜索
DeepSeek
学习指北
Prompt
提示词
广州IT企业集中区域租房攻略
广州程序员租房指南
天河软件园附近租房
琶洲腾讯阿里周边租房
广州科学城租房推荐
广州租房避坑
广州地铁沿线租房
IT人租房预算
广州人才引进落户
2025年广州入户最新政策
广州学历入户办理流程
广州户口条件
广州集体户口
广州社保要求
入户指标卡
职称入户广州
Loong
累计撰写
255
篇文章
累计收到
0
条评论
首页
栏目
自习室
CODER
课程
SEO
学习视频
手册资料
呆萌
工具软件
运维
DBA
互通有无
资源
微信群
激活工具
搞钱日记
养生记
包罗万象
页面
搜索到
255
篇与
的结果
2019-03-02
【Git GUI】TortoiseGit 64位 小乌龟
提取码:g1jr 1 TortoiseGit简介tortoiseGit是一个开放的git版本控制系统的源客户端,支持Winxp/vista/win7.该软件功能和git一样不同的是:git是命令行操作模式,tortoiseGit界面化操作模式,不用记git相关命令就可以直接操作,读者可根据自己情况选择安装 2 TortoiseGit下载 当前最新稳定版本是2.6.0,下面就以该版本为例说明下载和安装。进入2.6.0.0之后可看到包含32位和64位的软件安装包下载,以及各种语言安装包,根据自己的系统选择对应的安装包,笔者主机是win7 64位。就以64位为例语言包下载安装根据个人习惯,默认是英文(推荐),需要中文的下载语言包安装即可 3 TortoiseGit安装安装顺序:先安装程序包,然后安装语言包(LanguagePack).安装说明:因为TortoiseGit 只是一个程序壳,必须依赖一个 Git Core,所以安装前请确定已完成git安装和配置下面以64位版本为演示3.1 安装程序包双击TortoiseGit-2.6.0.0-64bit.msi,弹出安装导向页面 一路Next> 即可,配置均选择默认 点击Install 点击Finish,如果以前有老版本,则选择覆盖,关闭旧程序并尝试重启即可 3.2 安装语言包如果想使用英文版本的该工具,不想使用中文版本的,则该模块操作可忽略双击TortoiseGit-LanguagePack-2.6.0.0-64bit-zh_CN.msi,弹出安装导向 点击下一步,安装完成后,点击完成 4 TortoiseGit配置4.1 常规配置先选择一个本地的目录,作为git项目存放的目录,方便管理。本文选择: E:\project\clear-project,建议:路径中不要包含中文 在空白处点击鼠标右键, 选择 --> TortoiseGit --> Settings, 弹出配置界面(当TortoiseGit安装完成后,鼠标右键点击后,默认出现 TortoiseGit 相关选项) 点击General,在页面中选择Language下拉框,选择“中文(简体)中华人名共和国”,然后点击应用,确定关闭对话框(当然也可以继续使用英文) 如果使用英文:该步骤和下一步骤可直接跳过在空白处再次点击鼠标右键,可以看到弹出菜单中已经变成中文. 原来的 Settings 变成 设置; Clone 变为 克隆,点击设置(S),再次弹出配置界面配置右键菜单. 在设置对话框中,点选左边的"右键菜单",如果右边的复选框有默认勾选,全部去掉,,这样右键菜单显得比较干净 点击左边Git,配置相关信息,配置好后保存退出 ①因为当前还没有本地项目,所以 “编辑本地 .git/config(L)” 按钮处于灰色不可用状态,如果在某个本地Git项目下打开配置对话框,那么这个按钮就可用,然后就可以编辑此项目的一些属性。 ②点击 “编辑全局 .git/config(O)”按钮,会使用记事本打开全局配置文件,在全局配置文件中,在后面加上下面的内容: [user] name = jinqi email =
[email protected]
signingkey = lht&123456 [credential] helper = store 则当你推送项目到Gitlab等在线仓库时,会记住你输入的用户名和密码(这里不是用户的姓名和Email),这里用户名和密码就是注册gitlab的用户名和密码 name: 注册gitlab的账号,如: jinqi signingkey: 注册gitlab的密码: ********* Email: 是联系邮箱,给别人联系时使用 4.2 秘钥配置前面已经提到TortoiseGit只是一个壳,除软件的常规配置(语言包、用户信息等),还需要像git一样生成、配置秘钥信息开始-->TortoiseGit-->PuTTYgen,进入PuTTY Key Generator 点击Generate,生成的过程中 注意:生成时鼠标要不停划过进度条,不然进度条会一直不动! 先点击Save private key把私有的密钥存起来,记住存储的位置,后面会用到 把生成出来的public Key复制粘贴到Gitlab上面,配置SSH key Gitlab配置成功后,邮箱会收到邮件 打开:开始-->TortoiseGit-->Pageant,打开以后右下角会有图标,双击点开蓝屏幕电脑那个图标 说明:使用TortoiseGit进行和远端输出项目时,Pageant必须启动且添加了对应的私钥。否则会报错 添加前面生成的private key.ppk,也就是私钥。然后关闭 5 TortoiseGit使用示例以克隆verify-center项目为例,举例验证TortoiseGit配置正确注意:克隆代码之前确保有相关的项目代码权限(master、developer、reporter),如无权限,请求项目具有master权限的同事帮忙分配权限登录gitlab,获取SSH 链接地址 在本地目标下载目录下,右键-->TortoiseGit(T)-->克隆,粘贴SSH 链接地址到URL,点击确定 确认项目已从gitlab上克隆到本地
2019年03月02日
5,335 阅读
0 评论
26 点赞
2019-03-02
ThinkPHP5.1完全开发手册
https://www.kancloud.cn/manual/thinkphp5_1/353946 ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,自2006年诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用和API开发提供了强有力的支持。
2019年03月02日
6,301 阅读
0 评论
9 点赞
2019-02-17
PHP7新特性
PHP7中也增加了一些新的语法,这些语法的使用也能对提高性能有帮助。1.标量参数类型声明 现在支持字符串(string)、整型(int)、浮点数(float)、及布尔型(bool)参数声明,以前只支持类名、接口、数组及Callable两种风格:强制转换模式(默认)与严格模式。<?php function sum(int ...$numbers){ var_dump($numbers); return array_sum($numbers); } echo sum("18","9984");运行结果如下: 以string类型传入的值会被强制转换为int类型,若类型转换失败会抛出错误。2.返回类型声明<?php function test():array { return [456,996]; } var_dump(test());运行结果:若返回值类型不为预设类型则报错:<?php function test():array { return 666; } var_dump(test());3.??运算符 ?? 用于替代需要isset的场合,这是一个语法糖。<?php $id = isset($_GET['id']) ? $_GET['id'] : null; $id = $_GET['id'] ?? null; 这两种写法是等效的。4.比较运算符 就是看两个表达式值的大小,三种关系: = 返回0、< 返回-1、 > 返回 1<?php echo 1 2; //-1 echo 1 1; //0 echo 2 1; //15.define支持定义数组类型的值 php 5.6已经支持CONST 语法定义数组类的常量,PHP7中支持define语法。"lili", "age"=>18]); var_dump(human);6.匿名类write();7.增加了整除函数 intdiv 对除法结果取整<?php echo intdiv(10,3); //输出3小结:性能提升:PHP 7要比PHP 5.6快两倍;全面一致的64位支持;新增了空接合操作符(??)。
2019年02月17日
5,729 阅读
0 评论
13 点赞
2019-02-17
PHP生成随机标识
用于微信小程序接口开发中生成3rd_session。/*** 生成随机标识*@param$len*@returnmixed|string*/public functionrandomFromDev($len) { $fp= @fopen('/dev/urandom','rb'); $result=''; if($fp!==FALSE) { $result.= @fread($fp,$len); @fclose($fp); }else{ trigger_error('Can not open /dev/urandom.'); } if(empty($result))$result= md5(mt_rand(111111111,999999999));//兼容 $result= base64_encode($result);// convert from binary to string $result= strtr($result,'+/','-_');// remove none url chars returnsubstr($result,0,$len);}
2019年02月17日
5,437 阅读
0 评论
4 点赞
2019-02-16
商品sku匹配及属性可选状态
最近在做商品sku的时候遇到了一些困惑,记录一下,以备日后会看。 先说一说需求: 1.根据选中的SKU,显示对应的SKU图片,没有选中的SKU时,默认展示SPU商品图,单击放大预览; 2.每个属性下属性值有多个时,默认不选,只有一个时,默认选中; 3.后台没有设置SKU时,则无属性值展示; 4.选中交互:选中某一个属性下属性值时,检查其他属性的属性值,哪些不能组合为一个SKU,不能组合的属性值只读,原选中的则取消选中。 已上就是给出的文字需求,在需求讨论的时候产品定了调调,通过既定的属性去确定一个sku,即所有未选择的属性假定一个初始值。一听心里乐了,所有选中的属性都已知,排序之后再匹配不就是轻松确定sku了嘛,美滋滋。/** * 获取商品sku属性(初始默认选中,已经被否了呀) */ public function goods_sku_version_1 (){ $goodsId = $this->post['goods_id'] or $this->response(201, 'goods_id不能为空'); $catId = mall_database_execute('goods') ->where(['goods_id' => $goodsId, 'is_on_sale'=> 1, 'is_delete' => 0]) ->getField('goods_type') or $this->response(208, '商品不存在'); //构建查询条件 $where = ['gs.goods_id'=> $goodsId]; $attrArr = []; if (!empty($this->post['attr_id'])){ $attrArr = explode(',', $this->post['attr_id']); sort($attrArr); //升序 $where['gs.attr_id_arr'] = implode(',', $attrArr); } //获取sku信息 $this->rows['info'] = mall_database_execute('goods_sku')->alias('AS gs') ->where($where) ->find() or $this->response(208, 'sku不存在'); if (empty($this->post['attr_id'])) $attrArr = explode(',', $this->rows['info']['attr_id_arr']); //获取顶级sku列表 $this->rows['attribute'] = mall_database_execute('goods_sku_list')->alias('AS gsl') ->field('ga.attr_id, ga.attr_type, ga.attr_name, gsl.attr_values_arr') ->join(mall_database_table('goods_attribute').' AS ga ON ga.attr_id = gsl.attr_id', 'LEFT') ->where([ 'gsl.goods_id' => $goodsId, 'gsl.status' => 1 ]) ->select() ? : ''; if (!empty($this->rows['attribute'])){ //通过二定一待,确定sku foreach ($this->rows['attribute'] as $k=>&$v){ $newAttrArr = $attrArr; $newAttrArr[$k] = '%'; $str = implode(',', $newAttrArr); $v['option'] = mall_database_execute('goods_sku') ->field('goods_sku_id,attr_id_arr,status' ) ->where([ 'goods_id' => $goodsId, 'attr_id_arr' => ['LIKE', $str] ]) ->select(); if (!empty($v['option'])){ foreach ($v['option'] as &$vo){ $newAttrArr = explode(',', $vo['attr_id_arr']); $attrInfo = mall_database_execute('goods_attribute') ->field('attr_id, attr_type, attr_name') ->where([ 'attr_id' => $newAttrArr[$k] ]) ->find(); unset($vo['attr_id_arr']); $vo = array_merge($attrInfo, $vo); } } } } $this->response(); } 本以为这样就完事了,结果没过多久需求就改了,不假定每个属性的初始值,根据用户当前选择动态匹配sku,GG。这个方案一开始没想明白的点在于,基于用户当前选择,推算所有属性的节点是否还有可选的可能(可用sku),之前想到过这一层面,想着偷懒完成需求即可,便没有深究。/** * 基于用户当前属性选择状态,获取sku,及推算每个属性的可选状态 */ public function goods_sku(){ $goodsId = $this->post['goods_id']; //检测商品是否存在 mall_database_execute('goods') ->where(['goods_id' => $goodsId, 'is_on_sale'=> 1, 'is_delete' => 0]) ->getField('goods_id') or $this->response(208, '商品不存在'); $where = [ 'goods_id' => $goodsId, 'status' => 1 ]; //获取所有可选sku的属性组合 $allSkuLists = array_column(mall_database_execute('goods_sku') ->field('attr_id_arr') ->where($where) ->select(), 'attr_id_arr'); $this->rows['sku_num'] = count($allSkuLists); if (!empty($this->post['attr_id'])){ $attrArr = explode(',', $this->post['attr_id']); foreach ($attrArr as &$vv){ if ($vv == '') $vv = '%'; } $where['old_id_arr'] = ['LIKE', implode(',', $attrArr)]; } //查询一个当前用户选择状态下满足条件的组合(先这样,等产品出了可能组合排序规则再完善) $this->rows['info'] = mall_database_execute('goods_sku') ->field('goods_sku_id,price,goods_number,attr_value,goods_thumb') ->where($where) ->find() ? : ''; if ($this->rows['info']['goods_thumb']) $this->rows['info']['goods_thumb'] = change_file_path($this->rows['info']['goods_thumb']); //获取规格 $attribute = mall_database_execute('goods_sku_list')->alias('AS gsl') ->field('ga.attr_id, ga.attr_type, ga.attr_name, gsl.attr_values_arr') ->join(mall_database_table('goods_attribute').' AS ga ON ga.attr_id = gsl.attr_id', 'LEFT') ->where([ 'gsl.goods_id' => $goodsId, 'gsl.status' => 1 ]) ->order('attr_type asc, attr_id asc') ->select(); if (!empty($attribute)){ //遍历获取所有规格的属性,并假定每种属性都不可选 foreach ($attribute as $k=>&$v){ $v['option'] = mall_database_execute('goods_attribute') ->field('attr_id,attr_type,attr_name,2 as status') ->where([ 'attr_id' => ['IN', $v['attr_values_arr']], 'status' => 1 ]) ->order('attr_id asc') ->select(); unset($v['attr_values_arr']); if (!empty($allSkuLists)){ //遍历所有属性判断基于用户选择状态下属性是否有可选方案 foreach ($v['option'] as &$vo){ //获取用户当前选择 $checkSku = explode(',', $this->post['attr_id']); //把当前属性与用户选择进行组合 $checkSku[$k] = $vo['attr_id']; //遍历所有可能的组合列表,查找是否有匹配当前的组合 foreach ($allSkuLists as $vov){ //判断条件:如果我有的你都有那就对了 $intersect = array_intersect($checkSku, explode(',', $vov)); asort($intersect); asort($checkSku); //序列化后做比较 if (implode(',', $intersect) == implode(',', array_filter($checkSku))) $vo['status'] = '1'; } } } } } $this->rows['attribute'] = $attribute ? : ''; $this->response(); }附上表结构:CREATE TABLE `fd_goods_sku` ( `goods_sku_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id', `goods_id` int(11) NOT NULL, `old_id_arr` varchar(255) NOT NULL DEFAULT '' COMMENT '没排序之前的id组合', `attr_id_arr` varchar(255) NOT NULL DEFAULT '0' COMMENT '属性id', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1正常,2失效', `price` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '售价,单位分', `goods_number` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '库存', `attr_value` varchar(255) NOT NULL DEFAULT '' COMMENT '商品自定义属性', `goods_thumb` varchar(255) NOT NULL DEFAULT '', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`goods_sku_id`), KEY `goods_id` (`goods_id`,`goods_sku_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=2208 DEFAULT CHARSET=utf8mb4 COMMENT='商品sku表'; CREATE TABLE `fd_goods_sku_list` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `goods_id` int(10) unsigned NOT NULL, `attr_id` varchar(255) NOT NULL DEFAULT '' COMMENT '属性id', `attr_values_arr` varchar(255) NOT NULL DEFAULT '' COMMENT '属性值id', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1正常,2失效', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=599 DEFAULT CHARSET=utf8mb4 COMMENT='商品已选属性表'; 以上仅作记录,如大神们有更好方案请不吝赐教。
2019年02月16日
13,022 阅读
0 评论
35 点赞
1
...
48
49
50
51