tp剩餘未驗證內容

  1. new Image(寬度,高度) $(image).attr('src', ...).load(function(){....})
    load表示瀏覽器從服務器下載(裝載)對象完成, 這個load方法很重要, 能夠由瀏覽器自動判斷一個對象, 或者一個節點是否裝載、下載完成了javascript

  2. new Image的時候, 內存緩存中 的圖像 如何裝載進來, 要加入到文檔的某個節點中來才能 生根,才能顯示??php

  3. 使用 ajax事件:瀏覽器系統會自動檢查 ajax的(全局)開始和結束, 以及每一次ajax請求的開始和結束,要把這些ajax事件註冊到你須要顯示和隱藏的節點上,這個一般是div或者下面的 圖片?css

顯示圖片的jquery方法 一般是用show, 而隱藏的時候,須要選擇恰當的方法了:html

  • 能夠用hide
  • 可是, 若是你以爲hide消失得太快的話, 就要用fadeout或者用 animate的方式。 animate更靈活,它支持兩個參數,一個是效果的js對象, 另外一個是過渡的時間,多少毫秒(在jquery的效果函數中, 0 表示立刻顯示或隱藏)前端

  • 也能夠用 一個非標準的css樣式:opacity: 透明度,等於0表示隱藏, 1 表示顯示, 這個非標準的css樣式,能夠由jquery來封裝隱藏底層差別java

  • jquery能夠緩存從服務器交互取得的數據, 這樣之後若是須要再次使用這些數據的時候,就直接用本地緩存,而沒必要再次從服務器上去取數據,這樣反應會更快。 使用的函數是 data. data('緩存數據的名稱',緩存數據內容data) 以及取數據的方法是:data(‘緩存名稱');mysql

  1. 要讓圖片和文字同一行顯示(並且高度一致), 對圖片使用css的float樣式??jquery

  2. php緩存技術, (csdn thinkphp緩存技術 think2me)web

  3. tp以及 普通瀏覽器是如何判斷 一個請求是不是 ajax請求的?ajax

:是經過 服務器變量 $_SERVER 來判斷的:

  1. tp是如何判斷ajax提交的?
    是在文件Library/Think/App.class.php中定義的,方法是經過
  • 判斷 $_SERVER變量中是否有 'HTTP_X_REQUESTED_WITH' 這個元素, 且這個元素值等於'xmlhttprequest'
  • 或者第二種方法是, 判斷 $_POST或 $_GET變量中, 是否有 'ajax'這個元素.其中的ajax索引名稱,是由 convention.php中的var_ajax_submit來配置的.

即:

define('IS_AJAX', 
(
(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')|| !empty(($_POST[C('VAR_AJAX_SUBMIT')])) || !empty(($_GET[C('VAR_AJAX_SUBMIT')]))

)?true:false

);
  1. 關於tp的ajax請求處理函數?
  • 首先, 要判斷 當前請求是不是 ajax請求,即 if(!IS_AJAX) {$this->error('錯誤提示'); }
  • 而後, 纔是 對 ajax 提交的處理,一般步驟是: 第一, 邏輯執行, 準備好ajax 返回的數據data: 第二, data一般是本身 組裝的數組, 這個數組 一般應該包含(固然具體是由你本身來決定的) 執行狀態status (根據不一樣的情形返回ok 或false), 具體的處理值; 第三, 調用 控制器的 ajaxReturn方法: $this -> ajaxReturn($data);

  • 這裏返回的是數組, 在前端的時候, 就已經被 jquery的 post或 get請求轉換成json 格式的 js對象了, 就能夠直接使用 js對象的點語法 或 中括號語法 了 ???

  1. 反射類的價值. tp框架執行過程和反射調用?

mysqli中的i是improvement改進的意思

mysqli是用面向對象的方法寫的, 而mysql是用c面向過程寫的. 因此, mysql中的函數都有前綴mysql_, 而mysqli中的對象中的成員方法則沒有這個前綴.
mysqli使用的是 持久性性 鏈接

一個簡單的例子:

$db = new mysqli('localhost', 'root', '123', 'testdb');
$res = $db -> query('select * from tablename');
$row = $res -> fetch_assoc();

echo $row['id'];

注意, mysqli中的 fetch_assoc 只是取得 結果集的 第一行數據 做爲 一個 一維數組.

tp中的 ajaxReturn的用法, 要了解這個函數 只須要看一看它的寫法就行了:

protected function ajaxReturn($data,$type='',$json_option=0) {
        if(empty($type)) $type  =   C('DEFAULT_AJAX_RETURN');
        switch (strtoupper($type)){
            case 'JSON' :
                // 返回JSON數據格式到客戶端 包含狀態信息
                header('Content-Type:application/json; charset=utf-8');
                exit(json_encode($data,$json_option));

首先, 它是一個 protected 方法, 只能在控制器的 內部被調用;
其次, 要注意 這個函數 沒有 返回值! 它的目的, 只是對要 經過ajax返回 的數據 $data 進行 一次 "格式轉換" 而已. 其實, 你要處理客戶端的ajax請求, 徹底 能夠 不用到 這個 函數. 由於, 在 query的 $.get或 $.post的參數中, 你指定了 處理ajax請求的 服務器端方法了, 好比ajaxHandler, 那麼 你直接在控制器的 ajaxHandler方法中 進行業務處理, 組裝好 要返回的 數據(一般是數組$data), 而後你直接echo 這個數據就行了, 這個數據 就能夠在 前端被 獲取到. 或者: 在 echo以前, 你本身手動的 調用一次 json_encode, 將數組轉換爲 json形式/格式 的字符串string.

使用 jsonReturn只是 對 ajaxHandler中 要返回的數組 $data 進行了一次 "格式"包裝而已 : 首先在頭部進行了聲明:header('content-type: application/json; charset=utf8'); 而後 exit(json_encode($data, $json_option); 若是是 其餘非json格式, 則作相應的其餘處理

json_encode($value, $option); 其中的option是常量, 主要是 指示 要轉換的數據$value中 的 一些特殊符號 該如何處理. json_encode返回值是一個 string 或false.

注意 $.get或 $.post 接收到 json格式 返回的數據, 已經就是 一個 js對象了.

js對象 屬性的 調用方法 !important

js的對象, 能夠用 大括號 來表示, 所以, 這個大括號{ }能夠看作是一個 集合! 能夠將js對象, 能夠看做是 不少個 屬性的 集合; 也能夠看作是 多個 key: value 鍵值對的 集合.
因此, js的對象 有多種 aliases 別名: 在用法和理解上, 就等同於 關聯數組, 字典, 映射, 哈希表, 查詢表等等, 均可以.

因此, js的對象 的屬性, 在 引用方法上, 就有 兩種方法,
一種是用 點號(點符號)來引用. 一種是用 中括號標記 來引用

可是要注意的是, 若是 使用 使用點號來引用的話, 後面的 屬性名 必須是 一個 合法的 javascript標記: 若是不是合法的js標記,好比 是以"空格, 連字符- , 或數字 開頭的"非標準的 javascript標記, 則只能使用 關聯數組 的方式: 即用中括號的方式 來 引用.

因此 有時候, 咱們可能不知道, 不肯定 屬性名是不是 合法的js標記, 推薦 從此 無論在何時, 都使用 中括號標記 來 引用 js對象的屬性. 由於在中括號中的 屬性名, 無論原來是什麼 數字/空格/仍是對象等等, 都 會被 自動轉換成 合法的js標記 字符串! 是字符串.

js對象的屬性和方法 其實 並無 明顯的區別, 方法在這裏 只是 "能夠調用"的屬性 而已.

另外: js中的 eval雖然功能強大, 可是 仍是建議 "在任什麼時候候都應該 避免使用"這是 MDN上 權威 站點上的原話. 

解答一個 長期的 很重大的 一個疑點: 在模板html文件中的任何地方, 包括head, title甚至是 script的腳本中, 都是 可使用 控制器傳遞 過來的 模板變量 和 模板函數(好比 U函數)的!

  • 可是, 要注意, 在模板中使用的 這些 變量 和函數 轉換後的 內容, 若是原來的內容 是 "字符串", 則 在模板中 轉化後, 是不會帶 引號的! 這個在某些 場合 是會出錯的. 特別是 在 script 腳本中, 使用 這些模板變量和模板函數的時候, 更容易 出錯!
  • 因此, 若是確信 你要 用的是一個 字符串, 則必定要在 這些模板變量 或 模板函數 兩邊 加上 引號:
<script>
    alert({$ok});   //這裏 不加引號的話, 不會彈出, 由於會報錯:  {$ok} 轉換後的 變量... undefined.
    alert({:U()});  // 這裏必須加上 引號, 不然會 報錯: 正則表達式...
</script>

php這種語言 自己提供了 json_encode 和 json_decode "全局函數", 將 一個 php對象 轉換成 一個 json格式/形式 的 字符串, 或將 一個 json格式/形式 的 字符串 轉化成一個 php的對象.

若是是輸入 password 字段的 表單, 若是你的應用 很是重要,好比有資金 交易的話, 就必須部署 https協議, 不然 : password fields present on an insecure (http://) page. This is a security risk that allows user login credentials to be stolen.

 如何部署 https?


前端框架和 jquery就使用 bootstrap. 由於bs提供了統一的界面和組件ui. 並且bs正好又是創建在 jquery上的. 因此, 就這麼定了, js框架用jq, ui框架用bootstrap

實做: 用cookie 模擬網站登錄, 顯式權限, 跳轉, 退出, 時間設置爲一週, 多個頁面跟蹤用戶的cookie.

php中跳轉, 除了用框架的 redirect, success, error等 "封裝"方法, 還可使用 header方法: 即 header('location: jumpto.php'); 要注意, 只要發生 跳轉後, 執行header中的 跳轉後, 其後面的代碼就不會再繼續執行了, 相似於 die, exit等.

在原生的 php鏈接/登錄數據庫, 判斷是否成功, 方法是 : 判斷 sql 查詢 語句執行結果 $result的 屬性 num_rows 是否大於等於1.
其中 mysqli 的 fetch_assoc是獲取結果集的第一行數據.

  • 在cookie中, 判斷是不是有效的 登陸用戶, 若是隻是返回的id, 那麼, 保持的cookie值 時, 就能夠 直接 從post去獲取. 而不是再去數據庫查詢獲得.由於 post中就已經存儲了用戶信息了.

網站登陸是 用 "登陸" login, logout, 註冊是: sign(sign up) 跟 "登錄"沒有任何關係.

若是是本身寫的 站點頁面, 沒有使用框架, 那麼 公共的 通用的內容, 就放在 common.inc.php文件中, 使用include機制 來包含. 好比數據庫鏈接的代碼.

在本身寫的頁面, 判斷 要登陸的用戶 在後臺數據庫中 是否存在, 就只是查詢 用戶的名稱(where子句中) 所對應的id是否 存在就行了. 沒必要查詢更多的額外字段, 好比: select id from user_table where name= name_in_post;

html的表格, 也有 caption 屬性, 相似於 html的title 標籤.

必定要寫 img標籤的 alt屬性(這個是在圖片 不能顯示/被禁用, 未加載進來/網速慢時 顯示的 關於圖片自己的描述文字信息) , 而img的 title屬性 則是 提供 關於這個圖片的 其餘的 輔助性的 /說明用途等 的文字信息, 即: alt和 title的 語義 是不一樣的.

在php代碼中, 即便是 原生的 php代碼中, 你能夠將 變量 $var放在 大括號中, 即{$var}, 相似於 tp的寫法. !注意不能是 將 大括號放在 $ 後, 好比: ${var}這樣是不行的, 這個是 bash的寫法. ! 可是 必須將{$var} 放在引號中, 不然會出錯. 即必須是 "{$var}" 並且, 當 使用 大括號後, 裏面的內容就根引號外面的內容 隔離了. 即這個時候, 你在 裏面任意的使用 引號, 都是能夠的, 都不會引發 引號的嵌套問題:
"{$post["name"]}" 的寫法是沒有問題的.

在設計mysql數據庫表/中的 用戶是否具備 某種 權限時, 可使用 數字 0/1 來表示 "沒有/有"對應的權限就行了. 這時候,這個數據類型能夠設爲 tinyint. 默認的 tinyint是 tinyint(4) 表示顯示時, 最多顯示4位數字.

mariadb的 整數類型, 有5種: tinyint, smallint , mediumint, int, bigint(在寫法上 ,都是小寫, 中間沒有分隔, 是一個單詞). 大小依次是 1個字節(0-255), 2個字節, 3個字節, 4個字節和 8個字節.

mariadb的zerofill?

zerofill是一種 字段的 屬性描述specification, 如同 unsigned. 它 而不是系統的 全局變量, 因此 你用 `show variables like '%zerofill%' 會顯示 empty.

  • 好比 一個字段 用 zerofill描述: pay_type tinyint(4) unsigned zerofill NOT NULL DEFAULT '0000' COMMENT '支付方式:1卷皮系統 2支付寶 3銀聯 4財付通 ……',

  • 這是一個 較好的例子, 在實際生產系統中, 定義字段的時候, 要寫完整, 好比: field_name tinyint(4) unsigned zerofill/字段數據類型屬性 not null/是否爲空 default '0000' comment '...',

  • 數字類型括號中的數字, 根varchar(10)中的數字 其做用是不一樣的! 前者只是表示 顯示 寬度. 跟數據的存儲個數不要緊. 後者就真的表示 容許存儲的最大字符數. 注意 在mysql中 , 字符是不分("高低貴賤")的:即 一個中文字符, 英文字母, 數字, 都表示的是mysql中的 一個字符. 即varchar(10)既能夠存放10個英文字母, 也能夠存放10箇中文漢字.

  • 要注意, 若是你插入的數據中, varchar(10)字段的內容 超過了 10, 它會自動 給你 截斷的 . 即最多給你保留 10 個 mysql字符.

mariadb 修改列, 有三種狀況, 使用不一樣的謂詞: 1. alter column column_name ... 這個是用來設置或刪除默認值的; 2. change column old_name new_col_name column_definition 這個change是用來修改 列的名稱的; 3. modify column col_name col_definition...


關於session和cookie?

  • 服務器向客戶端發送信息,依次是 狀態信息,頭信息,實際內容,所以,在setcookie ,header等函數以前, 不能有實際的內容輸出(由於這時候的輸出內容是不能被識別的,而且會引發頭部信息的錯誤。

  • 你能夠查看cookie文本文件, 固然就能夠修改這個文件的內容. 每一個cookie 是$_COOKIE的一個元素.
    同一個網站的全部cookie都是放在同一個文本文件中的. 同時,你也能夠設置單獨的 一個cookie爲一個數組.
    當所有cookie過時後(刪除), 該cookie文件就 不存在了.

  • cookie更持久, 但容易被修改, 能夠經過加密的方式加強cookie的安全性
    cookie能夠看作是商家給顧客發放的 會員卡, 本身保持, 而後購物時本身主動出示會員卡.

  • session更安全保存在服務器端. 但有效時間短, 一次訪問網站頁面關閉後,就失效. 可是session的id是保存在客戶端的cookie中的.

  • 會話控制,是在多個頁面中跟蹤標記同一個用戶, 其中的session和cookie是網站開發中不可或缺的。
    網站請求的http機制, 是無狀態的, 就是指 即便 是 同一個用戶 訪問同一個網站的 兩個 頁面(即便是被看作超連接跳轉)(甚至是同一個頁面的刷新), 會被看作是 兩個獨立的請求,第一個頁面的信息, 請求變量, 設置等不會被帶到 第二個頁面(或者刷新後的頁面), 所以就須要一種信息保持機制, 就像粘貼板, 記事本同樣, 當用戶第一次登陸時,把這些登陸信息 記下來, 而後 當這個用戶 在這個網站中 的任意一個頁面時, 這些用戶信息均可以被公共的使用.

  • 保持信息, 除了用cookie和session外, 還能用其餘手段嗎? 不能! 由於: 1. get和post只能在兩個頁面之間 傳遞數據, 而 2. 文件或數據庫的保持或持久化則是全部 用戶均可以被使用. 顯然不行. 登陸等信息 只能被 同一個用戶使用.

  • session要手動的啓動, 可是 tp已經在框架啓動時, 幫你啓動了.

  • 要注意的是, cookie不是實時生效的, 第一次寫入後, 要等到第二次訪問時才能生效. 所以,要想實時生效, 能夠在 form表單 提交的處理php文件中, 輸出一段script, 在提交時就自動提早刷新一次: echo '<script> window.location.href = "..." </script>' (即刷新不僅是refresh, 有不少方法均可以實現).

什麼事get方式訪問, 什麼是post?

凡是經過 地址欄輸入url訪問, 或者是 經過 超連接a的 get傳參跳轉的, 都是get訪問/get請求; 只有經過表單 post提交的,纔是post請求.(固然form也能夠經過get請求傳遞數據, 可是通常不會).


關於php的鼠標/按鈕操做, 不要只固定一種思路,覺得只有 button, 只有onclick, 還有新的思惟方式, 就是使用 超連接! 經過超連接a的操做, 有一個好處是, 能夠 在php文件中, 經過 $_GET來獲取數據並進行邏輯處理.

  • 也就是說,若是你想 在 前端, 經過js 來處理動做,就可使用 button, 使用onclick
  • 可是, 若是你想在 後臺的 php文件中, 獲取數據並處理的話, 就使用 a超連接...

  • 當表單所在頁面 被刷新的時候, 表單就會被從新載入(即從新從服務器上下載該頁面/或者從緩存加載). 這時候, 原來填寫的內容就會消失了, 回到空的初始頁面狀態.

  • 頁面的刷新(從新載入), 除了按f5外, 還有表單的再次提交, js腳本的/ php的header函數: location.href

若是表單爲空提交, post對應元素 是空 仍是 isset???


form表單的action是什麼意思?

是動做, 是操做的意思. 即: 當表單提交時, 將執行什麼操做, 這個操做, 正好是 mvc框架中 action操做的意思,
注意, 若是action="" 就表示提交到當前頁面進行處理. 在不少demo中就這樣

tp框架自動 已經對session進行了啓動, 在convention.php中, 有 SESSION_AUTO_START => true, 因此能夠在 文件中直接使用session的函數了.
session 有緩存的, 設置, 獲取等函數,
要刪除某一個session, 即session數組中的某一個元素, 使用 session('name', null);
若是要刪除全部的session 元素, 直接用 session(null)
要刪除session文件自己, 銷燬session這個數據, 用session(destroy);

tp模板中的 表單action, 圖片src, 連接href等的地址, 既能夠用 U函數來寫, 也能夠直接用 "/模塊/控制器/操做" 的方式來寫? 要注意的是, 地址必須從 模塊開始寫起, 模塊/控制器是不能省略 的, 模塊前面的 斜槓/ 是能夠省略的. 由於默認的使用pathinfo地址模式, 用斜槓的方式 就能自動解析到跳轉地址的.

isset是判斷變量是否設置過, 在全部聲明或定義變量的語句中, 只有 明確的說 $var=null時 isset返回false, 其餘都會返回true.
可是isset只能接收 原始的 簡單類型的變量, 不能接收 一個函數的返回值來 判斷.

  • use ... on 把...用在 什麼上面. 好比: cannot use isset() on the result of a function call.
  • 所以, 要判斷一個函數的返回值 是不是 isset, 是不能用 isset(func())的, 要用 null !== func() instead. 好比: echo (isset(I('post.name')))?'設置了name':'沒有設置'; 這樣是錯誤的, 應該: echo (null!== I('post.name'):'設置':'沒有設置' 或者直接用 簡單變量,不要用 I函數. echo isset($_POST['name'])? '設置': '沒有設置';

  • **特別注意, 判斷一個變量是否設置, 最好不要用I函數, 由於 I函數有 反作用, 它會設置 一個默認值, 因此即便在 原來的 $_Post變量中沒有判斷的索引變量, 也老是返回true. 因此 要用 $_POST['flag'] 自己原生的 數組來判斷. **

在前臺頁面佈局的時候, 使用 frameset和 include的區別是: 前者的各個頁面之間是 分離的,分隔的, 獨立的; 因此frameset的各個頁面中, 能夠對應的 具備/ 能夠執行/ 各自的控制器和操做, 在本身的操做方法中傳遞參數, 是能夠收到的, 而include被包含時, 被包含的文件雖然是做爲一個獨立的文件存在, 可是並不 強制 要求 被包含的文件 具備 對應的 控制器和操做, 所以, 在被included的文件中,要使用 後臺變量/模板變量如{$include} 的話, 必須由主文件中(即當前控制器的當前操做中) 給模板變量 賦值.


關於tp框架中, include標籤的使用

  • include的屬性file, 能夠有兩種指定方法,一是使用 模板表達式 Home@Public(公共控制器)/header(操做), 可是這個模板表達式中的控制器和操做也只是一種形式(至關於目錄結構)並不強制要求真的有 那樣的控制器和操做; 另外一種方式是使用 模板文件 (要從./Application...開始指定絕對路徑)

  • 再就是 被包含的模板文件無論用 模板表達式仍是 模板文件的方式, 都必須是 *.html結尾的文件, 多是在 "模板引擎設置" 中進行了限定TMPL_template_suffix => '.html' // 默認的模板文件後綴 也就是說, 只有 .html 才被認爲是模板文件, 才能被 include所用.

  • 還能夠由 include標籤中, 給被包含文件傳參, 要注意這個傳參,不是 控制器/操做的傳遞變量, 在被包含文件中, 使用 中括號 方式 引用include的傳參: [這裏是include的傳參]

get_defined_constants是php語言自己提供的一個全局函數, 是: 將分組顯示 系統中定義的全部常量 : 包括php核心定義的常量, php擴展定義的常量 和 用戶本身的常量, 好比tp框架定義的常量就放在 'user'分類中. 這個函數有一個 可選參數: categorize? 表示是否對全部的常量進行分類, 默認是false, 因此, 要分類的話, 必須顯式的傳遞 true參數: get_defined_constants(true);

tp模板中 若是要將 模板常量和字符串 相鏈接/ 拼接, 怎麼寫??


div和table從語義上來說: div是內容分塊; table是表格, 在語義上就是用來 表達 二維數據的
在顯示方法上的區別: div是即載即顯示, 而table是加載徹底後 才顯示.

在佈局上, 先期使用table, 後來使用 table+div(因此 會看到不少 在 表格的列 td中使用 div的), 後來徹底使用div.
div+css雖然靈活, 可是也會在一些結構上引發 困惑和帶來複雜度... 而css的兼容性並不太好. 並且外部引用css文件, 對後臺web服務器的壓力很大??
因此: 若是是一箇中小型的 web應用, (或是主要給一個公司使用的)網站, 使用table來佈局是合適的, 並且開發效率要快得多. 或者是 使用 table+div(表格+div結合css)是合適的.

使用frameset時的幾個注意點:

  • frame自己是關閉標籤, 因此 不要用 <frame...> </frame>的方式
  • 嵌套frameset時, 不要將frameset放在frame中
  • 注意frame, 和 frameset標籤 各自的 屬性有哪些, 不要 搞混淆了. 總之, frameset是定義 框架和框架之間的屬性. 而frame 是定義 本框架內的屬性 好比: marginwidth, marginheight, src, name等是 用來定義frame幀自己的屬性
  • 其中,frame的屬性 src和name是 必須的屬性, name是用來 連接的, 即便不用也要寫.
  • 最容易出錯的地方, (對我來講)就是 rows, cols中的分隔 要用逗號隔開, 即: row="300, * "不能省略逗號, 不然框架分割會無效
  • frameborder=0/1 只能設置爲0或1, 表示是否顯示或不顯示邊框. bordercolor設置邊框顏色, 可是通常都不會去設置這些屬性.
<frameset rows="100, *" frameborder="1" framespacing="0" >
    <frame  src="header.php" />
    <frameset cols="140, *" >
        <frame  src="navi.php" name="navi" scrolling="no" noresize="noresize" >
        <frame  src="content.php" name="content" marginwidth="50" marginheight="10" scrolling="yes" noresize="noresize" />
    </frameset>
</frameset>

在導航頁面中
<body>
   <div>導航</div>

    <ul>
        <li><a href="Home/Index/dz" target="content">dz</a></li>  // 這裏每一個連接項, 連接的是各自對應的文件內容.
        <li><a href="Home/Index/jz" target="content">jz</a></li>  // 最重要的是, 這裏的target正是右邊主div內容框架的name.
        <li><a href="Home/Index/xq" target="content">xq</a></li>
        <li><a href="Home/Index/xx" target="content">xx</a></li>
    </ul>
</body>

模板中tmpl的常量, 已經被behavior行爲替換了, 替換對應 的控制器等常量了, 因此在模板中使用這些常量時, (並且模板中, 只能使用 模板常量, 而不能使用 只在php頁面中使用的常量), 不能再用 $Think.const....__常量名__ 來輸出了. 這樣就多了, 重複了....

控制瀏覽器能夠縮放的最小寬度和高度的js代碼:

window.onresize=function(){
if(document.body.clientHeight<700){
alert('禁止縮放');
window.resizeTo(document.body.clientHeight, 300);
}
} 寬度的設置同理.

??jquery實現, 根據瀏覽器窗口大小, 自動縮放圖片的方法?

瀏覽器自己就有一個 最大/最小的縮放值 (嗎?)

php的魔術方法, 能夠實如今類的外部 訪問它的私有屬性, 是 走 __get($name); 若是在 類實例化的時候, 設置了私有屬性的值, 是走的 __set魔術方法.

分頁類, 不一樣的分頁類, 在基本原理, 使用方法上都是 大同小異的, 在 最下面的 分頁字符串 徹底能夠 自定義 符合本身須要的 更復雜的html代碼..

爲何要使用框架, 框架的 開發速度更快, 你只須要專一於 業務/邏輯的實現, 其餘基礎結構已經幫你寫好了(即便你本身從0開始寫, 也差很少就是框架的這些內容, 可是還不必定寫得這麼好). 並且框架 更穩定/更可靠(就像給你作的廠房 電路不會扯拐, 管道不會堵塞, 不會時不時的停水停電), 更安全(病毒是由程序自動掃描你的代碼) 一般不會引發廠房崩塌, 漏水漏電.

如今開發網站的分辨率通常設置爲多少?
如今大多數人的電腦分辨率都不會小於1024768, (實際上更多的寬屏設置爲 1600900) 因此網頁的寬度設置爲 1000, 1100 都是能夠的, 而後兩端由margin自動留白.

  1. 網頁設計的寬度最好是固定值,好比1100px、1000px, 而高度自適應(不規定高度就好)。 這樣能保證頁面在不一樣設備分辨率下都能正常

表現。 最好是加上 min-width的css屬性, 能保證頁面正常。

注意div的width設爲 50%, 不是指顯示屏幕的50%, 而是指當前瀏覽器 窗口的 寬度的50%。

對於通常的前臺頁面, 一般的設計是: 頭部或底部的寬度是100%滿屏的, 中間內容是固定寬度、居中 的。

  1. Think\Upload 類 upload方法,返回值是一個 二維數組, 相似於 mysql查詢返回的結果集。 這個二維數組的每個 元素, 包含的是關

於 一個 上傳文件的相關信息,又是一個數組。 而 uploadOne 是隻上傳一個文件, 所以返回的結果 就只是 關於這一個 上傳文件的相關信

息 它就是一個一維數組。
事實上, 返回的信息, $file確實就是 對 原生的 超全局變量 $_FILES數組 的一個封裝。

  1. tp容許在輸出變量的時候, 對變量進行處理,好比我要輸出 {$create_time} 的值, 可是我並不想直接輸出, 我還想作一下 「輸出時間

的格式換」處理, 所以 若是要在後臺作這些 「樣式」的處理並不科學, 後臺只是輸出原始數據, 至於具體的 表現形式,好比ymd, Y_M/d

等等, 這個仍是交給前端 模板去處理。 因此 tp爲了知足這樣的目的, 提供了模板變量的函數處理,默認值處理等等,好比:
{$create_time|date='Y-m-d', ###}

  1. tp中的NOW_TIME常量, 是在 Library\Think\App.class.php 中定義的, 是經過 $_SERVER['REQUEST_TIME'] 來定義的, 即當前腳本的請

求時刻, 差很少就是當前腳本的執行時刻。

所謂tp的命名規範, 只是說知足兩點: 一是類的存放位置 要跟 命名空間namespace的聲明一致, 二是, 類的結束名字(擴展名)必

須是 .class.php 其餘不要求, 好比 類是否要繼承自 Controller等都不是命名規範中所要求的。


  1. 配置中的filter全都是 針對 I 方法進行的設置, 過濾函數有 null, default_filter, var_filter.

  2. U 方法和I方法是tp中的核心方法。 U方法的定義規則是:
    U('地址表達式', [傳遞的參數'], [僞靜態後綴'], ['是否顯示域名']
    僞靜態的後綴, 能夠本身輸入設置,好比是html, tpl等, 也能夠是 false/true. 表示是否使用僞靜態後綴
    參數的傳遞, 有三種方式, 一是在地址表達式中一併寫, 二是單獨用字符串傳遞, 三是用數組進行傳遞. 一般推薦使用的是第三種方式, 將參

數放在 單獨的數組中.

**另外, 使用U方法 生成的地址是根據 當前的url模式 自適應生成的, 即在不一樣的url模式下, U方法地址均可以生成, 可是生成的地址字符串

卻不同.**

I函數是爲了獲取 傳遞過來的參數, 因此會有一個默認值, 即當傳遞過來的參數爲空的時候的默認值, 再就是一個過濾函數.

相關文章
相關標籤/搜索