template_dir = "./templates"; $smarty->compile_dir = "./templates_c"; //初始化 xajax 物件 $xajax = new xajax(); //註冊顯示照片列表的 showPage() 回應函式 $pgObj = $xajax->registerFunction('showPage'); $pgObj->useSingleQuote(); //註冊顯示照片的 showPhoto() 回應函式 $phtObj = $xajax->registerFunction('showPhoto'); $phtObj->useSingleQuote(); //如果 SESSION 的 admin 與 adminUser 變數尚未建立, 則初始化之 if ( ! isset($_SESSION['admin']) ) { $_SESSION['admin'] = FALSE; $_SESSION['adminUser'] = ''; } //如果 SESSION 的 $currentPage 變數尚未建立, 則初始化之 if ( ! isset($_SESSION['currentPage']) || ! is_numeric($_SESSION['currentPage']) ) { //若不是數字 $_SESSION['currentPage'] = 1; } //取得照片列表時每一頁要顯示的照片數量 //$listRows 是每頁的列數, $perRow 代表每列的照片個數 $perPage=$listRows * $perRow; //取得照片的總數 if (! isset($_SESSION['totalRows']) || empty($_SESSION['totalRows']) ){ $result=mysql_query("SELECT `id` FROM $tbPhoto"); $_SESSION['totalRows']=mysql_numRows($result); } //處理 xajax 回應 $xajax->processRequest(); //將 xajax 輸出的 JavaScript 程式指定給 xajaxJS 樣版變數 $smarty->assign("xajaxJS",$xajax->getJavascript('..')); //使用自訂的 getPhotoList() 函式取得目前頁面的照片列表, //然後指定給 maintext 樣版變數 $smarty->assign('maintext',getPhotoList($_SESSION['currentPage'])); $smarty->display('main.tpl'); //---------------------- 自定函式取得子樣版的內容 ------------------- //getPhotoList() 函式用來產生特定頁面的照片列表 function getPhotoList($pageID=1){ //預設為第 1 頁 //$dirPhoto, $dirThumb 分別是照片與縮圖目錄;$perRow, $perPage 則 //分別是每列、每頁要顯示的照片數;$tbPhoto 是資料表的名稱;$smarty //則是前面主程式建立的 Smarty 物件 global $dirPhoto, $dirThumb, $perRow, $perPage, $tbPhoto, $smarty; //因為另有切換分頁的功能也使用此函式, 所以要將指定顯示的頁碼設定給 //代表目前頁面的 $currentPage 變數 $_SESSION['currentPage']=$pageID; //$perRow 代表照片列表時每列的照片個數 $smarty->assign('perRow',$perRow); //稍後的 SQL 敘述中會使用 $pageID 的值, 所以 //使用 mysql_real_escape_string() 過濾不合法的字元 $pageID=mysql_real_escape_string($pageID); $rangeStart=( $pageID - 1) * $perPage; //查詢資料表, 取得目前頁碼範圍內的資料 $sql="SELECT * FROM $tbPhoto ORDER BY `id` LIMIT $rangeStart, $perPage"; $result=mysql_query($sql); //逐筆讀出目前頁碼範圍內各照片的資料, 放入 $all 二維陣列 while ($row = mysql_fetch_array($result)) { //將照片名稱中的特殊字元轉成 HTML 碼 $name=htmlspecialchars($row['name'], ENT_QUOTES); //將此照片的 id, 名稱, 與縮圖路徑等資料加入 $all 陣列 $all[] = array('id'=>$row['id'], 'name'=>$name, 'imgsrc'=>$dirThumb.$row['filename'] ); } //將 $all 陣列指定給樣版變數 $all, 讓樣版顯示目前頁碼的分頁內容 $smarty->assign('all',$all); //設定分頁參數 $params = array( 'mode' => 'Sliding', 'perPage' => $perPage, 'totalItems' => $_SESSION['totalRows'] ); //建立分頁 $pager = Pager::factory($params); //取得分頁連結 $links = $pager->getLinks($pageID); //將分頁連結轉換為呼叫 xajax 函式 $links['all'] = ereg_replace('href=[^\?]*\?pageID=', 'href="#" onclick="xajax_showPage(', $links['all']); $links['all'] = str_replace('" title', '); return false;" title', $links['all'] ); //將分頁連結指定給樣版變數 $pageLinks $smarty->assign('pageLinks',$links['all']); //取得 photolist.tpl 子樣版的 HTML 原始碼 $html=$smarty->fetch('photolist.tpl'); //回傳子樣版的內容 return $html; } //getPhotoShow() 函式用來顯示特定照片 function getPhotoShow($id=1) { global $dirPhoto, $dirThumb, $tbPhoto, $smarty; //稍後的 SQL 敘述中會使用 $id 的值, 所以 //使用 mysql_real_escape_string() 過濾不合法的字元 $id=mysql_real_escape_string($id); //查詢資料表, 取得 id 指定照片的所有資料 $sql="SELECT * FROM $tbPhoto WHERE `id` = $id"; $result=mysql_query($sql); $row = mysql_fetch_array($result); //將照片名稱與註解說明中的特殊字元轉成 HTML 碼, 詳見 5-5 節 $row['name']=htmlspecialchars($row['name'], ENT_QUOTES); $row['comment']=htmlspecialchars($row['comment'], ENT_QUOTES); $row['comment']=str_replace(' ', '  ', //處理空白與 nl2br($row['comment']) ); //換行字元 //將照片的路徑放入 $row 陣列 $row['imgsrc']=$dirPhoto.$row['filename']; //將前後張照片的 id 放入 $row 陣列 $row['previd']=$id-1; $row['nextid']=$id+1; //將 $row 陣列指定給樣版變數 $photo, 讓樣版顯示照片 $smarty->assign('photo',$row); //取得前後兩張的照片資料, 以便在照片的下方顯示預覽縮圖 $rangeStart = $id - 3; if ( $rangeStart < 0 ) $rangeStart=0; $sql="SELECT `id`, `name`, `filename` FROM $tbPhoto LIMIT $rangeStart, 5"; $result=mysql_query($sql); //逐筆讀出各照片的資料, 放入 $thumb 二維陣列 while ($row = mysql_fetch_array($result)) { $row['imgsrc']=$dirThumb.$row['filename']; $thumb[]=$row; } $smarty->assign('thumb',$thumb); //取得 photoshow.tpl 子樣版的 HTML 原始碼 $html=$smarty->fetch('photoshow.tpl'); //回傳子樣版的內容 return $html; } //---------------------- 自定 xajax 函式處理 AJAX 要求 -------------- //showPage() 函式是 xajax 用來處理特定頁面照片列表的顯示要求 function showPage($pageID=1) { //呼叫 getPhotoList() 函式取得特定頁面照片列表的 HTML 原始碼 $html=getPhotoList($pageID); $objResponse = new xajaxResponse(); $objResponse->assign('maintext', 'innerHTML', $html); return $objResponse; } //showPhoto() 函式是 xajax 用來處理特定照片的顯示要求 function showPhoto($id=1) { //呼叫 getPhotoShow() 函式取得顯示特定照片的 HTML 原始碼 $html=getPhotoShow($id); $objResponse = new xajaxResponse(); $objResponse->assign('maintext', 'innerHTML', $html); return $objResponse; } ?>