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;
}
?>