譯者注本文原名《Site Navigation with PHP》原文詳述了如何用PHP編程來做出效果理想的網頁導航條本文只選譯了其中的部分文章所選取的部分是文章精髓之所在只要大家能弄懂這部分內容就可以用同樣的原理思想做出我們需要的效果來希望給讀者能起到拋磚引玉的作用本文只需要讀者具備PHPHTML的初步知識就可以基本讀懂了
譯 文如大家所知PHP對於用數據庫驅動的網站(making databasedriven sites)來講可謂功能強大可是我們是否可以用它來做點其他事情呢?PHP給了我們所有我們期望的工具for與while的循環結構數學運算等等還可以通過兩種方式來引用文件直接引用或向服務器提出申請其實何止這些讓我們來看一個如何用它來做導航條的例子完整的原代碼<!—— This <? is how you indicate the start of a block of PHP code ——> <?php # and this # makes this a PHP comment
$full_path = getenv(REQUEST_URI)
$root = dirname($full_path)$page_file = basename($full_path)$page_num = substr($page_file strrpos($page_file _) + strpos($page_file l) (strrpos($page_file _) + ))
$partial_path = substr($page_file strrpos($page_file _))
$prev_page_file = $partial_path _ (string)($page_num) l$next_page_file = $partial_path _ (string)($page_num+) l
$prev_exists = file_exists($prev_page_file)$next_exists = file_exists($next_page_file)
if ($prev_exists)
{ print <a $root/$prev_page_file>previous</a>if ($next_exists)
{ print | } if ($next_exists)
{ print <a $root/$next_page_file>next</a>}
?>//原程序完
代碼分析OK! 前面做了足夠的鋪墊工作現在讓我們來看看如何來用PHP來完成這項工作
<!—— This <? is how you indicate the start of a block of PHP code ——> <?php # and this # makes this a PHP comment
$full_path = getenv(REQUEST_URI)
$root = dirname($full_path)$page_file = basename($full_path)
/* PHP函數getenv()用來取得環境變量的值REQUEST_URI的值是緊跟在主機名後的部分URL假如URL是 那它的值就為/dinner/l 現在我們將得到的那部分URL放在變量$full_path中再用dirname()函數來從URL中抓取文件目錄用basename()函數取得文件名用上面的例子來講dirname()返回值/dinner/basename()返回l接下來的部分相對有些技巧假如我們的文件名以story_x的格式命名其中x代表頁碼我們需要從中將我們使用的頁碼抽出來當然文件名不一定只有一位數字的模式或只有一個下劃線它可以是l同樣它還可以叫做l甚至是l而我們真正想要的就是位於最後一個_和html之間的東東可采用如下方法*/ $page_num = substr($page_file strrpos($page_file _) + strpos($page_file l) (strrpos($page_file _) + ))/* substr($string $start[$length] )函數給了我們字符串$string中從$start開始長為$length或到末尾的字串(方括號中的參數是可選項如果省略$lengthsubstr就會返回給我們從$start開始直到字符串末尾的字符串)正如每一個優秀的C程序員告訴你的那樣代表字符串開始的位置開始的數字是而不是
函數strrpos($string $what)告訴我們字符串$what在變量$string中最後一次出現的位置我們可以通過它找出文件名中最後一個下劃線的位置在哪同理接著的strpos($string $what)告訴我們html首次出現的位置我們通過運用這三個函數取得在最後一個_和html之間的數字(代碼中的strpos()+代表越過_自己)
剩下的部分很簡單首先為上頁和下頁構造文件名*/ $partial_path = substr($page_file strrpos($page_file _))
$prev_page_file = $partial_path _ (string)($page_num) l$next_page_file = $partial_path _ (string)($page_num+) l
/*(string)($page_num+)將數學運算$page_num+的結果轉化為字符串類型這樣就可以用來與其他字串最終連接成為我們需要的文件名
*/ /*現在檢查文件是否存在(這段代碼假設所有的文件都位於同樣的目錄下)並最終給出構成頁面導航欄的HTML代碼
*/ $prev_exists = file_exists($prev_page_file)$next_exists = file_exists($next_page_file)
if ($prev_exists)
{ print <a $root/$prev_page_file>previous</a>if ($next_exists)
{ print | } if ($next_exists)
{ print <a $root/$next_page_file>next</a>}
?>
From:http://tw.wingwit.com/Article/program/PHP/201311/20771.html