I noticed something interesting when testing a checkout form today build in CakePHP. The options for the drop-down were in descending order. The options were for the credit card expiration date field. The range was set with
The code in my view (CakePHP version 1.3.7).
1echo $this->Form->input('cc_expires', [2 'type' => 'date',3 'label' => 'Expiration Date',4 'dateFormat' => 'MY',5 'empty' => true,6 'separator' => ' ',7 'minYear' => date('Y'),8 'maxYear' => date('Y', strtotime('+7 years'))9]);
Although the options range is correct, this seemed unintuitive. In addition, I felt it was slightly poor usability. So I wanted to fix the order.
I dug around in The Book. Nothing. I was about to submit a ticket. But before I do, I typically check my version and the core. Upon searching for minYear I found the function in question –
year(). Apparently an undocumented attribute exists –
orderYear. After adding
'orderYear' => 'asc' to the options array I got the desired output.
Two notes here. First, CakePHP has many undocumented features. It never hurts to dig around the core. Second, the
orderYear attribute is completely unnecessary in this case. In fact, it is only used for the *year* drop-down. It could be easily determined from comparing
maxYear. In this case,
minYear is 2012 which is less than
maxYear is 2019. Display in ascending order.
orderYear has uses. But today it wasted my time.
Find this interesting? Let's continue the conversation on Twitter.