2010-08-31 63 views
0

我有一個修改過程來顯示事件的「日期」。我在哪裏定義CakePHP中的視圖函數?

 if($event['Event']['is_multi_day']){ 
     if(date('n',strtotime($event['Event']['start_day'])) == date('n',strtotime($event['Event']['end_day']))) 
      $date = date('j',strtotime($event['Event']['start_day'])).' - '. 
       date('j',strtotime($event['Event']['end_day'])).' '. 
       date('M',strtotime($event['Event']['end_day'])); 
     else 
      $date = date('j',strtotime($event['Event']['start_day'])).' '. 
       date('M',strtotime($event['Event']['start_day'])).' - '. 
       date('j',strtotime($event['Event']['end_day'])).' '. 
       date('M',strtotime($event['Event']['end_day']));  

    }else{ 
     $date = date('j M', strtotime($event['Event']['start_day'])); 
    } 

我必須在顯示事件的每個頁面中包含該代碼塊。 如何爲此定義一個函數,可以從我想要的視圖中調用?

回答

1

在我看來,你會在顯示許多事件的循環中使用它,在那種情況下你的代碼將遠離最佳狀態。

我想你可以減少這種行:

if(date('n',strtotime($event['Event']['start_day'])) == date('n',strtotime($event['Event']['end_day']))) 
) 

於:(或類似的東西,儲值沒有格式比較格式是用於顯示目的,而不是算法的比較)

if($event['Event']['start_day']==$event['Event']['end_day']) 

和這個:

date('j',strtotime($event['Event']['end_day'])).' '.date('M',strtotime($event['Event']['end_day'])); 

到:

date('j M',strtotime($event['Event']['end_day'])); 

...和其他地方類似的編輯。如果這是一個循環,則需要減少不必要的函數調用次數並避免串聯字符串。

就個人而言,這是一個顯示功能,我會保持它的東西(而不是控制器)的視點側,我可能會做它作爲參數傳遞的元素 - 見http://book.cakephp.org/view/560/Passing-Variables-into-an-Element

0

如果它是你正在操作的原始數據(如圖所示),而你只是想返回一個值來顯示,我會創建一個組件並在控制器級別執行。如果您想要包含演示文稿標記和/或邏輯,那麼您可能正在尋找一個元素。

1

我會爲此創建一個幫手。對我來說,它更合理,而不是一個組件。如果您僅使用這些數據來顯示它,我相信Helper是正確的解決方案。 How to build custom helper

相關問題