xoops模組開發->使用遞回解階層資料表的方法-教學撰寫:徐嘉裕Neil hsu

最近在幫客戶開發模組需要寫一個分類功能,之前都是用while迴圈去解,每解一層分類資料就要加一個while迴圈,然後用陣列輸出,這方法雖然好用簡單,但如果分類層級到4級5級,那不就要while回圈4~5次,整個程式會很龐大而且不易維護,所以想說乾脆用遞回來解算了,寫了一個範例請大家參考看看,程式真的精簡很多了,看了也舒服。

假設要解這樣多階層的資料表


方法如下:

1、先在模組的function.php中增加$xoopsDB ->fetchArray($result)迴圈程式,這樣輸入值就能以陣列方式吧全部資料都打包出來。


//查詢資料表while全部數值

function databasetablewhile($dbneme="",$where=""){
global $xoopsDB;
$sql = "select * from " . $xoopsDB->prefix($dbneme) . " ".$where."";
$result = $xoopsDB -> query($sql);
$i=1;
while($keyword= $xoopsDB ->fetchArray($result)){
$keywordArr[$i]=$keyword;
$i++;
};
return $keywordArr;
}


2、在需要顯示內容的php檔案呼叫databasetablewhile函數並給予值參

$dbneme="neilshopsort";  //資料表名稱
$where="  where `of_sortid` = '0' order by  sortidsort  DESC";  //where數值
$sort=databasetablewhile($dbneme,$where);

3、以下為遞回程式,以遞回方法解出neilshopsort資料表中並按照階層排列

//遞回開始
function retorted($dbneme="",$sortid=""){
$where=" where `of_sortid` = '".$sortid."' order by sortidsort DESC";   //where數值
$sortArr=databasetablewhile($dbneme,$where);
foreach($sortArr as $key=> $val){
$sortvar.=$sortArr[$key]['sorttitle']."<br />";
$sortvar.=retorted($dbneme,$sortid="".$sortArr[$key]['sortid']."");
}
return $sortvar;
}

foreach($sort as $key=> $val){
$sortvar.=$sort[$key]['sorttitle']."<br />";
$sortvar.=retorted($dbneme,$sortid="".$sort[$key]['sortid']."");
$sortvar.="<br />";
}
//輸出結果
echo $sortvar;

實際看一下結果:



的確都有吧資料按照階層排列解出來(4階),一個都沒少,之後再吧解出來數值套入到UI介面的table表格中,這部分就不再詳述,按照範例延伸開發即可。


教學撰寫:徐嘉裕 Neil hsu


留言

這個網誌中的熱門文章

Xoops免費佈景:neilambilight2.5正式版釋出-佈景設計開發:徐嘉裕Neil hsu

在CentOS7上安裝XAMPP並設定允許外部連線phpmyadmin的方法-教學撰寫:徐嘉裕Neil hsu

jquery.datepicker下拉月曆只顯示年-月的設定方法-教學撰寫:徐嘉裕Neil hsu