2011年2月1日火曜日

[CakePHP] Formヘルパー(year/month/day)

久々のCakePHPで、メモ。

Formヘルパーの日付メソッド(year/month/day)を使いselect要素を自動出力する際、
空列が出力されるので、Cookbook(和訳) で仕様を確認すると、

$form->year('leave',2011,2021,'now',false)

と、最後にfalseを指定することで、出力しないよう変更できるようだが、
いくらやってもダメなので、ソース(cake/libs/view/helpers/form.php)
を確認してみると、最後のbooleanは全く参照していない。。。
※month,dayも同様。
本家(英語)を見ると、この引数ないね。。。

また、月は「01」とゼロ埋め、日は「1」とゼロ埋めなしでselect要素を出力するので、
統一したいと思い、同ソースを見るとオプションでの変更は不可。

と、いう訳で修正パッチ。 
cake/libs/view/helpers/form.php を app/views/helpers/form.php
にコピーして適用します。

[Version]
CakePHP 1.3.7

[修正内容]
・select要素を自動出力する際、空列を出力しない。
・月と日をゼロ埋めなしで表示する。※表示のみ、valueは両方ともゼロ埋めする。

[diff]
--- cake/libs/view/helpers/form.php 2011-01-28 11:31:18.000000000 +0900
+++ app/views/helpers/form.php 2011-01-30 21:30:31.000000000 +0900
@@ -1522,7 +1522,7 @@
 * @link http://book.cakephp.org/view/1419/day
 */
  function day($fieldName, $selected = null, $attributes = array()) {
-    $attributes += array('empty' => true);
+    $attributes += array('empty' => false);
     $selected = $this->__dateTimeSelected('day', $fieldName, $selected, $attributes);

    if (strlen($selected) > 2) {
@@ -1553,7 +1553,7 @@
 * @link http://book.cakephp.org/view/1416/year
 */
  function year($fieldName, $minYear = null, $maxYear = null, $selected = null, $attributes = array()) {
-   $attributes += array('empty' => true);
+   $attributes += array('empty' => false);
    if ((empty($selected) || $selected === true) && $value = $this->value($fieldName)) {
      if (is_array($value)) {
        extract($value);
@@ -1606,7 +1606,7 @@
 * @link http://book.cakephp.org/view/1417/month
 */
  function month($fieldName, $selected = null, $attributes = array()) {
-   $attributes += array('empty' => true);
+   $attributes += array('empty' => false);
    $selected = $this->__dateTimeSelected('month', $fieldName, $selected, $attributes);

    if (strlen($selected) > 2) {
@@ -1614,7 +1614,7 @@
    } elseif ($selected === false) {
      $selected = null;
    }
-   $defaults = array('monthNames' => true);
+   $defaults = array('monthNames' => false);
    $attributes = array_merge($defaults, (array) $attributes);
    $monthNames = $attributes['monthNames'];
    unset($attributes['monthNames']);
@@ -2138,7 +2138,7 @@
          $data = $options['monthNames'];
        } else {
          for ($m = 1; $m <= 12; $m++) { -           $data[sprintf("%02s", $m)] = strftime("%m", mktime(1, 1, 1, $m, 1, 1999)); +           $data[sprintf("%02s", $m)] = sprintf("%d", strftime("%m", mktime(1, 1, 1, $m, 1, 1999)));           }         }       break;

3 件のコメント:

RISE さんのコメント...

PHPってケーキ屋さんのお話かと思いクリックしたら・・・違いました^^;

甘いものが好きなもので^^;;;

isoya9 さんのコメント...

ケーキ大好きです!

頭使うと甘いものが欲しくなるってデス・ノートでやってたけど、ホントなのかな?

RISE さんのコメント...

血糖値と疲労の問題でしょうね。

朝一で甘い缶コーヒーを飲んで試験を受けるといいらしいです。

学会で発表されていました。