zoukankan      html  css  js  c++  java
  • thinkphp-许愿墙-3

    用jquery写异步传递的时候,

    首先要判断表单中的输入是否为空:
    如果有多个输入项, 应该, 分别的, 一步一步的来判断是否为空, 而不是用 and / or来复合判断!
    同时如果为空, 应该将它设为焦点. $('input[name= username]').focus();
    而且, 每个if后如果 出错, 就要 return, 不要再往下判断执行了!

    在think的模板html文件中, 的 "任意地方" --- head中, css中, script>中, body>中 都可以解析think的模板, 如{$assing_var} {U('handle')}等等.

    在js 链接文件中, 如何获得 U()方法地址?

    • 首先不能直接在js外部链接文件中获得U() 方法地址,
    • 其次, 应该通过在模板文件中的 script脚本段落, 中获得 U方法 这个 "全局的" 链接 地址, 然后在js文件中使用.

    在head头部的css文件,和 外部链接的js文件, 就像 " c/c++ 中 的 包含文件 # include 一样", 当它们解析 "展开"来后, 就好象他们是在同一目录位置的地方, 于是, 它们之间的内容 就在同一个文件, 同一个作用域 内, 相互之间 完全 相互可见"!!

    注意, 对于分组项目, U(方法)不支持当前子项目的方法, 要写全: 把子分组项目也要写上:
    var handleUrl = {:U('Index/Index/handle')}.

    ajax和post异步请求的区别?

    1. 如果用ajax, 则所有内容都放在 {..., key: value}中,
    2. 如果用$.post, 则不用key:value形式, 而是 直接写 $.post(url, [data], [callback],[type]);
    3. post不支持 异步失败时的回调函数, 要支持失败时的回调函数, 请用 ajax
    4. 发送的数据中的 key 不要加引号, 对于value: 要根据具体的 "数据类型" 来决定是否加引号, 只有当值为字符串类型时, 才加上引号, 如果为数字, bool, 也可以是"javascript 变量和js函数"(js等变量可以出现在 任何地方)则不能加引号!!

    判断页面是否是 经过ajax提交的? 使用 $this->isAjax(); 或者: if(!IS_AJAX) halt('页面不存在');

    firebug, swarm 英[swɔːm] 美[swɔrm] n. 蜂群, 一大群, vt. 云集, 挤满.

    定制thinkphp的错误页面?

    1. 错误页面, 可以直接写 if(!IS_AJAX) halt('页面不存在');

    2. 也可以写成 模板错误页面:
      配置项: 'TMPL_EXCEPTION_FILE' => './Public/Tpl/error.html' 注意配置文件中的./ 相对路径 是项目的入口文件index.php

    3. 要在 "模板错误页面中使用 halt('错误信息') 提交过来的错误信息, 要在error.html中使用:

    4. 特别注意的是 在定制的 模板错误页面, 都 完全 不能使用 模板标签, {$e['message']} 不会被解析! 只能使用原生的php语法.

    5. 要跳转回 首页页面, 可以使用 thinkphp的常量: _ _ APP_ _.

    6. js中, 一个浏览器 window对象( 不要大写W), 是指浏览器的整个 窗口, 包括浏览器的标题, "地址栏(这个最重要, js主要是针对这个js对象操作的"), 显示的"客户区"

    7. 要写浏览器地址自动跳转:

         <script type="text/javascript">
              window.onload = function () {
                  setTimeout(function(){
                      window.location.href = '<?php echo __APP__;  ?>';
                  }, 5000);
              }
         </script> 
      

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

    thinkphp的结构 要常常去 通过查看 阅读 Think的源码, 会了解很多很多重要的东西!

    think的大小是4~5MB

    其ThinkPHP.php是框架的入口文件, 主要是定义一些 think 的 系统常量, 如: THINK_PATH等等.

    然后, 是common文件夹, 其下有: common.php是基础函数库, functions.php是标准模式的公共函数库, runtime.php是运行时库.
    //其中这些里面的函数, 是全局函数,像所有的 "单字母" 函数都是, 所以它们是不需要通过类对象来调用的!!

    然后, 是Conf文件夹, 是系统配置文件, 是alias.php, convention.php等

    然后, 是Extend文件夹, 是一些扩展.
    然后, 是Lang文件夹, 包括en_us.php 和 zh_cn.php, 是返回 return array(.... )数组供其他文件调用! 主要是 一些键的中文/英文名称.

    然后是, Lib文件夹, 这个是整个thinkphp的核心. 包括 Behavior文件夹 Lib文件夹 Driver文件夹 Template文件夹

    • Behavior文件夹(定义各种行为类),

    • Core件夹(核心类和基类, Behavior目录中的类都是从这个目录中的abstract class Behavior抽象基类派生的),

    • Driver文件夹(定义驱动器类,包括Cache驱动器,Db驱动器, TagLib驱动器),

    • Template文件夹(包括TagLib标签库解析类和ThinkTemplate模板引擎类).

    其中, Core文件夹包括: 整个框架的核心类:
    + Action.class.php 是控制器的抽象基类: abstract class Action{..}, 里面有很多public (注意访问权限)protected成员函数.

            + App.class.php 是应用程序类. 由它将整个程序实例化. 成员函数全部都是静态公共函数: static public init,  exec, run,...在这个里面实现程序实例化!
            + abstract class Behavior是行为类的 抽象基类.
    
            +View.class.php视图类的基类
                view中的display()是调用自身的 fetch()函数,和 render()函数来的...
                    里面有默认的$templateFile....
    
        /**
         * 运行应用实例 入口文件使用的快捷方法
         * @access public
         * @return void
         */
        static public function run() {
            // 项目初始化标签
            tag('app_init');
            App::init();
            // 项目开始标签
            tag('app_begin');
            // Session初始化
            session(C('SESSION_OPTIONS'));
            // 记录应用初始化时间
            G('initTime');
            App::exec();
            // 项目结束标签
            tag('app_end');
            return ;
        }
    

    最后, 是Tpl文件夹, 包括一些系统定义的模板文件, 如 显示的首页 thinkphp欢迎页面: default_index.tpl dispatch_jump.tpl路由分发跳转, page_trace.tpl页面追踪

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

    一个称为一个php块, 一个类的定义, 必须在一个php块内完成, 下面的定义是无效的:

    <?php
    class foo{
    }
    ?>
    <?php
    public function foo(){
    ....
    }
    ?>
    

    在php中, 一个变量只能有一个美元符合$: 所以, $a->b是正确的, 表示a这个对象中的b成员变量, 这个$符合作用于整个a->b, 相当于:$(a->b) , 如果写成$a->$b就是两个变量$a, 和$b, 它们中间用->连接, 就在语法上是错误的: 两个变量之间是不能用 - 来连接的. 除非 $b='???', 而???刚好是$a对象的成员变量, 这个相当于变量替换.

    $this 被叫做 伪变量...

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

    如何替换网页中的表情? replace_phiz()函数的写法?

    表情, phiz [fiz] 不是[fizi], 表示网页中的表情 "笑脸, 抓狂..."等等. $phiz = array(....);

    // 在common.php通用文件中, 不能使用 相对根路径, 而是要使用 __ROOT__等全局路径
    function replace_phiz($content){
        //正则匹配出phiz放到$matches
        preg_match_all('/[.*?]/is', $content, $arr);
        if($arr[0]){
            $phiz = F('phiz','','./Data/');
            foreach($arr[0] as $v){
                foreach($phiz as $k=>$val){
                    if($v == '['.$val.']') {   /* $v是[抱抱], 而$val是 "抱抱",所以要加上两边的 中括号.
    
                       $content = str_replace($v, '<img src="'.__ROOT__.'/Public/Images/Phiz/'.$k.'.gif" />', $content);
                       
                         break;  // 视频教程上是在 if 语句的下面一句写 continue, 但是我认为这里应该是break!
    
                         }
                    
                 }
            }
    
        }
    }
    
    ==================================================
    
    
    

    Model类的public function data等方法, 返回的是$this, 所以可以应用链式调用...

    $GLOBALS跟$_POST, $_GET一样, 是所谓的"超全局变量", 也只是在 同一个 文件 域内有效, 不能跨文件生效, 只是说, 在同一文件的函数内部, 不用声明global就可以使用的变量.


    var_dump和var_export的区别?

    var_dump默认就会输出, 而且,如果带多个参数, 就是输出这多个参数的 "类型(值)"格式.
    var_export默认不会输出, 而且 当第2 个参数为true时, var_export返回的 是 合法的php 代码, 这时, 这个代码string字符串, 就可以直接写到文件中去.

    写文件的两种方式?

    • 一是, 用传统的 : fopen(), 然后写fwrite(), 最后关闭fclose().

    • 二是, 用快捷的函数: file_put_contents(string $filename, string $data); //这个函数就等于执行了上面的三个函数! 这个data可以是字符串, 也可以是数组...

    • 最重要的是, 要记住: 当要往文件中写入 php代码时, 一定要记得写上: ?php .... ?> , 因为你的php代码不可能直接就放在 甩在文件里, 而且变量的输出, 不能直接变量,(因为该变量会被作为代码 被执行...而出错), 而是要把变量通过 var_export($变量)来转换成字符串相连接, 如:

        ```
            $data = '<?php return '. var_export($phiz, true). ';?>';
            file_put_contents('./Data/phiz.php', $data);
      
        ```
      

    从文件中读取内容, 如果 该文件是php文件, 那么就不能用 file_get_contents($filename) 这个函数, 因为这个函数在读取php文件的时候, 遇到{?php...?>的时候 会出错, 要用 $phiz = include './Data/phiz.php'; 这样的方式!!

    这也就明白了之前说的: include是包含文件, 同时它还会执行 文件, 当这个文件是php文件的时候, 它会解析其中的内容: 比如这个文件是

    <?php return array(....);
    ?>
    

    那么include后, 它就真的会得到一个数组.

    =====================================================
    主要靠细心体会, 键位的移动是很细微, 很细微,很微妙的, 6789食指和中指稍向左移, 无名指则竖直向上, 小指则平行斜向上移动(分别管两个).[p略微向左移动一点, [, 略微靠右一点, ]又略微靠右一点,最大. 要坚决杜绝用无名指去操作退格键.

    echo只能打印简单变量, 不能打印输出 "数组" 当echo $array时, 只会{输出 Array}. 要用dump()等函数来打印数组!

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

    thinkphp 的F()函数: 快速的 "写入数组" 或者 "读取文件".

    默认的是一个缓存, 实际上可以用来 读 和 写 数组.

    /**
     * 快速文件数据   "读取"  和 "保存(写入)  针对简单类型 数据  字符串、"数组" 
     * @param string $name 缓存名称
     * @param mixed $value 缓存值
     * @param string $path 缓存路径
     * @return mixed
     */
    
    // $name是缓存文件名, 不包括扩展名;
    // $value: 在写入数组的时候, 是数组$array的值, 在要读文件的时候, 这个$value=''为空;
    // $path 是缓存文件保存的路径, 当不存在时, 函数会去自动创建
    
    function F($name, $value='', $path=DATA_PATH) {
        static $_cache  = array();
        !!!!    $filename       = $path . $name . '.php'; // 默认的文件是php, $path要带上 "/".
        // .....
    
        return $value;  // return 会返回缓存的文件内容, 也就是说, 可以获得, 读取文件内容.
    }
    
    比如, 要 写入 并读出 表情数组: 
        F('phiz', $phiz, './Data/')'              // 写入$phiz;
        $phiz2 = F('phiz', '', './Data/');        // 读出文件内容.
    

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

    php中, 字符串和变量相连, 或者说字符串中包含变量的情况下, "高手"的用法: 一律是 用单引号, 然后用点号 与变量 相连. 而基本上没有用双引号包含替换的.

    为什么php中的 字符串要用单引号? 本来双引号和单引号是 基本相同的(除开变量替换外). 但是, 字符串用单引号, 这样就便于写html/css中的属性的时候, 用双引号括起来: var str='<html attr="some_attr"'; var str2 = 'css: body{color: "red"; } ';

    think或原生的php的ajaxReturn返回, 都一定要 指明 返回数据的 $data 的['status'] =0,或=1, 这样便于 js客户端来判断 ajax是否成功, 以及js中的 回调函数的处理...

    要在字符串中间, "嵌入"变量的方法是: 在嵌入的地方, 先写上: '+ +' , 然后再在两个加号之间放入变量: 'abcd' ==> 'ab'+ $var +'cd'

    在ajax中, 当客户端 需要 某个服务器端变量的时候, 就在服务器端把这个变量 封装在要返回的数据data中!!!

  • 相关阅读:
    洛谷T44252 线索_分治线段树_思维题
    css 迷惑的position
    【二次元的CSS】—— 用 DIV + CSS3 画大白(详解步骤)
    直接使用sublime编译stylus
    w3schools网站的HTML教程之HTML编辑器
    【二次元的CSS】—— 纯CSS3做的能换挡的电扇
    《JavaScript Dom编程艺术》读书笔记(二)
    JQuery基础修炼-样式篇
    Vue.js 开发实践:实现精巧的无限加载与分页功能
    web前端教程《每日一题》(1-99)完结
  • 原文地址:https://www.cnblogs.com/bkylee/p/5306968.html
Copyright © 2011-2022 走看看