【问题标题】:Hiding field and field name from view if table is empty如果表为空,则从视图中隐藏字段和字段名称
【发布时间】:2013-03-04 16:59:49
【问题描述】:

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


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

谢谢!

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    这是一个示例,应该适合您:

    <?php if (!empty($project['Project']['test'])): ?>
                    <dt><?php echo __('Branch'); ?></dt>
                    <dd>
                        <?php echo h($project['Project']['test']); ?>
                        &nbsp;
                    </dd>
                <?php endif; ?>
    

    【讨论】:

    • 完美,正是我需要的!
    • @seth 想解释一下为什么你不接受我的回答并接受了这个?似乎这个答案也有错误(您的代码中不存在 $contact 变量)
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      在 PHP 中使用 empty() 时要小心,因为 PHP 会将任何“假”值视为“空”(例如,null0''false)将被视为空,所以一个“零”将被输出。为了防止这种情况,对空字符串做一个“严格”比较。您可能还需要检查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"
      

      【讨论】:

      • 很高兴我能提供帮助,并享受 CakePHP。作为额外的“练习”,您可以将此代码包装在“帮助程序”中,这样​​您就可以在应用程序中任何地方使用它,而无需重复您的代码。这将使您的视图更清洁且更易于维护(干燥)。本章介绍如何制作自己的助手; book.cakephp.org/2.0/en/views/helpers.html#creating-helpers
      猜你喜欢
      • 2013-10-02
      • 1970-01-01
      • 2021-07-10
      • 2014-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      相关资源
      最近更新 更多