完成第一步,编写一些页面。在查看结果后我得到了一个问题......模板中应该有多少代码(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'); ?>
您认为此模板中的代码太多或者这是正常的吗?
答案 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文件,而无需了解太多的脚本逻辑。