PHP 動態頁面轉換為靜態 HTML 頁面的主要意義在于提高網站的性能和可用性。下面是一些具體的好處:
然而,將 PHP 動態頁面轉換為靜態 HTML 頁面并不適用于所有類型的網站,特別是對于需要動態生成內容和實時更新的網站,如電子商務網站、新聞網站等,這種轉換可能會導致信息更新不及時,從而影響網站的可用性和用戶體驗。因此,需要根據實際需求和情況來選擇是否需要將 PHP 動態頁面轉換為靜態 HTML 頁面。
要生成 HTML 文件,可以使用 PHP 中的文件處理函數和輸出函數來創建一個新的 HTML 文件并將其寫入磁盤。下面是一個簡單的示例:
<?php
// 創建一個新的 HTML 文件
$html = '<html><head><title>My HTML File</title></head><body><p>Hello, world!</p></body></html>';
$file = fopen('myhtmlfile.html', 'w');
// 將 HTML 內容寫入文件
fwrite($file, $html);
// 關閉文件
fclose($file);
// 輸出成功信息
echo 'HTML 文件已經生成!';
?>
在上面的示例中,首先創建了一個包含 HTML 代碼的字符串變量 $html。然后使用 fopen()函數創建一個新的文件,并將其設置為寫入模式 'w'。然后使用 fwrite() 函數將 HTML 內容寫入文件。最后使用 fclose() 函數關閉文件。生成的文件名為 myhtmlfile.html,它將保存在與 PHP 腳本相同的目錄中。
請注意,上述示例是一個簡單的示例,用于說明如何生成 HTML 文件。在實際應用中,您可能需要更復雜的 HTML 代碼,需要使用循環或條件語句生成動態內容,并使用樣式表或 JavaScript 對 HTML 進行美化和交互。
將 PHP 動態頁面進行 HTML 緩存可以顯著提高網站性能,因為它可以減少服務器請求和頁面加載時間。以下是一些用于將 PHP 動態頁面進行 HTML 緩存的常見方法:
1.使用 PHP 自帶的輸出緩存機制 ob_start() 和 ob_get_contents() 函數。
<?php
// 啟動輸出緩存
ob_start();
// 輸出動態內容
echo 'Hello, world!';
// 將輸出內容保存到緩存文件
file_put_contents('cached_page.html', ob_get_contents());
// 清空輸出緩存并關閉
ob_end_clean();
?>
在上述示例中,使用 ob_start() 函數啟動 PHP 輸出緩存,然后使用 echo 輸出動態內容。然后,使用 ob_get_contents() 函數將輸出內容保存到緩存文件中,并使用 file_put_contents() 函數寫入緩存文件。最后,使用 ob_end_clean() 函數清空輸出緩存并關閉。
2.使用第三方緩存庫如 Memcached 或 Redis。
這些緩存庫可以在服務器內存中存儲緩存頁面,并且能夠通過一個唯一的鍵名來訪問緩存頁面,從而加快頁面訪問速度。具體實現可以參考對應的文檔或者庫的使用說明。
3.使用 HTTP 緩存頭信息。
這是一種在瀏覽器和服務器之間緩存頁面的機制,通過設置響應頭信息來控制頁面緩存。可以通過設置 Expires、Cache-Control、Last-Modified 和 ETag 等響應頭信息來控制頁面的緩存,從而減少對服務器的請求。具體實現可以參考 HTTP 協議規范或者使用對應的 PHP 框架提供的緩存機制。
無論使用哪種方法,都需要謹慎考慮緩存時間和更新機制,以確保緩存頁面在需要時被及時更新,并避免緩存過期或出現臟數據等問題。
家好,這一章就是講關于創建幫助函數的問題。思考這樣一個問題,可能有一些公共的函數需要在全局調用,這個地方也要調,那個地方也要調,這樣的函數應該怎么創建?涉及到今天創建幫助函數文件。
首先習慣性的是在APP下面創建一個,這里面就是放全局運用的函數。這邊一個小細節,從學APP基礎都是這樣的。為什么現在很多人后面下面的不寫?這樣寫有一個前提條件,就是php文件必須要是純php文件,不能插html這種超文不連接或者是html、css、gs這種混在一起寫的,這樣寫不行,就是文件必須要是純php文件。
為什么不這樣寫?這樣寫有壞處,比如有人不規范,很多空格,實際代碼就寫了幾行,留了很多空格。實際在計算機服務器端運算的時候會把這些空格也并入運算的,雖然沒有什么任何結果,但也會運算,這樣就會導致腳本運行變慢,性能變差。
這樣不加小問號,不加結尾標簽,到最后一個冒號結束的時候整個這段就運行結束了,這樣反而運行效率更高。所以在純文本的APP文件里面,現在比較好的寫法就是后面不寫B,就是標簽關閉的符號不寫,就直接這樣寫。
小問題給大家嘮叨一下,假設在這邊命名了一個函數,返回一個叫hello word,就是返回一個字符串。現在比如想在外部漏油里面調用,比如要調用打贏勾勾,能打贏嗎?來試一下,BS.test,不行,格格是一個未定義的函數,因為它沒有找到函數,找到原因就是它還不是全局的輔助函數,所以要把它必要把文件里面的函數定義為全區的,就涉及到自動加載的問題。
就在composer jason里面有一個outload,默認是ps24加載這些,比如name space什么的都相應的,這個就自動引導到這邊,a b大學APP的name space就自動引導到APP文件夾上面,類似的,大家能看懂。
在下面添加一行,就是按配置的冒號逗號,配置的fire s也會自動加載APP下面的help,ph重點,它也會自動加載outload,再加載完了就好了,刷新一下,原來不行,還差一步,要把它重新引導一下,就回到虛擬機里面,重新引導一下,引導完了,刷新一下,說明已經是全局的輔助函數了,可以調用。
再考慮一個問題,這邊定了一個go,這么一個函數,如果外部有一個庫,也叫哥哥,不就壞了嗎?如果導入就把導入外部庫的哥哥內涵處給覆蓋掉了,就會造成很多程序運行上的錯誤,所以在上面要判斷一下,如果函數不存在的時候,才運行,加載運行,這里面的函數做判斷是比較嚴謹的,這樣也不影響運行,也是正常的運行的。
這些歌就講到這里。
.引用相關頭文件
引入CSS:
<link href="Scripts/jquery-ui-1.8.1.custom.css" rel="stylesheet" type="text/css" />
<link href="Scripts/ui.jqgrid.css" rel="stylesheet" type="text/css" />
引入JS:
<script src="Scripts/jquery-1.5.1.js" type="text/javascript"></script>
<script src="Scripts/jquery-ui.min.js" type="text/javascript"></script>
<script src="Scripts/grid.locale-en.js" type="text/javascript"></script>
<script src="Scripts/jquery.jqGrid.min.js" type="text/javascript"></script>
因為jqGrid3.6及以后的版本集成了jQuery UI,所以,此處需要導入UI相關js和css。另外grid.locale-en.js這個語言文件必須在jquery.jqGrid.min.js之前加載,否則會出問題。
2.將jqgrid加入頁面中
根據jqGrid的文檔,要想生成一個jqGrid,最直接的方法就是:
$("#list").jqGrid(options);
其中list是頁面上的一個table:<table id="list"></table>
下面是一個簡單的例子:
<script type="text/javascript">
$(document).ready(function () {
jQuery("#list").jqGrid({
url: 'Handler.ashx',
datatype: "json",
mtype: 'GET',
colNames: ['SalesReasonID', 'Name', 'ReasonType', 'ModifiedDate'],
colModel: [
{ name: 'SalesReasonID', index: 'SalesReasonID', width: 40, align: "left", editable: true },
{ name: 'Name', index: 'Name', width: 100, align: "center" },
{ name: 'ReasonType', index: 'ReasonType', width: 100, align: "center" },
{ name: 'ModifiedDate', index: 'ModifiedDate', width: 150, align: "center", search: false }
],
rowList: [10, 20, 30],
sortname: 'SalesReasonID',
viewrecords: true,
sortorder: "desc",
jsonReader: {
root: "griddata",
total: "totalpages",
page: "currpage",
records: "totalrecords",
repeatitems: false
},
pager: jQuery('#pager'),
rowNum: 5,
altclass: 'altRowsColour',
//width: 'auto',
width: '500',
height: 'auto',
caption: "DemoGrid"
}).navGrid('#pager', { add: true, edit: true, del: true,search:false,refresh:false }); ;
})
二、 jqgrid的重要選項
具體的options參考,可以訪問jqGrid文檔關于option的章節(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:options)。其中有幾個是比較常用的,重點介紹一下:
2.1 prmNames選項
prmNames是jqGrid的一個重要選項,用于設置jqGrid將要向Server傳遞的參數名稱。其默認值為:
prmNames : {
page:"page", // 表示請求頁碼的參數名稱
rows:"rows", // 表示請求行數的參數名稱
sort: "sidx", // 表示用于排序的列名的參數名稱
order: "sord", // 表示采用的排序方式的參數名稱
search:"_search", // 表示是否是搜索請求的參數名稱
nd:"nd", // 表示已經發送請求的次數的參數名稱
id:"id", // 表示當在編輯數據模塊中發送數據時,使用的id的名稱
oper:"oper", // operation參數名稱
editoper:"edit", // 當在edit模式中提交數據時,操作的名稱
addoper:"add", // 當在add模式中提交數據時,操作的名稱
deloper:"del", // 當在delete模式中提交數據時,操作的名稱
subgridid:"id", // 當點擊以載入數據到子表時,傳遞的數據名稱
npage: null,
totalrows:"totalrows" // 表示需從Server得到總共多少行數據的參數名稱,參見jqGrid選項中的rowTotal
}
2.2 jsonReader選項
jsonReader是jqGrid的一個重要選項,用于設置如何解析從Server端發回來的json數據,如果Server返回的是xml數據,則對應的使用xmlReader來解析。jsonReader的默認值為:
jsonReader : {
root: "rows", // json中代表實際模型數據的入口
page: "page", // json中代表當前頁碼的數據
total: "total", // json中代表頁碼總數的數據
records: "records", // json中代表數據行總數的數據
repeatitems: true, // 如果設為false,則jqGrid在解析json時,會根據name來搜索對應的數據元素(即可以json中元素可以不按順序);而所使用的name是來自于colModel中的name設定。
cell: "cell",
id: "id",
userdata: "userdata",
subgrid: {
root:"rows",
repeatitems: true,
cell:"cell"
}
}
假如有下面一個json字符串:
{"totalpages":"3","currpage":"1","totalrecords":"11","griddata":[{"SalesReasonID":"1","Name":"Price","ReasonType":"Other","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"2","Name":"On Promotion","ReasonType":"Promotion","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"3","Name":"Magazine Advertisement","ReasonType":"Marketing","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"4","Name":"Television Advertisement","ReasonType":"Marketing","ModifiedDate":"1998年6月1日"},{"SalesReasonID":"5","Name":"Manufacturer","ReasonType":"Other","ModifiedDate":"1998年6月1日"}]}
其對應的jsonReader為:jsonReader: {
root: "griddata",
total: "totalpages",
page: "currpage",
records: "totalrecords",
repeatitems: false
}
注:cell、id在repeatitems為true時可以用到,即每一個記錄是由一對id和cell組合而成,即可以適用另一種json結構。援引文檔中的例子:
repeatitems為true時:
jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords"
},
...
});
json結構為:
{
"totalpages": "xxx",
"currpage": "yyy",
"totalrecords": "zzz",
"invdata" : [
{"id" :"1", "cell" :["cell11", "cell12", "cell13"]}, // cell中不需要各列的name,只要值就OK了,但是需要保持對應
{"id" :"2", "cell" :["cell21", "cell22", "cell23"]},
...
]
}
repeatitems為false時:
jQuery("#gridid").jqGrid({
...
jsonReader : {
root:"invdata",
page: "currpage",
total: "totalpages",
records: "totalrecords",
repeatitems: false,
id: "0"
},
...
});
json結構為:
{
"totalpages" : "xxx",
"currpage" : "yyy",
"totalrecords" : "zzz",
"invdata" : [
{"invid" : "1","invdate":"cell11", "amount" :"cell12", "tax" :"cell13", "total" :"1234", "note" :"somenote"}, // 數據中需要各列的name,但是可以不按列的順序
{"invid" : "2","invdate":"cell21", "amount" :"cell22", "tax" :"cell23", "total" :"2345", "note" :"some note"},
...
]
}
2.3 colModel的重要選項
colModel也有許多非常重要的選項,在使用搜索、排序等方面都會用到。這里先只說說最基本的。
三、 注意事項
1. 動態改變Add Form或者Edit Form中的select的內容,如:改變下圖中的Comparator下拉中的內容。
$("#list_d").navGrid('#pager_d',{add:true,edit:true,del:true,search:false,refresh:false},
{
checkOnSubmit:false, closeAfterEdit: true,recreateForm:true,
beforeInitData:function(formid){
initComparator();
},
beforeShowForm: function(formid){
$("#list_d").jqGrid('setColProp', 'Name', { editrules:{required:false},});
$('#tr_Name', formid).hide();
}
},//edit
{},//add
{}//del
)
beforeInitData, beforeShowForm在每次點擊編輯的時候都會執行。initComparator的作用是通過ajax獲取數據,然后利用$("#list_d").jqGrid('setColProp', 'Comparator', { editoptions: { value: valueString} });來設置Comparator下拉中的內容。其中valueString的格式如下’ equal to: equal to; not equal to: not equal to’。鍵值之間用冒號隔開,2項之間用分號隔開。注意:把recreateForm設為true,否則'setColProp'只在第一次調用時有效。
2. var rowNum = parseInt($(this).getGridParam("records"), 10); 得到數據條數。
3. jQuery("#list_d").clearGridData();清空數據。
4. jQuery("#list").getCell(ids,"Key");獲取第ids行的key列。
5. $("#list").jqGrid('setSelection', "1");選中第一行。放在loadComplete:中在gird加載完成的時候自動選中第一行。loadComplete:function(data){$("#list").jqGrid('setSelection', "1");
}
6. 對于像1中的可編輯的字段,可以設定rule,參見http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#editrules
7. 修改Option,以URL為例
jQuery("#list_d").jqGrid('setGridParam',{url:"xxx.aspx",page:1}).trigger('reloadGrid');
*請認真填寫需求信息,我們會在24小時內與您取得聯系。