1. vim自带一个目录浏览器,使用命令:E 就可以调出来,实际上就是浏览器的名字就是"网络读写"netrw

  2. vim也自带了 补全功能, 启动键是 "ctrl_N" 或者用 ctrl_p也可以, 不管是第一个还是后面第几个,反正你可以补全就好了 . 如果有多个补全(开头的字符相同的多个), 则会显示NP 还有更多的补全在 ctrl_x中(6种):

    ctrl_x 和 ctrl_D 是宏定义补全

    ctrl_x ctrl_f 是文件名补全(file)

    ctrl_x ctrl_] 是标签补全

    ctrl_x ctrl_v 表达式补全

    ctrl_x ctrl_I 关键字补全

    ctrl_x ctrl_L 是 整行补全

  3. 在gvim中 , 分屏的几种方法:

  • 直接用原生命令 :sp :vsp
  • 用窗口操作: ^W s水平分割, ^W v是垂直分割
  • 在NerdTree中, 使用 is分割 i-水平分割, s-垂直分割
  1. 要两个分屏同步滚动, 要在两个窗口中, 都使用命令 :set scb 即scroll bind 滚动绑定"铁锁连环" 要解除同步滚屏 :set scb!

**所以, 在vim中,! 感叹号表示的意思有两个, 一个是表示否定,比如 这里的scb! autocmd! , 另一种情况是 表示 强制写: 比如: w! q! mksession! **

vim的自动命令

  1. autocmd: auto cmd 自动-命令 可以简写为 au

    au有很多扩展, 比如显示/列表/ 否定 等等 比如: 删除自动命令: autocmd! ...

    au的格式是: au[tocmd] [group] {events} {pat} {cmds}

    group表示执行自动命令的 用户组, 一般采用当前默认的用户组就行, 通常不用设置

    events, 表示的是事件, 多个事件用逗号隔开. 有很多指定的/合法的事件名称,包括: BufNewFile, BufReadFile, VimLeave, VimEnter.等等

    pat表示 pattern模式, 是一个文件类型 模式,表示对哪些文件执行自动命令

    cmds命令执行 字符串. 可以是execute, call等. execute后面的参数是一个 字符串, 可以用点号连接字符串

  2. 其中, {events}, {pat} 和 {cmd} 三个是必须有的 内容,其他 可选.

  3. 在写autocmd命令的时候, 最重要的是, 字符串参数中, 不支持 ~ 这种家目录的写法, 家目录要用 $HOME这样的方式.

  4. 还有一个 很重要的问题是: 自动命令保存 session的时候, 对 NERDTreee窗口支持得不是很好, 所以 在 关闭gvim的时候, 最好是事先关闭掉 Nerdtree窗口.

  5. 如果要单独地 用原生命令 在启动时载入一个session: vim -S ~/.session.vim

    所以, 要让vim自动保存和载入session:

autocmd VimLeave * execute "mksession! ".$HOME."/.session.vim"  //  感觉在linux下比较有用 , 但是在win下感觉不是多好使呢?
autocmd VimEnter * execute "source".$HOME."/.session.vim"

#### vim的设置字体的命令?. 注意windows和linux的区别: linux设置字体的时候, 直接就是 字体和字号, 只是 因为字体和字号之间的 空格 是特殊字符, 所以要把空格 转义: `set guifont = Consolas\ 10 ` 而win 中 配置时, 是用 冒号来 分割的:` set guifont=Consolas:h10:cANSI ` 其中的c表示字符集, charset等于ansi的意思

感觉很奇怪, 要对markdown 的标题内容, 使用颜色, 好像只能是 把 <font color="red"> 放在 标题行的 上一行, 而</font> 的结束标签 只能放在 标题行的 末尾, 其他放置方式都不对????

vim中的c命令?

c命令是change 修改的意思. 他的操作实际上是3个 操作的合起来: 先选中指定的内容, 删除之, 然后再切换到插入状态. 即c = d + i 这个跟word中 "选中文字后直接打字" 是一样的

