SSブログ

Smarty-3.1.3のバグ? [プログラム]

Smartyが3.1.3になったのでアップデートしてみたら、Noticeエラーが表示。


Notice: Uninitialized string offset: 1 in Smarty-3.1.3/libs/plugins/function.html_select_date.php on line 355


私が以前は、Smarty-3.0.7だったため、どのバージョンからこのように変わったかは不明。



Smarty-3.1.3/libs/plugins/function.html_select_date.phpのソースを見ると
    354     for ($i=0; $i <= 2; $i++) {
    355         switch ($field_order[$i]) {
    356             case 'Y':
    357             case 'y':
    358                 if (isset($_html_years)) {
    359                     if ($_html) {
    360                         $_html .= $field_separator;
    361                     }
    362                     $_html .= $_html_years;
    363                 }
    364             break;


どうやら3桁を想定して処理されているようだ。

ま、あまりよろしくない仕様ですかね。
defaultケースの場合が記載されていないし。


354行目の

354 for ($i=0; $i <= 2; $i++) {



354 for ($i=0; $i <= count($field_order); $i++) {

に修正で直るはずですが、申請すればいいんだろうか?


これの何が問題かというと、今まで日本語の

2011年10月10日

のように表示するために、一つずつ、

{Smarty表記}年{Smarty表記}月{Smarty表記}日

としていたため、
field_orderは

field_order = "Y"

と1桁で表記していた。

詳細はこのページを参照してください。
http://techblog.crooz.jp/?p=4210



しかし、上記のソースに変わったため、これは使えない。

ということで、元を修正するのは、今後のバージョンアップに反映してくれないと意味がないため、開発者側で3桁にすればいいのだから、
field_order = "Y--"
field_order = "M--"
field_order = "d--"
とすることで解決。

「--」は、「YyMmDd」以外なら3桁にするため何の文字でもOK。

Smartyの時刻表示はYMDとセパレータ「/など」のみでの表示のため、すぐには改善してくれないかも。

Smartyは、
2011/10/10

2011-10-10
を想定していると思うので。
コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。