views:

24

answers:

3

Hi, I have a modifier procedure to show the "date" of an event.

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

I have to include that code block in every page I display an event. How do I define a function for this, which can be called from views I want?

A: 

If it's raw data that you're manipulating (as shown) and you just want to return a value for display, I'd create a component and do it at the controller level. If you want to include presentation markup and/or logic, then an element is probably what you're looking for.

Rob Wilkerson
A: 

Looks to me like you're going to be using this in a loop that displays a number of events and your code will be far from optimal in that situation.

I think you can reduce this line:

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

to:

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

(or something similar that compares the stored value without formatting. Formatting is for display purposes, not algorithmic comparison)

and this:

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

to:

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

...and similar edits elsewhere. If this is in a loop, you need to reduce the number of unnecessary function calls and avoid concatenation of strings.

Personally, as this is a display function, I'd keep it on the view side of things (as opposed to the controller) and I'd probably do it as an element with passed parameters - see http://book.cakephp.org/view/560/Passing-Variables-into-an-Element

Leo
A: 

I would create a helper for this. For me it's more sensible rather than a component. If you using this data only to display it I believe that Helper is the proper solution. How to build custom helper

Nik