Posted by kenppx on June 1, 2012 at 5:32pm
いつもお世話になっております。
Drupal7でサイトを構築しておりまして、問題に直面しています。
恐らく基本的な事柄だとは思いますが、ご指導頂ければ幸いです。
CCKのDateフィールドに日付を入力してviewsで出力をしようとしています。
出力フォーマットは2012年6月2日の様にしようと思います。
環境設定→地域と言語→日付と時刻 にてフォーマットを以下の様に設定しました。
Y年n月j日
このフォーマットを用いてcckのdateフィールドで入力された日付をviewsで出力をしますと
下記の様に【年月日】という文字列が日付の後に表示されてしまいます。
2012年6月2日 年月日←(これが表示されてしまいます。)
この現象はCCKのdateフィールドにて入力されたデータを出力した時にだけ起こります。
例えば、コンテンツ作成日などシステム上で作成された日付を出力する場合には
正常に下記の様に表示されます。
2012年6月2日
上記の事から、cckの入力時のデーター形式などが適切では無いのかとも考えているのですが
現状では解決策が見つからず困っています。どなたか、解決策がありましたらご教授頂ければ
幸いです。宜しくお願い致します。
Comments
ある程度コードを読める場合、使っている field
ある程度コードを読める場合、使っている field formatter のコードを見て、挙動を確認してみると良いかもしれません。 field formatter とは、cck フィールドの値をフォーマットする関数です。(確か)フックの実装のかたちで、各フィールドが備えています。
field
field formatterのコードですか…。具体的にはどのファイルを見ればよろしいでしょうか?
ある程度コードを読める場合、使っている field
二重に投稿してしまったので削除しました。
私も同じ問題があってやむなくコアかdateモジュールの関数
私も同じ問題があってやむなくコアかdateモジュールの関数をハックしたことが以前ありました。
たしか、日付部分と時間部分を別々にフォーマットするように処理がされてて、時間部分のフォーマット処理で半角英文字記号であれば日付部分のフォーマット文字を正しく除去されるのだけど全角文字は除去出来ず残ってしまい表示されていました。
「2012-06-02 00:00:00」の日付データを「Y年n月j日」でフォーマットすると日付部分は「2012年6月2日」となり、時間部分は本当であれば「」空になって欲しいところが「年月日」が後ろ付加される、そんな動きをしていました。
試しに「Y年n月j日 H時i分s秒」でフォーマットすると「2012年6月2日 11時00分30秒 年月日時分秒」と全角文字がすべて後ろに付加されてしまいますね。
まさにまったく同じ症状です。
sasaki2go様のおっしゃる問題と全く同じ症状です。
全角文字だけが日付の後ろに表示されてしまうんですよ…。
打つ手がなくどうしたものかと非常に困っております。
具体的にどの様な手段で解決されたか教えて頂けないでしょうか?
dateモジュールの問題ですか…。
こちらで、同じような問題がディスカッションされているのを発見しました。
http://drupal.org/node/1538420
とりあえず、急場しのぎの解決法ですが…
全角文字がなぜか$timezoneとして表示されるのが原因みたいです。対策としてdate.themeのtheme_date_single()でtimezoneを削除して非表示にしましてとりあえず対処しました。
以下、参考になった書き込みです。
Another Temporary Solution
Posted by xerxes on January 26, 2012 at 6:19pm
I also ran into this problem. After digging into the code, for some reason, those 3 extra characters are being passed to the theme function as the timezone. I don't know if its a bug or what so I just had to override theme_date_display_single(). If you don't need to display the timezone, then you should be fine by just taking timezone out.
You can find this in date/date/date.theme
function theme_date_display_single($date, $timezone = NULL) {
return ''. $date . $timezone .'';
}
私が考えた解決方法(実際に使っています)。 ① 「Y年m月
私が考えた解決方法(実際に使っています)。
① 「Y年m月d日」日付フォーマットを作成します。
② View の Date フィールドで下記のように設定します。
● 「Choose how users view dates and times:」上記の日付フォーマットに設定します。
● 「Trim this field to a maximum length」にチェックを入れて、最大長を11にする。
● 「Strip HTML tags」にチェックを入れる
これで「××××年××月××日」のみ表示され、余計な【年月日】という文字列が表示されなくなります。
参考になりました。
kenppxさんの方法はtheme hookをoverrideすればハックせずに対応できそうですね。
jorgemare さんの方法もなるほど上手くいきそうです。
参考になりました。ありがとうございました。
解決策で何か進展があればわかるようにkenppxさんが見つけてくれたスレッドのリンクを貼っておきます。
Custom date formats: Write dates the Japanese way | drupal.org
qchanさん、 実は、ご指摘のスレッドは既に拝見していま
qchanさん、
実は、ご指摘のスレッドは既に拝見していました。しかし、そのスレッドに記載されている(下記の)php コードを具体的にどこに追加すれば良いかわかりませんでした。
<?php
substr_replace($fields['field_post_date']->content, "", strrpos($fields['field_post_date']->content, " 日月年"), strlen(" 日月年"))
?>
もしわかれば、おしえていただけますか?
宜しくお願いします。
jorgemareさん、はじめまして。
#編集しました。overrideする関数を変更
jorgemareさん、はじめまして。
は、どこに書くつもりだったんでしょうね。ちょっと私もわかりませんでした。
同じスレッドの theme_date_display_combination 関数を使う方法ならなんとかわかりますので、お伝えします。
dateモジュール内の date.themeファイルを開きます。
15行目あたりからの function theme_date_display_combination をコピー
長い関数ですが最後までコピーすること。
自分のサイトで使っているThemeフォルダにtemplate.phpファイルを作って、上のFunctionをペースト
Function名を自分のTheme名に変更
theme_date_display_combination >> {my_theme_name}_date_display_combination に。
関数の中程にある $timezone = $dates['value']['formatted_timezone']; をコメント
その下に $timezone = ''; を追記
ファイル保存後chache clearをする。
これで消えると思います。
あくまでtemporaryな解決策なのでDateモジュールにPatchが上がるといいんですけども。
問題は
問題は、date.themeファイルの 134行目から145行目にかけての部分
のように思われますね。
この操作をなぜしないといけないのかがわからないのですが、どなたか教えてもらえたらありがたいです。
日本語にかぎらず、 アルファベットでも Format string に日付文字列以外の文字列を追加すると全部末尾に繰り返し付けられてしまいます。
例えばInput formatに \Y\e\a\r-Y/\m\o\n-n/\d\a\y-j の様に書くと、
と表示されます。
( )と[ ] だけは取り外しているようですね。
英語でIssueに上げてもらえると嬉しいなぁ。
qchan
qchan 返信が遅れてすみません。
試してませんが、ここによると…
http://drupal.org/node/1360672#comment-5783368
… date でこの問題は解決されたようです。
http://drupalcode.org/project/date.git/commit/5b99a59
もう一つ簡単な解決策
今更感もありますが、下記のスレッドでもっと簡単な解決策みつけましたので、シェアします。
https://drupal.org/node/1143286#comment-6443784
簡単に言うと、日付型の書式に「\」下記のように追加することで、日本語の日付も正しく表示されるようになります。
BEFORE Y年n月j日
AFTER Y\年n\月j\日
ご参考までに。
これはとても簡単でした
どうもありがとうございましたjorgemare様。
本当に役に立つ解決です。