vim中的数字, 通常是包含当前内容的(当前单词或当前行的) c4j 即时改变 包括当前行在内的下面4行. cw... c2w.

能否支持 4jc?

不管gold和golden的含义区别如何 反正在css中, 要表示边框border的 "金色"的颜色时, 要用 gold, 而不能用golden 否则边框 就不能显示出来.

表示 border边框属性, 通常的属性书写顺序是: border-width style color: 比如: 1px solid gold: 宽度必须要用单位, 否则不会显式. 金色的,必须用gold单词不能用golden.

=====================


有些css效果直接写在div中无法实现, 就要借助于另外的容器比如在div中嵌套一个子容器 段落p来实现.

注意, 在同一行内, 可以有多个不同的 (行级)元素比如img,span等, 而且它们的高度(在行中的高度)可以是不同的.因此,就牵涉到一个元素在行内的垂直对齐方式: vertical-algin: 元素的基线 和 所在行的基线 之间的垂直对齐方式: 主要有baseline(默认的.两个基线对齐), top,bottom(元素的顶端与最高/最低元素的顶端对齐 (都是顶端对齐)), text-top, text-bottom(元素的顶端/地段与字体元素的顶端/底端对齐), middle.

只有行级/行内元素才有 vertical-align属性. 块级元素没有vertical-align属性的. 表示的是: 该属性所在的元素 相对于其父元素的垂直对齐方式.

块级元素和行级元素的一个区别是: 块级元素在该元素的前后有一个换行符br, 而行级元素则没有换行符.

表格/段落本身是块级元素. 但是 table-cell单元格是行内元素.

border属性: 通常写的顺序是: border-width border-style border-color, 最重要的是, 在linux中, 这个width一定要加上单位, 比如1px, 如果只是写1 是不会显示边框的.

在用tp的xml标签,包括/比如: include的时候, 要严格遵守xml标签的用法, 否则会出错或者无效, 比如include标签的 file属性后, 如果不带 斜杠结尾, 文件将不会被包含, 因此, 首先在写的时候, 就要先把 那些关闭标签, 结尾斜杠先写好, 谨防出错.

### 在表示模板路径 中的 控制器和操作 关系的时候, 3.2.3中使用的是 斜杠, 比如 Public/header, 而 使用 冒号的是 3.1版本中的用法, 使用冒号是为了兼容3.1, 所以, 如果已知使用的是 3.2版本, 则就用 斜杠不必用 冒号.

注意 $this->display('Public/header'); 和 在 include标签中的 Public/header 都表示的是 目录 或控制器. 也就是说, 如果即使没有控制器, 有相应的目录也是可以正确 找到定位的.

感觉, 在模板 如果要用 Public, 要使用 模板布局, base基础模板等 最好是 按照 View/控制器/操作 这样的 目录结构来 构建. 也就是 最好不要 去定义 TMPL_FILE_DEPR => '_' 这样的配置. 这样结构更清晰. 而且在使用包含, 布局的时候, 也不容易出错.

========================================

模板路径的两种表示方法:

  1. 表示模板路径, 一种是用模板表达式: [模块@主题/]控制器/操作, 也就是说, 如果要用 跨模块,则一定要在模块后加@符号。 否则,会将模块看作是 主题目录, 而不是模块名称

  2. 注意, 凡是 Home\View 目录下的子目录 , 包括控制器名称目录, 或者你自己创建的 Public目录, 或者 Layout目录等 , 都会被 看作是 控制器名称目录, 指定模板时, 都可以用 控制器/操作 的类似方法.

  3. 因此, 如果模板不是放在 View/确实存在的控制器名 目录下的, 而是放在 View/Public/ 下的,由于 View下的目录会被看作是 "控制器名称" , 所以, 你的 display(...)和 include file="..." 既可以直接写: display("Public/header"); , 当然也可以 从 View下写起, 比如:$this-> display('./Public/content'); 注意这里的 点号 表示的不是 网站的根目录, 也不是指的 View/当前控制器名称 目录, 而是指 View目录.

  4. 如果不是 控制器/操作 的 模板表达式, 就要用 完整的模板文件,要从 网站的根目录写起 即 ./Application/Home/View/SomeDir/template.html

  5. 始终要牢记一个思想, 在写包含 文件 | 包含 模板时, 如果 用的是 模板表达式, 那么 后面 就不要加 .html 的扩展名, 只有用 完整文件路径的时候, 才需要加 完整的 扩展名.

