Mysql数据库:
CREATE TABLE IF NOT EXISTS `think_category` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`pid` int(11) NOT NULL,
`path` varchar(100) NOT NULL,
`pathname` varchar(200) NOT NULL,
`url` varchar(200) NOT NULL,
`sort` int(11) NOT NULL,
`state` int(2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;
--
-- 转存表中的数据 `think_category`
--
INSERT INTO `think_category` (`id`, `name`, `pid`, `path`, `pathname`, `url`, `sort`, `state`) VALUES
(1, '新闻', 0, '0', '首页', '', 1, 1),
(2, '体育', 0, '0', '首页', '', 2, 1),
(3, '合肥新闻', 1, '0-1', '首页-新闻', '', 1, 1),
(4, '南京新闻', 1, '0-1', '首页-新闻', '', 2, 1),
(5, '网球', 2, '0-2', '首页-体育', '', 1, 1),
(6, '足球', 2, '0-2', '首页-体育', '', 2, 1),
(7, '经济新闻', 3, '0-1-3', '首页-新闻-合肥新闻', '', 4, 1),
(8, '电子新闻', 4, '0-1-4', '首页-新闻-南京新闻', '', 5, 1),
(9, '手机新闻', 4, '0-1-4', '首页-新闻-南京新闻', '', 1, 1),
(10, '水球', 2, '0-2', '首页-体育', '', 3, 1),
(11, '乒乓球', 2, '0-2', '首页-体育', 'http://www.hfnx.com', 3, 1),
(12, '足球明星', 6, '0-2-6', '首页-体育-足球', '', 2, 1),
(13, '足球赛事', 6, '0-2-6', '首页-体育-足球', '', 20, 1);Html代码:<form method="post" action="__URL__/update">
名称:<input type="text" name="name" value="{$listone.name}" /><br />
分类:<select name="pid">
<option value="{$listone.pid}" selected="selected">不改变类别</option>
<option value="0">根目录</option>
<volist name="list" id="vo">
<option value="{$vo.id}">
<php>
echo str_repeat(' ',$vo[count]);
</php>
{$vo.name}
</option>
</volist>
</select><br />
链接:<input type="text" name="url" value="{$listone.url}" /><br />
排序:<input type="text" name="sort" value="{$listone.sort}" /><br />
<input type="hidden" name="id" value="{$listone.id}" />
<input type="hidden" name="oldpid" value="{$listone.pid}" />
<input type="hidden" name="oldpath" value="{$listone.path}" />
<input type="hidden" name="oldname" value="{$listone.name}" />
<input type="hidden" name="oldpathname" value="{$listone.pathname}" />
<input type="submit" value="提交" />
</form>IndexAction代码 public function edittype($id=0){
$list = $this->cateall();
$this->assign("list",$list);
$cate = M('Category');
$listone = $cate->where('id='.$_GET['id'])->find();
$this->assign("listone",$listone);
$this->display();
}
public function update($id=0){
$Type = D('Category');
$path = $_POST['oldpath'].'-'.$_POST['id'];//下属path
$pathname = $_POST['oldpathname'].'-'.$_POST['oldname'];//下属pathname
$list = $Type->query("select * from think_category where concat(path,'-',id) like '$path-%'" );//找到旧下属
if($Type->create()){
$result = $Type->save();
if($result){
if(($_POST['pid'] <> $_POST['oldpid']) or ($_POST['name'] <> $_POST['oldname'])){
$listnewone = $Type->where('id='.$_POST['id'])->find();//获得父级更新后数据
foreach($list as $key => $value){
$data['path'] = str_replace($path,$listnewone['path'].'-'.$listnewone['id'],$list[$key]['path']);//替换path
$data['pathname'] = str_replace($pathname,$listnewone['pathname'].'-'.$_POST['name'],$list[$key]['pathname']);//替换pathname
$data['id'] = $list[$key]['id'];
$Type->save($data);
}
}
$this->success('修改成功','__URL__/');
}else{
$this->error('修改失败');
}
}else{
$this->error($Type->getError());
}
}
protected function cateall(){
$Type = M('Category');
$list = $Type->field("*,concat(path,'-',id) AS bpath")->order('bpath')->select();
foreach($list as $key => $value){
$list[$key]['count'] = count(explode("-",$value['bpath']));
}
return $list;
} 最佳答案