我在哪里定义CakePHP中的视图函数?

时间:2010-08-31 11:45:36

标签: cakephp function view

我有一个修饰程序来显示事件的“日期”。

        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']));
    }

我必须在每个显示事件的页面中包含该代码块。 如何为此定义一个函数,可以从我想要的视图中调用它?

3 个答案:

答案 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)

如果它是您正在操作的原始数据(如图所示)并且您只想返回显示值,我将创建一个组件并在控制器级别执行。如果你想要包含表示标记和/或逻辑,那么你可能正在寻找一个元素。