总之,感觉 tp的目录路径是有些混乱的, 其中的 点号 目录,跟我们平常的 认识有些 偏差, 只有记住就行了。

关于display成员函数!

  • 他就是一个普通的成员函数而已 没有任何特殊的
  • 它不是return, 没有return的 功能. 即你调用 display后, 还可以 在操作方法中, 继续处理/执行语句, 继续输出其他内容.
  • 他可以在一个操作中, 多次被调用. 甚至 可以多次调用, 比如,你先调用了 其他"控制器"中的 其他 模板文件, 然后再输出 当前控制器的对应 的 入口模板文件( 就是 当前action对应的模板文件)

===================================


关于模板布局?

  1. 模板使用 模块 + include 的方式, 可以 很方便地 进行 模块 组装式 的 来 生成 灵活多样的 模板文件, 既提高效率, 又减轻了 劳动强度
  2. 默认的 布局模板, 是放在 View/下的 layout.html文件 . 因此, 如果你的布局模板 是 放在 View/Public/layout.html中, 则要 配置: 'LAYOUT_ON' => true, 'LAYOUT_NAME' => 'Public/layout',
  3. 在写布局模板的时候, 即使 layout.html和 所有 的包含模块 比如 Public/header.html, Public/menu.html, footer.html 等 在同一个目录位置 Public/ 下, 在写include 包含文件的时候, 都必须写上 Public. 不能说, layout.html和模块在 同一个位置, 就不写Public, 那样是包含不到 模块的...
  4. 也就是说, 写模板路径, include包含文件, 写layout的时候, 必须 包含上 "控制器名称" ??? 必须包含上 Public/ 控制器目录是不能省略的???

========================================

include 包含文件, 如果有 多个 连续的 要包含的文件, 可以一次性写在一个 include标签中, 而不必分别 写多个包含标签了. <include file="Public/header,Public/menu" /> 但是你要注意的是, 在多个包含文件之间, 逗号后面不能有空格, 否则会出错: 后面 的那个文件将不会被包含. 估计可能是tp在解析的时候, 没有将逗号后面的空格ltrim, trim过滤掉.

======================================


关于ajax的实例 补充

  • 函数的写法, $.getJSON, 这里的JSON 全部是大写, 不是 Json. 如果写成 getJson会报错说没有这样的函数.

  • $.getScript这里的script则不是全部大写, 只有首字母大写.

  • ajax是要载入 你指定url文件的内容, 注意是载入, 不是函数的"return", 只要你文件最后的结果内容是什么, 就载入这些.所以 如果是php文件的话, 要用 echo,

    而不是return. ajax载入的/关心的是你文件的内容/文本...

  • 如果是返回json格式的数据, 那么php里面写的 肯定是一个字符串, 因为不可能直接写 js对象格式的 . 而且这个这个字符串, 必须

    是 严格的 json 格式的字符串! 即前面的key 必须是 用 双引号..., 如果哪怕一点点 不符合 json格式的话, 都不会有返回值的

  • 如果getJSON成功的话, 最后返回给callback函数的是一个 js对象: object(....还有一个默认的成员是: __proto__Object)


  1. 设计网站 网页应该是(小的/窄的, 矮的)图片和文字等想 混排的, 才好看. 而且排列 的位置要 交错镶嵌 才好看.

