Cách viết cũng rất đơn giản thôi: sử dụng một function gọi lại chính nó.
vi dụ đơn giản chỉ với 100 lần gọi lại như sau:
function category($x="0",$text="--"){
for($x=1;$x<=100;$x++) // sau mỗi lần lặp lại nâng biến $x lên một giá trị
{
echo $x.$text."<br>";
category($x,$text."--"); // function category được gọi lại
}
}
Bây giờ ta ứng dụng đệ qui để làm một category như sau:
Các bạn tạo các file sau:
Run table sql sau:
CODE
CREATE TABLE `multi_category` (
`category_id` smallint(5) unsigned NOT NULL auto_increment,
`parent_id` smallint(5) unsigned NOT NULL default '0',
`name` varchar(100) NOT NULL default '',
`link` varchar(100) NOT NULL default '',
`date` date NOT NULL default '0000-00-00',
PRIMARY KEY (`category_id`)
) TYPE=MyISAM AUTO_INCREMENT=66 ;
Tạo một file config.php
PHP Code
<?
$dbhost="localhost";
$dbname="multi_category";
$dbuser="root";
$dbpass="";
$table="multi_category";
$date=date("YmdHis");
$db=mysql_connect("$dbhost","$dbuser","$dbpass") or die("Die connect: ".mysql_error());
mysql_select_db("$dbname") or die("Die select database: ".mysql_error());
?>
Tạo một file index.php
PHP Code
<?
include "config.php";
?>
<html>
<head>
<title>Multi Category</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<LINK href='style.css' type='text/css' rel=stylesheet>
<script language="Javascript" src="vietuni.js"></script>
</head>
<body>
<?include "add_category.php";?>
</body>
</html>
tiếp theo tạo file add_category.php
PHP Code
<?php
function show_categories($parent_id="0", $insert_text="--")
{
global $db;
if (! $categories = mysql_query("SELECT * FROM multi_category WHERE parent_id=".$parent_id." ORDER BY parent_id", $db))
{
die ("cannot query");
}
while ($category=mysql_fetch_array($categories, MYSQL_ASSOC))
{
echo("<option value='".$category["category_id"]."'>".$insert_text.$category["name"]."</option>");
show_categories($category["category_id"],$insert_text."--");
}
return true;
}
function selectCtrl ($name, $class)
{
global $db;
print "<SELECT name='". $name. "' class='". $class. "'>\n";
print "<option value='0'>Main category</option>";
show_categories();
print "</SELECT>";
}
?>
<?
echo "<form name='add_category' method='post' action='add_category_action.php'>
<table width='50%' align='center'>
<tr>
<td colspan='2'><div align='center'><strong>Multi category </strong></div></td>
</tr>
<tr>
<td>Lang type: </td>
<td>
<span>
<input type=radio name='switcher' value='OFF' checked onfocus='setTypingMode(0)'>Off
<input type=radio name='switcher' value='TELEX' onfocus='setTypingMode(1)'>Telex
<input type=radio name='switcher' value='vnVni' onfocus='setTypingMode(2)'>VNI
<input type=radio name='switcher' value='vnVni' onfocus='setTypingMode(3)'>VIQR
</span>
</td>
</tr>
<tr>
<td width='36%'>Name:</td>
<td width='64%'>
<input name='name' type='text' size='35' maxlength='100' class='forFormDim' onkeyup='telexingVietUC(this,event);'></td>
</tr>
<tr>
<td>Add link to name: </td>
<td><input name='link' type='text' size='35' maxlength='100' class='forFormDim'></td>
</tr>
<tr>
<td> Parent Category:</td>
<td>";
selectCtrl('parent', 'forFormDim');
print"</td>
</tr>";
echo "<tr>
<td> </td>
<td><input name='Submit' type='submit' class='forFormButton' value='Add category'></td>
</tr>
</table>
</form>";
?>
Tạo file add_category_action.php
PHP Code
<?
include "config.php";
$name = $HTTP_POST_VARS['name'];
$parent = $HTTP_POST_VARS['parent'];
$link = $HTTP_POST_VARS['link'];
$date = date ("d-m-Y");//$HTTP_POST_VARS['date'];
$query="insert into $table (name, parent_id, link, date) values ('$name', '$parent', '$link', '$date')";
$result= mysql_query($query) or die("Die query: ".mysql_error());
//$n= mysql_fetch_array($result);
header("Location: index.php");
?>
Sau khi tạo đủ các file trên bạn có thể test thử và xem code dể hiểu thôi.
Các bạn để ý file add_category.php function đệ qui được viết trong đó, ở đây chúng ta chỉ cần sử dụng 1 table sql với 2 field đủ để thể hiện multi category, có thể dùng cái này cho forum hoặc menu nhiều cấp..vv...