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


    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. 注意, 凡是 HomeView 目录下的子目录 , 包括控制器名称目录, 或者你自己创建的 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 ThinkVerify();
            $v->length = 4;
            $v -> fontSize = 15;
            $v -> imageW = 140;
            $v -> imageH = 40;
            $v -> useNoise = false;
            $v -> bg =array(190, 230, 200);
            $v->entry();
        }
    
    

  • 相关阅读:
    上传图片到PHP服务器
    关于对象、数字、地理位置使用上需要注意的地方
    apiCloud app调用浏览器打开网页的方法
    APICloud开发小技巧(一)
    JavaScript数组操作函数
    超实用的JavaScript代码段
    JSESSIONID的简单说明
    数据库锁表及阻塞的原因和解决办法
    Spring详解------事务管理
    HttpServletrequest 与HttpServletResponse总结
  • 原文地址:https://www.cnblogs.com/bkylee/p/8960784.html
Copyright © 2020-2023  润新知