关于js中的变量的 声明,定义,赋值,初始化? 如同在 c/c++里一样, 定义和初始化是分开的两个概念. 参考: http://www.111cn.net/wy/js-ajax/64110.htm

  • js中, 变量的声明(显式的用var, 隐式的不用var), 就是/就叫做 变量的定义; 对于隐式的声明是指, js可以直接给一个未声明果的变量赋值, 那么这时候就是隐式声明

  • 变量的赋值(第一次), 就叫做变量的初始化;

  • 但是,要注意, 变量的定义后, 不一定 必须就要赋值, 必须初始化, 虽然这个通常是声明时就给它初始化;

  • 当给一个变量声明后, 不给它初始化赋值, 那么它的值就等于 undefined ,注意这个undefined 是一个特殊的值, 不是字符串,字符串的话, 要写成 'undefined'

  • 对一个没有声明过的变量只能执行 typeof 操作, 其他操作都会报错!

  • 判读一个变量是否赋值: if(foo == undefined) , 或者: if( typeof foo == 'undefined') //这里的undefined必须加引号, 因为 typeof返回值是一个字符串

  • js代码的调试, 当设置了断点后, 要 单击一下 "开始/停止" 按钮, 才能进入调试状态 之前都会一直 转圈, 表示被堵塞.

  • js代码调试, 即使设置了 步进模式, 也不会进入 回调函数中 设置的断点. 这个要注意一下.

// 一个网页中, 的对象层次是: window(浏览器窗口) > document > html 标签 > body.. 标签. 也就是说, html中 的所有变量都是 window的属性
if(!window.oneObj)
{
var oneObj = {}; }

dom的元素的innerHTML(注意HTML要全部大写)属性, 在jquery中 变成了 html()方法. 同样的, dom元素的innerText属性, 变成了jquery中 的text()方法.

关于全局变量和局部变量的作用域scope?

  • 要真正理解 全局变量: 是指 直接 包含 在 <script> </script> 之间的变量, 它不在 任何 函数内! 不能在任何方法内, 不能在任何 匿名(闭包) 函数内, 更不能在 回调函数内

  • 如果某个方法中, 包含有回调函数的话, 即使步进进入step into 调试, 也不会进入到 回调函数内的!

  • 全局变量是 window的 属性, 你可以在 任何地方 通过 window 来引用 全局变量, 比如你想 取回/取出 函数内 闭包内, 或 回调函数内的 临时值, 以供后面使用, 但是你要注意, 后面

    在引用的时候, 也必须要用window... 否则会出错!

  • 全局变量也可以在 函数内访问到, 但是 如果 同名的话, 会被局部变量所屏蔽

  • 在回调函数内, 想取回数据 供今后使用的方法 虽然是可以的, 行得通的, 但是, 那样会增加问题的难度, 而且非常容易出错! 所以, 如果有回调函数中, 需要处理业务的话, 就直接

    在回调函数中直接处理就好 了, 这样是最直接, 最方便的!! 不要到外面来处理, 那样又麻烦又容易出错!


tp的验证码chptcha

  • 验证码是一个图片! 你可以看到使用的是 : imagecreate(imageW, imageH); 和 输出 imagePng, 验证码真的是一个普通图片, 你可以像其他图片一样: 查看图片, 复制图片
  • 验证码其实很简单, 先配置, 再生成, 最后验证.

php允许两种方式的对象实例化, 一是 实例化时传入配置参数, 另一种是 动态设置, (这是php特有的__set机制)

验证码的生成和显示: 是用 Verify对象的 entry()函数, entry是 进入, 入口 , 表示在登陆时的权限验证!

  • 验证码的背景图片是放在: /Think/Verify/bgs/ 目录下的, 名字是 1.png, 2.png...

  • 验证码的英文字体是放在 /Think/Verify/ttfs/目录下的, 1.ttf, 2.ttf, ...

  • 同理, 中文字体是放在: /Think/Verify/zhttfs/ 目录下的, zh1.ttf, zh2.ttf, zh3.ttf...等

  • 如果只想显示数字, 则设置 codeSet只包含数字, 如果要设置中文验证码, 就要自己设置 zhSet, 因为你可以看源代码, 里面是没有设置zhSet的.但是默认设置了codeSet的, 里面是数字和

    字母的集合. 为了避免混淆, 没有包含数字0和1, 因为0和字母o, 1和字母l有些混淆

  • 验证码有时候也用 captcha来表示, 这个是多个单词的缩写: Completely Automated Public Turing test to tell Computers and Human Aparts. 表示全自动区分计算机和人类的图灵测试.

  • Verify类的 authcode 函数, 是用 加密秘钥的md5 取5位后的8个数字, 跟加密字符串的md5 取8位后的10个数字, 然后这两个字符串拼接后的md5函数.

