我有一个修饰程序来显示事件的“日期”。
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']));
}
我必须在每个显示事件的页面中包含该代码块。 如何为此定义一个函数,可以从我想要的视图中调用它?
答案 0 :(得分: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
答案 1 :(得分:1)
我会为此创建一个帮手。对我来说,它更明智而不是一个组件。如果您仅使用此数据来显示它,我相信Helper是正确的解决方案。 How to build custom helper
答案 2 :(得分:0)
如果它是您正在操作的原始数据(如图所示)并且您只想返回显示值,我将创建一个组件并在控制器级别执行。如果你想要包含表示标记和/或逻辑,那么你可能正在寻找一个元素。