用php實現下面的功能,方法:數據庫表的合理設計+遞歸
1.業務邏輯
(1)表結構
分類表
字段:cat_id、cat_name、cat_desc、、、parent_id(ps:每個分類的上一級分類)
(2)商品分類功能具體分析
分類控制器:CategoryController.class.php
分類模型: CategoryModel.class.php
curd(具體增、刪、改、查):
添加分類:1.顯示分類表單 2.接收數據插入數據庫
修改分類表單:1.顯示修改表單 2.接收更新數據插入數據庫
刪除:一步操作,直接刪除
關鍵代碼實現如下:
分類模型
<pre>
<?php
//商品分類模型
class CategoryModel extends Model{
//獲取所有分類
public function getCats(){
$sql="select * from {$this->table}";
$cats=$this->db->getAll($sql);
return $this->tree($cats);
}
//對所有獲取的分類重新排序
function tree($arr,$pid=0,$level=0)
{
static $res=array();
foreach ($arr as $v)
{
if($v['parent_id']==$pid)
{
$v['level']=$level;
$res[]=$v;
$this->tree($arr,$v['cat_id'],$level+1);
}
}
return $res;
}
}
?>
</pre>
分類控制器模型
<pre>
<?php
后臺商品分類管理
class CategoryController extends Controller{
//顯示分類
public function indexAction(){
include CUR_VIEW_PATH.'cat_list.html';
}
//添加分類,1.顯示添加表單 2.接收數據插入到數據庫
public function addAction(){
//獲取所有分類
$CategoryModel=new CategoryModel('category');
$cats=$this->getCats();
include CUR_VIEW_PATH.'cat_add.html';
}
public function insertAction(){
//1.接收數據 ?以什么形式收集
$date['cat_name']=trim($_POST['cat_name']);
$date['parent_id']=$_POST['parent_id'];
$date['unit']=$_POST['unit'];
$date['sort_order']=$_POST['sort_order'];
$date['cat_des']=trim($_POST['cat_des']);
$date['is_show']=$_POST['is_show'];
//2.驗證接收到的數據和處理
if($date['cat_name']===''){
$this->jump('index.php?p=admin&c=category&a=add','分類名稱不能為空');
}
//調用模型插入數據庫并給出提示
$categoryModel=new CategoryModel('category');
if($categoryModel->insert($date)){
$this->jump('index.php?p=admin&c=category&a=index','success');
}else{
$this->jump('index.php?p=admin&c=category&a=add','fail');
}
}
}
?>
</pre>
視圖
<pre>
<tr>
<td class="label">上級分類:</td>
<td>
<select name="parent_id">
<option value="0">頂級分類</option>
<?php foreach ($cats as $cat) :?>
<option value="<?php echo $cat['cat_id'];?>">
<?php echo str_repeat(" ", $cat['level']);?>
<?php echo $cat['cat_name'];?>
</option>
<?php endforeach;?>
</select>
</td>
</tr>
</pre>
積累函數:trim() 去掉空白 str_repeat(' ',n) 重復前面的內容n次
積累快捷鍵:ctrl+shift+D 快速復制一行,ctrl+D 選中相同的,相同東西同時修改
2333第一次用簡書寫東西,代碼框,插圖搞了半天、、、
代碼框:pre
插圖:七牛很好用哦!img標簽引入即可
近期打算,盡快用git,把源碼托管到上面