-1

你好我有一个问题。我正忙着用 CI 创建一个网站,我已经为自己解决了一个问题。您将导航代码放在 CI 中的什么位置?在您始终包含的控制器或 1 个视图中?

4

2 回答 2

1

更新

这是我在这里发布的最后一个回复。

由于您对在控制器中使用导航一无所知,这就是您可以做的。将数据作为数组加载到控制器中。让导航中的每个链接成为该数组的一部分。将数据传递到您的视图(最好是我之前谈到的 template.php 视图),然后通过 foreach 循环运行该数组。

由于您不希望有一个完全独立的导航视图文件,因为您不喜欢只有 5 行代码,因此请将其放入您的模板文件中。所以你的模板应该是这样的:

<head>
    <?php $this->load->view('elements/head'); ?>
</head>
<header>
    <ul>
        <?php foreach($menus as $menu): ?>
            <li><a href='<?php print $menu["url"] ?>'><?php print $menu["title"] ?></a></li>
        <?php endforeach; ?>
    </ul>
</header>
<body>
    <div class="content">
        <?php $this->load->view($content); ?>
    </div>
</body>
<footer>
    <?php $this->load->view('elements/footer'); ?>
</footer>

综上所述,在控制器中实际回显这些数据是违反 MVC 模式的。你可以在控制器中声明你的数据,但你应该在视图中加载它。

此外,这个问题这个问题,甚至更多这个问题都同意单独的导航视图是最好的。


我通常有一个默认的“template.php”视图,它包含在每个页面上。里面的内容是动态加载的。

在这种情况下,我建议将您的导航放在“header.php”视图文件中(假设您的导航位于顶部),然后将其加载到“template.php”视图中。这将分隔代码块,使您以后可以轻松更改导航。您的模板文件应如下所示:

<head>
    <?php $this->load->view('elements/head'); ?>
</head>
<header>
    <?php $this->load->view('elements/header'); ?>
</header>
<body>
    <div class="content">
        <?php $this->load->view($content); ?>
    </div>
</body>
<footer>
    <?php $this->load->view('elements/footer'); ?>
</footer>
于 2013-03-19T15:20:11.023 回答
1

通常我的导航在我的网站顶部,所以我只创建一个带有所有 html、header、meta 标记的 header.php。然后在正文标签之后,我有导航所需的代码。

您可以传递一些变量或仅使用 uri 段来查找当前页面是什么,因此您可以突出显示导航,就像 stackoverflow 上的导航一样,现在突出显示问题部分。

您可以创建一个模板视图,在您的控制器上执行以下操作:

public function index(){
    $data['title'] = 'Site title'
    $data['current_page'] = 'Home'
    //the view you want to load
    $data['view'] = 'home';
    //loads the vars across all views
    $this->load->vars($data);
    //loads the view wich will have our template
    $this->load->view('template');
}

现在我们的视图模板将是这样的,记住你可以根据需要更改布局,如果你喜欢左列或类似的东西

<?php 
$this->load->view('header');
//this is the view we loaded on our controller
$this->load->view($view);
$this->load->view('footer');
?>

例如,我的视图标题有我的导航系统,我使用变量 current_page 突出显示主页的菜单锚点,并使用 title 变量在页面之间具有动态标题

于 2013-03-19T15:28:10.467 回答