1. 程式人生 > >【前端閱讀】——《活用PHP、MySQL建構Web世界》摘記之設計技巧

【前端閱讀】——《活用PHP、MySQL建構Web世界》摘記之設計技巧

簡化 return 下載 center src rto 響應 server pty

技術分享

二、設計技巧

Programming的習慣因人而異,這裏只提供一些經驗,可以參考。

1、利用Include模塊化你的程序代碼

Include函數基本上說:就像是把另一個文件(HTML或者PHP程序)讀進來,插入在Include的地方。適度地利用這個特性,可以模塊化程序代碼,也讓程序不至於太過冗長。

  • 利用Include 簡化HTML修改

以一個典型的網頁:左邊是Links,右邊是文字。

技術分享

  1. 問題:假如一個網頁有10頁這中版面,萬一要改一個Hyperlink,必須改動10個文件(當然,現在的Editors如HomeSite都能一次做到,如果用Dreamweaver或FrontPage就更不用說了)
  2. 解決:利用PHP,我們可以把Hyperlink的部分獨立出來,而所有用到的地方再Include進來即可。
//文件leftlink.phtml
<p><a href = "link1.html">Link 1</a>
<p><a href = "link2.html">Link 2</a>
<p><a href = "link3.html">Link 3</a>
<p><a href = "link4.html">Link 4</a>
<p><a href = "link5.html">Link 5</a>
//index.phtml
...
<div align="center">
<table width="80%" border="1">
   <tr>
          <td width="14%" align="center">
                  <!-- left hyperlinks -->
                  <?include "leftlink.phtml";?>
          </td> 
          <td width="86%" valign="top">
                   <p>這是說明Include()的簡單範例。
                   
<p>左邊的hyperlink也可以是buttons。 </td> </tr> </table> </div> ...

這樣一來,當你要更改Link部分的HTML碼,只要改leftlink.phtml即可。這樣的手法通常用在有“重復特性”的版面,相當方便。

  • 利用Include模塊化函數
  1. 如果你用“記事本”寫網頁,遇到一些JavaScript函數,像是換圖的函數,每一個用到的網頁,都要復制一份過來。在PHP裏也許你也有一些自己寫的函數,例如處理中文的、檢查身份證字號等,在很多地方會被重復的用到。這些情形,利用Include將方便許多。
  2. 換言之,Include也能插入PHP程序片段,像這樣一個簡單的E-mail處理程序:
<?
//email-rewrite function
function rewrite_email($str){
       $str = str_replace("","",$str);//除去空白
       $str = strtolower($str);//改小寫
       return($str);//返回
}
?>

每次要用到這個函數時:

<?
  include "email_rewrite.phtml";//記得先include
  $email = rewrite_emal($email);
?>

開發的時間久了,自然會積累一些自定義函數,依特性區分,同性質的放在一個文件夾內,慢慢地會起到“函數庫”的作用,相當方便。

2、利用<form>作為互動的橋梁

網頁下載到Browser端,基本上成了一堆HTML碼,完全在Local端動行,因此要有“互動”的效果,除了On Mouse Over換換圖、改改色、或利用JavaScript切到另一個畫面外最直接有效而富有彈性的方式,就是“送一些信息回Server端”,讓Server端的程序判讀、處理、響應。要達到這個目的,只要用<form>就行了。

<form>對PHP而言,等於把一些參數在網頁之間傳遞。(當然參數的傳遞除了form外,可以直接指定如test.phtml?123或使用Cookie)

最常用的例子:查詢結果(如搜索引擎)的“上一頁/下一頁”,只要利用form傳遞頁數即可,像這樣:

//index.phtml
<html>
<body>
這裏是第三頁的查詢結果……

<form anction="search.phtml" method="POST">
    <!--利用hidden字段告訴server端現在的頁數-->
    <input type="Hidden" name="cur_page" value="3">
    <input type="Submit" name="showprev" value="上一頁">
