2013-03-15 75 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