三月 5th, 2010

DIY一個PHP留言板之資料存取(二)

46 views, 網站專案, by 蒼時弦也.

昨天經過思考後,決定將「資料讀取」的方式改變。
雖然還未成熟,不過已經比起原定的方式更加完整。
今天就來實作資料讀取與版面的呈現(模型)

首先先看一下新版本的資料檔案(data.txt):

;title
測試留言標題
;nickname
蒼時 弦
;contents
這是測試留言,
主要是對資料解析做測試
;responds
奏>>回復了留言!
影賜>>回復留言~

接著是新的讀取程式 data.php

<?php

function setdata($content, array $eArrs){
	$datas = explode(PHP_EOL, $content);
	foreach($datas as $key => $line){
		if($line[0] == ';'){
			++$dKey;
			if(in_array($line, $eArrs))
				$enableArr = (bool) true;
			else
				$enableArr = (bool) false;
			continue;
		}
		if($enableArr)
			$dataGroup[$dKey][] = $line;
		else
			$dataGroup[$dKey] .= $line;
	}

	return $dataGroup;
}

$eArrs = array(';contents', ';responds');
$content = file_get_contents('data.txt');

$data = setdata($content, $eArrs);

print_r($data);

?>

輸出結果是一組依照順序的陣列,如果是「同一組,則再建立新陣列儲存。」

以上就是初步完成資料讀取了!

接下來就是呈現留言以及排序的處理。

現在新增一個 comments.php 來製作模型。

<?php

function getComment($file, array $eArrs){ //建立 getComment 函式
	$data = file_get_contents($file); //讀取檔案內容
	$data = explode(PHP_EOL, $data); //以斷行分割檔案內容( PHP_EOL 會依照作業系統切換 \n 或 \r\n )

	foreach($data as $key => $line){ //將內容陣列放入 foreach 運作
		if($line[0] == ';'){ //檢查是否為註解
			++$dKey; //如果是則 +1
			if(in_array($line, $eArrs)) //檢查是否產生陣列(兩行以上資料需要)
				$enableArr = (bool) true; //傳回真
			else
				$enableArr = (bool) false; //傳回假
			continue; //直接結束本次迴圈
		}
		if($enableArr) //檢查是否開啟產生陣列
			$dataGroup[$dKey][] = $line; //如為真,則產生陣列儲存(二維)
		else
			$dataGroup[$dKey] .= $line; //如為假,則直接儲存資料(並且連接起來)
	}

	return $dataGroup; //傳回解析後陣列
}

$glob = glob('./data/*.txt'); //搜尋資料檔案
sort($glob, SORT_NUMERIC); //排序檔案( 由大到小 )

$eArr = array(';contents', ';responds'); //指定需要產生二維鎮列的註解

$_GET['page'] = !$_GET['page'] ? 1 : $_GET['page'];  //檢查是否有指定頁碼
$start = ($_GET['page'] - 1) * 2; //設定迴圈開始編號
$end = $_GET['page'] * 2; //設定回圈結束編號

for($i = $start; $i < $end; ++$i){ //從開始編號運作到結束編號。
	if(empty($glob[$i])) break; //檢查是否有此筆資料,無則跳出
	$comments = getComment($glob[$i], $eArr); //呼叫 getComment 函式分析檔案
	$contents = implode('', $comments[3]); //將內容部份特別分析,用結合
	/* 開始產生畫面 */
	echo "
主題:{$comments[1]}暱稱:{$comments[2]}內容:{$contents}
"; } ?>

之後請新增一個 /data 資料夾,並且新增大於二的「檔案」
檔名: 1.txt ~ ?.txt (一律數字)
檔案內容:

;title
留言標題
;nickname
留言者暱稱
;contents
留言內容,
可以換行輸入,並不會影響。

接著打開 comments.php 會發現檔名最大的兩篇被顯示,其餘的並沒有顯示。
原因在哪裡呢?

http://網址/?page=2

輸入之後,會發現 (檔名最大-2) 和 (檔名最大-3) 的檔案被顯示出來。
沒錯,這次讀取資料時,順便將分頁功能加入了系統。

明天將會繼續改善讀取功能,並且加入「發表留言」的模型。

相關文章

Back Top


Blog Widget by LinkWithin