我现在才开始玩CI和MVC开发模型,所以我遇到了一些问题。
我有一个db表来动态生成网站上的菜单
表“菜单”如下所示:
id :int
display_name :varchar(50)
parent_id :int
链接:varchar(150)
我使用CI和Twitter bootstrap CSS框架从DB中创建菜单。
所以我的查询模型从表中获取所有对象。控制器将生成的数组传递给view,其中包含以下伪代码:
if (parent == 0){
echo '<li><a href="$menu_item['link'].'">'.$menu_item['display_name'].'</a></li>';
}
这一切都适用于主菜单。
但是我想要实现的是:
如果带有id的记录,让我们说“2”,有子项(带有parent_id = 2的记录存在id表)生成下拉元素,应用css类 下拉列表 到li元素,然后在该li元素中显示查询结果WHERE parent_id = 2
我希望你明白我所追求的是什么。我显然不是一个老师向人们解释事情:)
class MainMenu_model extends CI_Model {
public function __construct()
{
$this->load->database();
}
public function get_menuitems($parent)
{
$query = $this->db->get_where('tbl_menus', array('parent_id' => $parent));
return $query->result_array();
}
public function get_submenuitems($parent)
{
$query = $this->db->get_where('tbl_menus', array('parent_id' => $parent));
return $query->result_array();
}
}
控制器:(我知道控制器不应该生成html,但这仅用于测试)
class MainMenu extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->model('MainMenu_model');
}
public function index()
{
$data['parent'] = $this->MainMenu_model->get_menuitems(0);
foreach ($data['parent'] as $items){
echo $items['display_name'].'(';
$data['child'] = $this->MainMenu_model->get_menuitems($items['id']);
foreach ($data['child'] as $offspring){
echo $offspring['display_name'].',';
}
echo ');';
}
$this->load->view('templates/header');
$this->load->view('mainmenu/index', $data);
$this->load->view('templates/footer');
}
}
控制器回应层次结构应该如何 - 括号中的项目和子项(如果有的话)。当我在视图页面中执行 print_r($ parent)时,我得到主要项目,但 print_r($ child)什么都没带。