0

我有一个显示项目字段视图的页面。这是我要完成的工作:如果表数据为空(例如,表单中没有输入城市的数据),那么我想隐藏字段和字段名称/标签。如此处所示:


因此,Notes、City 和 Branch 字段不应显示。我怎样才能做到这一点?

这是我的视图页面代码:

<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,经验不足,因此将不胜感激!如果您需要查看我的控制器以获得更好的想法,请告诉我。

谢谢!

4

3 回答 3

1

我通常检查它是否为 NULL 而不是空的。但逻辑是你检查城市的价值。因此,如果它为 NULL,您只需跳过它。只需修剪数据以确保它确实是空的,因为它们之间可能有一个空格,您将不知道它为什么仍在打印它。

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

于 2013-03-15T20:56:42.950 回答
1

尽管您的!empty()方法是一个合适的解决方案,但您可以考虑将这个过程自动化一点。考虑到所有字段都在一个数组中,您可以“循环”通过数组,如果值不为空,则只输出一行。

但是在 PHP 中使用时要小心empty(),因为 PHP 会将任何 'falsy' 值视为 'empty'(例如null, 0, '', false)将被视为空,因此不会输出 'zero' 。为了防止这种情况,请执行 'strict ' 与空字符串进行比较。您可能还需要检查null检查是否value是“标量”值,而不是(例如)数组(如果模型与其他模型有关联,则可以这样做)

通过使用数组,您不必重复检查每个字段,并且视图甚至可以重复用于您网站中的各种操作

例子;

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
}

请注意,您必须为 .po 文件中的字段名称添加适当的“翻译”(例如,阅读有关本地化的章节;

app/Locale/eng/LC_MESSAGES/default.po

msgid "type"
msgstr "Type of work"
于 2013-03-15T21:04:03.203 回答
1

这是一个示例,应该对您有用:

<?php if (!empty($project['Project']['test'])): ?>
                <dt><?php echo __('Branch'); ?></dt>
                <dd>
                    <?php echo h($project['Project']['test']); ?>
                    &nbsp;
                </dd>
            <?php endif; ?>
于 2013-03-16T14:10:02.490 回答