我有一个显示项目字段视图的页面。这是我想要完成的:如果表数据为空(例如,没有在表单中输入City的数据),那么我想要隐藏字段和字段名称/标签。如下所示:
因此,不应出现注释,城市和分支字段。我怎么能做到这一点?
这是我的浏览页面代码:
<div class="projects view">
<h2><?php echo __('Project'); ?>: <small><?php echo h($project['Project']['title']); ?></small></h2>
<div class="well">
<dl>
<dt><?php echo __('Name'); ?></dt>
<dd>
<?php echo h($project['Project']['title']); ?>
</dd>
<dt><?php echo __('Url'); ?></dt>
<dd>
<?php echo h($project['Project']['slug']); ?>
</dd>
<dt><?php echo __('Notes'); ?></dt>
<dd>
<?php echo h($project['Project']['description']); ?>
</dd>
<dt><?php echo __('Branch'); ?></dt>
<dd>
<?php echo h($project['Project']['test']); ?>
</dd>
<dt><?php echo __('Type of Work'); ?></dt>
<dd>
<?php echo h($project['Project']['type']); ?>
</dd>
<dt><?php echo __('Street Address'); ?></dt>
<dd>
<?php echo h($project['Project']['street_address']); ?>
</dd>
<dt><?php echo __('City'); ?></dt>
<dd>
<?php echo h($project['Project']['city']); ?>
</dd>
<dt><?php echo __('State'); ?></dt>
<dd>
<?php echo h($project['Project']['state']); ?>
</dd>
<dt><?php echo __('Supervisor'); ?></dt>
<dd>
<?php echo h($project['Project']['supervisor']); ?>
</dd>
<dt><?php echo __('Supervisor Phone'); ?></dt>
<dd>
<?php echo h($project['Project']['supervisor_phone']); ?>
</dd>
<dt><?php echo __('# of Workers Needed'); ?></dt>
<dd>
<?php echo h($project['Project']['workers']); ?>
</dd>
<dt><?php echo __('Hotel Name'); ?></dt>
<dd>
<?php echo h($project['Project']['hotel_name']); ?>
</dd>
<dt><?php echo __('Hotel Address'); ?></dt>
<dd>
<?php echo h($project['Project']['hotel_address']); ?>
</dd>
<dt><?php echo __('Hotel City'); ?></dt>
<dd>
<?php echo h($project['Project']['hotel_city']); ?>
</dd>
<dt><?php echo __('Hotel State'); ?></dt>
<dd>
<?php echo h($project['Project']['hotel_state']); ?>
</dd>
<dt><?php echo __('Hotel Phone'); ?></dt>
<dd>
<?php echo h($project['Project']['hotel_number']); ?>
</dd>
<dt><?php echo __('Total # of Rooms'); ?></dt>
<dd>
<?php echo h($project['Project']['room_number']); ?>
</dd>
<dt><?php echo __('Hotel Notes'); ?></dt>
<dd>
<?php echo h($project['Project']['hotel_notes']); ?>
</dd>
<dt><?php echo __('PPE'); ?></dt>
<dd>
<?php echo h($project['Project']['ppe']); ?>
</dd>
<dt><?php echo __('Phases'); ?></dt>
<dd>
<?php echo h($project['Project']['phase_count']); ?>
</dd>
<dt><?php echo __('% Completed'); ?></dt>
<dd>
<?php echo h($project['Project']['percent_completed']); ?>%
</dd>
<dt><?php echo __('Start Date'); ?></dt>
<dd>
<?php echo $this->Layout->displayProjectDates($project['Project']['date_start']); ?>
</dd>
<dt><?php echo __('End Date'); ?></dt>
<dd>
<?php echo $this->Layout->displayProjectDates($project['Project']['date_end']); ?>
</dd>
<dt><?php echo __('Project Duration'); ?></dt>
<dd>
<?php echo $this->Time->dateDiffDays($project['Project']['date_start'], $project['Project']['date_end']); ?>
</dd>
<dt><?php echo __('Archived'); ?></dt>
<dd>
<?php echo $this->Layout->boolYesNo($project['Project']['archived']); ?>
</dd>
<dt><?php echo __('Created'); ?></dt>
<dd>
<?php echo $this->Layout->displayTimeDefault($project['Project']['created']); ?>
</dd>
<dt><?php echo __('Modified'); ?></dt>
<dd>
<?php echo $this->Layout->displayTimeDefault($project['Project']['modified']); ?>
</dd>
</dl>
</div>
现在我假设代码看起来像这样?:
<?php if (!empty($project['Project']['city'])) { } ?>
我还在学习PHP而且经验不足,所以任何帮助都会非常感激!如果您需要查看我的控制器以获得更好的主意,请告诉我。
谢谢!
答案 0 :(得分:1)
我经常检查它是否为NULL而不是空。但逻辑是你检查城市的价值。所以,如果它是NULL,你就可以跳过它。只需修剪数据以确保它真的是空的,因为它们之间可能存在空间,你不会知道为什么它仍在打印它。
希望你正在使用“foreach”循环吗?因为如果你不是,你需要更多的逻辑编码。
答案 1 :(得分:1)
虽然您的!empty()
方法是正确的解决方案,但您可以考虑自动执行此过程。考虑到所有字段都在一个数组中,你可以“遍历”数组,只有在值不为空时才输出一行。
在PHP中使用empty()
时要小心,因为PHP会将任何“假”值视为“空”(例如null
,0
,''
,{ {1}})将被视为空,因此“零”将不输出。要防止这种情况,请对空字符串进行“严格”比较。您可能还需要检查false
值和检查null
是否为'标量'值,而不是(例如)数组(如果模型可以使用)与其他模特有联系)
通过使用数组,您不必重复检查每个字段,甚至视图可以重复用于您网站中的各种操作
实施例
value
请注意,您必须为.po文件中的字段名称添加正确的“翻译”(例如,阅读有关本地化的章节;
应用程序/地点/主机/ LC_MESSAGES / default.po
foreach($project['Project'] as $name => $value) {
if('' === trim($value) {
// skip empty values
continue;
}
?>
<dt><?php echo __($name); ?></dt>
<dd><?php echo h($value); ?></dd>
<?php
}
答案 2 :(得分:1)
以下是一个适合您的示例:
<?php if (!empty($project['Project']['test'])): ?>
<dt><?php echo __('Branch'); ?></dt>
<dd>
<?php echo h($project['Project']['test']); ?>
</dd>
<?php endif; ?>