如果表为空,则从视图中隐藏字段和字段名称

时间:2013-03-15 20:31:09

标签: php cakephp

我有一个显示项目字段视图的页面。这是我想要完成的:如果表数据为空(例如,没有在表单中输入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']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Url'); ?></dt>
        <dd>
            <?php echo h($project['Project']['slug']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Notes'); ?></dt>
        <dd>
            <?php echo h($project['Project']['description']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Branch'); ?></dt>
        <dd>
            <?php echo h($project['Project']['test']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Type of Work'); ?></dt>
        <dd>
            <?php echo h($project['Project']['type']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Street Address'); ?></dt>
        <dd>
            <?php echo h($project['Project']['street_address']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('City'); ?></dt>
        <dd>
            <?php echo h($project['Project']['city']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('State'); ?></dt>
        <dd>
            <?php echo h($project['Project']['state']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Supervisor'); ?></dt>
        <dd>
            <?php echo h($project['Project']['supervisor']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Supervisor Phone'); ?></dt>
        <dd>
            <?php echo h($project['Project']['supervisor_phone']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('# of Workers Needed'); ?></dt>
        <dd>
            <?php echo h($project['Project']['workers']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Hotel Name'); ?></dt>
        <dd>
            <?php echo h($project['Project']['hotel_name']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Hotel Address'); ?></dt>
        <dd>
            <?php echo h($project['Project']['hotel_address']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Hotel City'); ?></dt>
        <dd>
            <?php echo h($project['Project']['hotel_city']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Hotel State'); ?></dt>
        <dd>
            <?php echo h($project['Project']['hotel_state']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Hotel Phone'); ?></dt>
        <dd>
            <?php echo h($project['Project']['hotel_number']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Total # of Rooms'); ?></dt>
        <dd>
            <?php echo h($project['Project']['room_number']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Hotel Notes'); ?></dt>
        <dd>
            <?php echo h($project['Project']['hotel_notes']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('PPE'); ?></dt>
        <dd>
            <?php echo h($project['Project']['ppe']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Phases'); ?></dt>
        <dd>
            <?php echo h($project['Project']['phase_count']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('% Completed'); ?></dt>
        <dd>
            <?php echo h($project['Project']['percent_completed']); ?>%
            &nbsp;
        </dd>
        <dt><?php echo __('Start Date'); ?></dt>
        <dd>
            <?php echo $this->Layout->displayProjectDates($project['Project']['date_start']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('End Date'); ?></dt>
        <dd>
            <?php echo $this->Layout->displayProjectDates($project['Project']['date_end']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Project Duration'); ?></dt>
        <dd>
            <?php echo $this->Time->dateDiffDays($project['Project']['date_start'], $project['Project']['date_end']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Archived'); ?></dt>
        <dd>
            <?php echo $this->Layout->boolYesNo($project['Project']['archived']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Created'); ?></dt>
        <dd>
            <?php echo $this->Layout->displayTimeDefault($project['Project']['created']); ?>
            &nbsp;
        </dd>
        <dt><?php echo __('Modified'); ?></dt>
        <dd>
            <?php echo $this->Layout->displayTimeDefault($project['Project']['modified']); ?>
            &nbsp;
        </dd>
    </dl>
</div>

现在我假设代码看起来像这样?:

        <?php if (!empty($project['Project']['city'])) { } ?>

我还在学习PHP而且经验不足,所以任何帮助都会非常感激!如果您需要查看我的控制器以获得更好的主意,请告诉我。

谢谢!

3 个答案:

答案 0 :(得分:1)

我经常检查它是否为NULL而不是空。但逻辑是你检查城市的价值。所以,如果它是NULL,你就可以跳过它。只需修剪数据以确保它真的是空的,因为它们之间可能存在空间,你不会知道为什么它仍在打印它。

希望你正在使用“foreach”循环吗?因为如果你不是,你需要更多的逻辑编码。

答案 1 :(得分:1)

虽然您的!empty()方法是正确的解决方案,但您可以考虑自动执行此过程。考虑到所有字段都在一个数组中,你可以“遍历”数组,只有在值不为空时才输出一行。

在PHP中使用empty()时要小心,因为PHP会将任何“假”值视为“空”(例如null0'',{ {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']); ?>
                    &nbsp;
                </dd>
            <?php endif; ?>