CodeIgniter视图中应该有多少代码?

时间:2011-01-15 09:37:42

标签: php codeigniter

完成第一步,编写一些页面。在查看结果后我得到了一个问题......模板中应该有多少代码(View)?

例如,这是一个模板文件:

<?php $this->load->view('header'); ?>
<?php $this->load->view('banner'); ?>   

<div id="items">
<?php
for($i=0; $i<count($main); $i++) {
    echo '<div class="item">
        <div class="name">'.$main[$i]['name'].'</div>';
    if($main[$i]['icq']=='') { }
        else { echo '<div class="phone">'.$main[$i]['phone'].'</div>'; }
    echo '</div>';
}
?>
</div>

<?php $this->load->view('footer'); ?>

您认为此模板中的代码太多或者这是正常的吗?

7 个答案:

答案 0 :(得分:16)

答案 1 :(得分:9)

我不认为你在视图中想要实现的是太多逻辑,但我认为应该稍微清理一下。

类似的东西:

<?php foreach($main as $item): ?>
<div class="item">
    <div class="name"><?php echo $item['name']; ?></div>
    <?php if($item['icq']): ?>
        <div class="phone"><?php echo $item['phone']; ?></div>
    <?php endif; ?>
</div>
<?php endforeach; ?>

我发现它更易于阅读,并且它可以完成同样的工作。我也不认为非编码人员很难修改,这最终是观点的目标。

答案 2 :(得分:2)

当模板需要大量逻辑时,引入ViewModel pattern

会很有用

确定何时显示某个块的逻辑放在视图模型中。

示例
模板片段:

<?php if($item['show_phone_number']): ?>
    <div class="phone"><?php echo $item['phone_number']; ?></div>
<?php endif; ?>

视图模型代码段:

$item['show_phone_number'] = $item["icq"] == '';

答案 3 :(得分:1)

简短回答:

尽可能少。

答案 4 :(得分:1)

查看不是模板。

或者至少 - 它不应该是模板。视图通常是类的实例,它负责处理表示逻辑。他们处理多个模板,决定使用哪个模板以及传入哪些数据。

但CI没有这个。你基本上坚持使用一个假装是“View”的模板,以及他们告诉你的ActiveRecord实例是“模型”。地狱..在适当的MVC中,模型甚至不是特定的类,而是应用层。

从长远来看,这种情况会强制表示逻辑业务逻辑进入控制器,同时产生难以维护的模板和活动记录类。

答案 5 :(得分:0)

我认为作为James,代码太多了,但你可以在get_items()函数中添加一个数组变量来控制每个项目的前缀和后缀,如:

$options = Array('item_prefix' => '<div class="item">', 'item_suffix' => '</div>'...)
echo get_items();

答案 6 :(得分:0)

你的观点肯定应该包含大多数html标签,所以我不认为函数get_items应该放在其他地方。只需稍微清理一下模板,然后按照Karpie的建议使用替代循环语法。你也可以考虑使用一些现有的模板引擎,比如Twig,但是视图必须包含对你数据的一些引用...... 您想要实现的是非编码人员可以编辑您的html文件,而无需了解太多的脚本逻辑。