</form>

<form action="search.phtml" method="POST">
     <input type="Hidden" name="cur_page" value="3">
     <input type="Submit" name="shownext" value="下一頁">
</form>
</body> </html>
//search.phtml 讀取片段
<?
if(isset($showprev)):
    //顯示上一頁
    $showpage = $cur_page-1;
    ...
    else if(isset($shownext)):
    //顯示下一頁
    $showpage = $cur_page+1;
    ...
end iif;
?>

利用參數的傳遞,網頁的感覺立刻就不同,例如互動性質的采購網頁,一步一步詢問消費者意見,最後找出最合適的商品,就是最常見的例子。

3、If ... Else做流程控制

<form>等方式可以在不同的網頁間傳遞參數,當然也可以傳給自己!這是後就需要用到流程控制。

//index.phtml
<html>
<head>
    <title>流程控制實例</title>
</head>
<body>

<? if(empty($keyname)):?>
<!--尚未輸入姓名,顯示form-->
<form action="index.phtml" method="POST">
請輸入姓名:<input type="Text" name="keyname">
<input type="Submit" name="submit" value="Go!">
</form>

<?else:
    echo "您好! $keyname";
endif;?>

</body>
</html>

這樣的模式,在CGI的程序設計也常常見到,適當的運用可以精簡很多互動的過程,作為流程控制,當然太多層的話,程序會比較復雜。

4、必要時用文件取代數據庫運行

搭配數據庫使用的PHP非常好用,不過有些時候數據量小,變化的機會不大,利用文件存數據反而較有效率。至於文件讀入的方式,可以用Include或者Fgets。

例如:要做到date()輸出的星期(0~6)與中文“星期一、二...”的轉換,你可以用一個數據庫,建立一個Table,並同時建立兩個字段,如下表:

WeekID WeekName
0 "星期天"
1 “星期一”
2 “星期二”
3 “星期三”
4 “星期四”
5 “星期五”
6 “星期六”

然後在每個要用的地方,打開數據庫的鏈接(mysql_pconnect())、送出Querystring、讀取結果、顯示。不過這有點殺雞用牛刀了,我們只要另外寫一個文件:

//weekname.phtml
<?
     $weekname = array("星期天","星期一","星期二","星期三","星期四","星期五","星期六");
?>

需要用到的地方:

<?
  include "weekname.phtml";
  echo "今天是".$weekname[date("w")];
?>

5、時間與空間的取舍

這裏指的是,在規劃數據庫的Tables結構時,應該考慮:如果多用一個字段或者多用一個Table來放數據,對存儲空間、程序的復雜度等,有什麽影響?

例如:一個很簡單的通訊薄,假如需要存3個東西:姓名、電話、服務單位,最簡單的方式用一個Table解決。

姓名 電話 服務單位
王小君 010-22334455 微軟
陳大炮 010-3344567 藥店
許中堅 010-7654321 酒廠

也可以用兩個Tables解決,如下面兩個表:

編號 服務單位
1 微軟
2 藥店
姓名 電話 單位編號
王小君 01-22334455 1
陳大炮 09-3344567 2
許中堅 03-7654321 2

可以看到,用兩個Tables,在數據量大(例如1萬條)而且重復的多(例如藥店有5000條,微軟有3000條,呵呵呵!),在硬盤空間的使用上會比較節省。反過來看,數據量小,每條之間差異又大,這樣就沒有必要多花那些腦筋,直接以空間換取時間即可。

類似的情況相當重要:請記得Web是一個開放的空間,訪客隨時由四面八方湧來,如果每個人次都需要做很復雜的運算,產生相同的結果,就應該考慮,怎樣利用硬盤空間,簡化每次的來訪訪客人數越多,這個原則越重要


註:轉載請註明出處

【前端閱讀】——《活用PHP、MySQL建構Web世界》摘記之設計技巧