2013-03-15 74 views
0

我有一个显示项目字段视图的页面。这是我想要实现的:如果表格数据为空(例如,表格中没有输入City的数据),那么我想隐藏字段和字段名称/标签。如下所示:


所以字段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和不是很有经验,所以任何帮助将不胜感激!让我知道你是否需要看我的控制器以获得更好的想法。

谢谢!

回答

1

下面是一个示例,这应该为你工作:

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

完美,完全符合我的需求! – Seth 2013-03-16 20:53:50

+0

@seth谨慎解释为什么你不接受我的答案并接受了这个答案?似乎这个答案也有错误($ contact变量不存在于你的代码中) – thaJeztah 2013-03-16 23:00:46

1

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

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

1

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

在PHP中使用empty()时,虽然要小心,因为PHP会考虑任何“falsy”值“空”(例如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文件(阅读本地化的章节,例如,

应用程序/地点/英/ LC_MESSAGES/default.po

msgid "type" 
msgstr "Type of work" 
+0

这正是我需要的,非常感谢你! – Seth 2013-03-15 22:37:32

+0

很高兴我可以帮助,并享受CakePHP。作为一个额外的“练习”,你可以将这些代码包装在一个'助手'中,这样你可以在你的应用程序的任何位置*使用它,而无需重复你的代码。这将保持您的视图更干净,更易于维护(干)。本章介绍如何创建自己的助手; http://book.cakephp.org/2.0/en/views/helpers.html#creating-helpers – thaJeztah 2013-03-15 22:50:56