vim 光标向前和向后回跳历史: ctrl_i从当前历史位置, 向前跳(下一个) , 这个不必经常用, 只是在某些情况下有用!

emmet的序号问题?

  • 如果有多个$, 则前面的$都是0, 最后一个从1开始

  • 可以用@ 来指示序号 从什么开始, 要放在 $ 和 乘号 之间: 其中: @- 表示 倒序, 注意不是负数! @2表示 从 2开始: 比如 li$3 表示li1 li2 li3 li$@-3 表示 : li3 li2 li1 ,

    而 li$@2*3 则表示 li2 li3 li4

  • 经常需要在多个行/多个内容的 外面 用标签 来包围: wrap 这个是很重要, 很常见的! 要用 emmet来写, 切实掌握, 参考: http://www.cnblogs.com/matchless/archive/2013/04/11/3015759.html 这个讲得非常好

    首先, 包围标签可以有多个级, 跟平常的解析是一样的, 但是 被包含的 内容 总是包含在 最后一个标签中, 其次, 如果要 用标签来 逐行包围, 那么在 要分离的/ 逐行包围的 那个标签上加上 星号* , (不需要写对应的数字), 最后选择好

    要包围的内容后, 要启动emmet , 还是使用 启动键, 即ctrl-e逗号

  • apart: (一部分一部分的): adj: 分离的 分散的; adv. 相隔, 相距; 分散地; 分离地. torn me apart 让我四成碎片.

tp3.2.3验证码不显示?

  • 验证码的默认值: 字符位数是5(就是长度), 字体大小fontSize是25, 图片高度是250*62...

  • 用直接通过url访问 captcha方法能够 显示图片, 默认的图片大小是: WxH : 250*62, O

  • 要注意是因为, 验证码图片的 src地址 要在 :U方法外面加上 大括号{}...

  • 如何调整验证码图片和文字之间的相对高度? 使用 vertical-align 的样式, 使文字和图片都 垂直 middle 则居中对齐; 重要的是 可以在图片的css样式上 : 使用 负数的 百分比 来调整文字的相对高度

验证码的例子

     在模板中 插入验证码?    <p class="p01"><input type="text" value="验证码" style="color: #ddd;"> <img style="vertical-align: -40%;" src="{:U('captcha')}" /></p>

    public function captcha(){
$v=new \Think\Verify();
$v->length = 4;
$v -> fontSize = 15;
$v -> imageW = 140;
$v -> imageH = 40;
$v -> useNoise = false;
$v -> bg =array(190, 230, 200);
$v->entry();
}

