tp框架中的一些疑点知识-6
vim自带一个目录浏览器,使用命令
:E
就可以调出来,实际上就是浏览器的名字就是"网络读写"netrwvim也自带了 补全功能, 启动键是 "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 是 整行补全在gvim中 , 分屏的几种方法:
- 直接用原生命令
:sp :vsp
- 用窗口操作:
^W s水平分割, ^W v是垂直分割
- 在NerdTree中, 使用
is
分割i-水平分割, s-垂直分割
- 要两个分屏同步滚动, 要在两个窗口中, 都使用命令
:set scb
即scroll bind 滚动绑定"铁锁连环" 要解除同步滚屏:set scb!
**所以, 在vim中,! 感叹号表示的意思有两个, 一个是表示否定,比如 这里的scb! autocmd!
, 另一种情况是 表示 强制写: 比如: w! q! mksession!
**
vim的自动命令
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后面的参数是一个 字符串, 可以用点号连接字符串其中, {events}, {pat} 和 {cmd} 三个是必须有的 内容,其他 可选.
在写autocmd命令的时候, 最重要的是, 字符串参数中, 不支持
~
这种家目录的写法, 家目录要用$HOME
这样的方式.还有一个 很重要的问题是: 自动命令保存 session的时候, 对 NERDTreee窗口支持得不是很好, 所以 在 关闭gvim的时候, 最好是事先关闭掉 Nerdtree窗口.
如果要单独地 用原生命令 在启动时载入一个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 => '_' 这样的配置. 这样结构更清晰. 而且在使用包含, 布局的时候, 也不容易出错.
========================================
模板路径的两种表示方法:
表示模板路径, 一种是用模板表达式: [模块@主题/]控制器/操作, 也就是说, 如果要用 跨模块,则一定要在模块后加@符号。 否则,会将模块看作是 主题目录, 而不是模块名称
注意, 凡是 Home\View 目录下的子目录 , 包括控制器名称目录, 或者你自己创建的 Public目录, 或者 Layout目录等 , 都会被 看作是 控制器名称目录, 指定模板时, 都可以用 控制器/操作 的类似方法.
因此, 如果模板不是放在 View/确实存在的控制器名 目录下的, 而是放在 View/Public/ 下的,由于 View下的目录会被看作是 "控制器名称" , 所以, 你的 display(...)和 include file="..." 既可以直接写:
display("Public/header");
, 当然也可以 从 View下写起, 比如:$this-> display('./Public/content');
注意这里的 点号 表示的不是 网站的根目录, 也不是指的 View/当前控制器名称 目录, 而是指 View目录.如果不是 控制器/操作 的 模板表达式, 就要用 完整的模板文件,要从 网站的根目录写起 即 ./Application/Home/View/SomeDir/template.html
始终要牢记一个思想, 在写包含 文件 | 包含 模板时, 如果 用的是 模板表达式, 那么 后面 就不要加 .html 的扩展名, 只有用 完整文件路径的时候, 才需要加 完整的 扩展名.
总之,感觉 tp的目录路径是有些混乱的, 其中的 点号 目录,跟我们平常的 认识有些 偏差, 只有记住就行了。
关于display成员函数!
- 他就是一个普通的成员函数而已 没有任何特殊的
- 它不是return, 没有return的 功能. 即你调用 display后, 还可以 在操作方法中, 继续处理/执行语句, 继续输出其他内容.
- 他可以在一个操作中, 多次被调用. 甚至 可以多次调用, 比如,你先调用了 其他"控制器"中的 其他 模板文件, 然后再输出 当前控制器的对应 的 入口模板文件( 就是 当前action对应的模板文件)
===================================
关于模板布局?
- 模板使用 模块 + include 的方式, 可以 很方便地 进行 模块 组装式 的 来 生成 灵活多样的 模板文件, 既提高效率, 又减轻了 劳动强度
- 默认的 布局模板, 是放在 View/下的 layout.html文件 . 因此, 如果你的布局模板 是 放在 View/Public/layout.html中, 则要 配置:
'LAYOUT_ON' => true, 'LAYOUT_NAME' => 'Public/layout',
- 在写布局模板的时候, 即使 layout.html和 所有 的包含模块 比如 Public/header.html, Public/menu.html, footer.html 等 在同一个目录位置 Public/ 下, 在写include 包含文件的时候, 都必须写上 Public. 不能说, layout.html和模块在 同一个位置, 就不写Public, 那样是包含不到 模块的...
- 也就是说, 写模板路径, 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)
- 设计网站 网页应该是(小的/窄的, 矮的)图片和文字等想 混排的, 才好看. 而且排列 的位置要 交错镶嵌 才好看.
关于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的更多相关文章
- tp框架中的一些疑点知识-7
mysqli是用面向对象的,所以用箭头对象语法, 而mysql是用C语言面向过程写的, 所以用的都是php全局函数 式的写法. tinkle: 叮叮当当的响; (口语)一次电话, i will giv ...
- tp框架中的一些疑点知识-5
关于vim中的缓存区的前后bp和bn的界定 通过命令ls可以看到 缓存区的 排序. 最开始打开的文件排在最上面, 序号最小. 那么它们就是 更 前 的缓冲区. 序号更前的用bp, 序号靠后的用bn. ...
- tp框架中的一些疑点知识-2
tp中有三种常量: 预定义常量, 这个设置后不会随环境的改变而改变的,比如'URL_MODEL' => 1 注意是 model, 不是 url_mode 路径常量, 也不会随环境的改变而改变的, ...
- tp框架中的一些疑点知识-3
rewrite就是伪静态, 伪静态就是 rewirte, 可以把入口地址隐藏掉. 兼容模式就是 普通模式 和 pathinfo模式的 结合, 前面是普通模式 ?s= , 后面的 模块/控制器/操作和参 ...
- tp框架中的一些疑点知识-8
NaN是Number对象的一个属性, 表示一个特殊值, 表示不是一个 数字, 引用/赋值时, 要使用: Number.NaN 判断 一个值是不是 NaN, 用 isNaN() 函数, 它是一个js的全 ...
- tp框架中的一些疑点知识-4
$_SERVER的几个元素: script_name脚本名称, 是指这个脚本文件本身的文件名, 通常只是 : /index.php path_info: 是从控制器/操作方法开始到最后的内容,包括路径 ...
- tp框架中的一些疑点知识-1
tp默认的编码是utf-8 Runtime中的Cache和Logs都是分模块的,因为在应用app下可以有多个模块,但是 公共模块和Runtime模块只有一个, 所以, Runtime要包含各个模块的内 ...
- tp框架中的一些疑点知识--cookie和session的配置
不同的浏览器采用不同的方式保存Cookie. IE浏览器会在"C:\Documents and Settings\你的用户名\Cookies"文件夹下以文本文件形式保存,一个文本文 ...
- TP框架中关于if、else 分支结构逻辑错误
TP框架中关于if.else 分支结构逻辑错误 代码中没有任何错误 将注释往下一行就可以解决 造成问题的原因: TP框架中 想分配变量可以使用assign方法 在[模块]中: $this->as ...
随机推荐
- windows编程之Windows Shell 编程
参考书<VC++ Windows Shell Programming> 这里仅仅是记录下该资源,推荐到下文列出的连接进行查看 用VC++ 进行Windows Shell 扩展编成 ...
- laravel 服务容器实例——深入理解IoC模式
刚刚接触laravel,对于laravel的服务容器不是很理解.看了<Laravel框架关键技术解析>和网上的一些资料后对于服务容器有了一些自己的理解,在这里分享给大家 1.依赖 IoC模 ...
- Lua语言总结
[1]要退出交互模式和解释器,只需输入“os.exit()” [2]在交互模式执行程序块可以使用函数dofile,这个函数就可以立即执行一个文件.应用示例:dofile("f:/myLua/ ...
- javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specified?
javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specifie ...
- HADOOP nutch java mysql
下载Hadoop安装包 wget http://apache.fayea.com/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz java安装 wg ...
- Poj3253 Fence Repair (优先队列)
Fence Repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 67319 Accepted: 22142 De ...
- <转>jmeter(一)基础介绍
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- Tensorflow timeline trace
根据 https://github.com/tensorflow/tensorflow/issues/1824 简单进行了测试 修改运行的脚本增加如下关键代码 例如mnist_softmax.py f ...
- Django后端项目---- Rest Framework(2)
一.认证(补充的一个点) 认证请求头 #!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import API ...
- easyui dialog 表单提交,弹框初始化赋值,dialog实现
//定义弹框html<div id="delete" class="easyui-dialog" title="Delete" dat ...