代码点火器:控制器或视图中的这个导航逻辑?

时间:2011-05-05 22:57:41

标签: codeigniter navigation

我有一个名为'sub_nav'的视图,它目前拥有每个部分的链接的多维数组。此视图查看控制器名称以获取当前部分,然后循环通过相应的数组并输出链接。

这是有效的,但感觉就像我应该为导航创建一个控制器?并使sub_nav更简单,但只输出....?有人可以建议吗?

$controllerName = $this->router->class; 
$methodName = $this->router->method; 

$subLinks['about'] = array( 
                        'introduction'  => 'Introduction',
                        'people'        => 'Our People'
                    );

$subLinks['contact'] = array(   
                        'singapore'     => 'Singapore', 
                        'japan'         => 'Japan'
                    );

?>

<ul>
    <?php foreach($subLinks[$controllerName] as $link=>$linkName){ ?>

    <li <?php if($methodName == $link){ ?>class="on"<? } ?>><a href="<?php   echo base_url(); ?><?php echo $controllerName ?>/<?php echo $link ?>/"><?php echo   $linkName ?></a></li>

    <? } ?>
</ul>

`

2 个答案:

答案 0 :(得分:1)

如果内容是静态数组,我会把它放在:

  • 视图文件。控制器不是唯一可以加载视图的地方,从另一个视图文件(您的模板)中调用$this->load->view()没有任何问题。只需将数组存储在那里。
  • 配置文件。可能听起来很奇怪,但对于像这样的静态数据来说,它是一个完美的地方。这样,您就不必在每次load-&gt; view()调用中不断加载数据。只需在MY_Controller或其他内容中加载配置文件,您就可以在任何地方访问它。然后你可以编写一个导航视图或库,输出你发送给它的任何导航数组(换句话说,不要在这里做任何html - 只是数据,然后用于视图中的配置项)。我说要使用基本控制器,因为对于AJAX请求,可能不需要自动加载这些数据。你并不总是需要它。

它绝对不属于Controller,后者更多地用于处理请求和数据。图书馆更有可能成为候选人。如果内容是动态的(例如从数据库中),那么你肯定想要使用模型或库,但在这种情况下我更喜欢视图文件。除了您的观点之外,您不太可能在其他任何地方使用导航阵列数据。

在任何情况下,HTML都尽可能属于视图。如果您只在视图中使用导航阵列,只在一个视图中使用,并且它不是动态的,只需将其存储在视图文件中即可。模型和库应该是可重用的,在那里存储静态数据(你可能需要经常更新)对我来说没有意义,但我愿意倾听对手。

答案 1 :(得分:0)

根据导航数据的来源,我可能会给它一个自己的模型(例如,它来自数据库)。至于选择要显示的导航的逻辑,我会将该逻辑放在一个公共基本控制器中,要么在所有页面加载上运行它,要么将代码放在基本控制器上的方法中,所以那些需要它的页面可以使用它

如果您的控制器使用类似$ this-&gt;的数据来保存要发送到视图的数据,那么基本控制器逻辑也可以将导航数据传递给视图。