tp框架中的一些疑点知识-6的更多相关文章

  1. tp框架中的一些疑点知识-7

    mysqli是用面向对象的,所以用箭头对象语法, 而mysql是用C语言面向过程写的, 所以用的都是php全局函数 式的写法. tinkle: 叮叮当当的响; (口语)一次电话, i will giv ...

  2. tp框架中的一些疑点知识-5

    关于vim中的缓存区的前后bp和bn的界定 通过命令ls可以看到 缓存区的 排序. 最开始打开的文件排在最上面, 序号最小. 那么它们就是 更 前 的缓冲区. 序号更前的用bp, 序号靠后的用bn. ...

  3. tp框架中的一些疑点知识-2

    tp中有三种常量: 预定义常量, 这个设置后不会随环境的改变而改变的,比如'URL_MODEL' => 1 注意是 model, 不是 url_mode 路径常量, 也不会随环境的改变而改变的, ...

  4. tp框架中的一些疑点知识-3

    rewrite就是伪静态, 伪静态就是 rewirte, 可以把入口地址隐藏掉. 兼容模式就是 普通模式 和 pathinfo模式的 结合, 前面是普通模式 ?s= , 后面的 模块/控制器/操作和参 ...

  5. tp框架中的一些疑点知识-8

    NaN是Number对象的一个属性, 表示一个特殊值, 表示不是一个 数字, 引用/赋值时, 要使用: Number.NaN 判断 一个值是不是 NaN, 用 isNaN() 函数, 它是一个js的全 ...

  6. tp框架中的一些疑点知识-4

    $_SERVER的几个元素: script_name脚本名称, 是指这个脚本文件本身的文件名, 通常只是 : /index.php path_info: 是从控制器/操作方法开始到最后的内容,包括路径 ...

  7. tp框架中的一些疑点知识-1

    tp默认的编码是utf-8 Runtime中的Cache和Logs都是分模块的,因为在应用app下可以有多个模块,但是 公共模块和Runtime模块只有一个, 所以, Runtime要包含各个模块的内 ...

  8. tp框架中的一些疑点知识--cookie和session的配置

    不同的浏览器采用不同的方式保存Cookie. IE浏览器会在"C:\Documents and Settings\你的用户名\Cookies"文件夹下以文本文件形式保存,一个文本文 ...

  9. TP框架中关于if、else 分支结构逻辑错误

    TP框架中关于if.else 分支结构逻辑错误 代码中没有任何错误 将注释往下一行就可以解决 造成问题的原因: TP框架中 想分配变量可以使用assign方法 在[模块]中: $this->as ...

随机推荐

  1. struts2实现jQuery的异步交互

    struts2中jQuery的异步交互有两种方式: 1)是利用构造字符串的方式来实现: 使用该方法主要是在服务器端根据前端的请求,返回一个字符串信息,然后前端的jQuery通过解析该字符串信息得到对应 ...

  2. (转)Hashtable与ConcurrentHashMap区别

    ConcurrentHashMap融合了hashtable和hashmap二者的优势. hashtable是做了同步的,hashmap未考虑同步.所以hashmap在单线程情况下效率较高.hashta ...

  3. 三 js语句

    /** * Created by Administrator on 2017/12/24. * 1.顺序语句 * 2.选择语句 if else swtich case * 3.循环语句 for whi ...

  4. SEO经验-如何做到新站上线半个月谷歌收录3万

    一个网站在做搜索引擎优化的时候,首先考虑的肯定是百度,这个是毋庸置疑的,毕竟百度占领者差不多七成的搜索市场份额. 第二考虑的是360搜索,这个也是毋庸置疑的,因为360搜索占领者差不多两成的搜索市场份 ...

  5. hdu2609最小表示法

    #include <iostream> #include <algorithm> #include <string.h> #include <cstdio&g ...

  6. 【转】python3实现自动化框架robotframework

    由于python2只更新到2020年,python3是未来的主流,为了适应技术的变化python3实现robotframework是迟早的事 1.下载最新版本的python3.7,可根据自己电脑的位数 ...

  7. python 列表推导

    废话不多说,直接上代码 #coding=utf-8 def getitem(index, element): return '%d: %s' % (index, element) def getite ...

  8. 20165215 2017-2018-2 《Java程序设计》第7周学习总结

    20165215 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 chapter11 下载安装MySQL服务器 启动MySQL数据库服务器 在bin子目录中, ...

  9. 1分钟完美安装最新CentOS+Nginx+PHP-FPM+MySQL

    PHP 5.3.1 MySQL 5.0.89 Nginx 0.8.33 或 0.7.65 (可选) 现在,我们可以快速全自动搞定 CentOS + Nginx + PHP-FPM + MySQL 的安 ...

  10. mac shell终端编辑命令行快捷键——行首,行尾

    Ctrl + d        删除一个字符,相当于通常的Delete键(命令行若无所有字符,则相当于exit:处理多行标准输入时也表示eof) Ctrl + h        退格删除一个字符,相当 ...