bacerCMS3.0.9のメールフォーム和暦表示について

会社のHPを以下の状態で運用しています。

baserCMSバージョン: 3.0.9
ratio_3_2バージョン:1.3.0

最近になって気付いたのですが、メールフォームの和暦表示が
平成32年となっており、これを令和に変更する方法が分からなく
質問しました。

baserCMSのバージョンを4系にすれば解決すると思うのですが、
現状の環境のままでも解決策があるようでしたらご教授願います。

@hogechan
こんにちは。
basercmsの和暦変換はBcTimeHelperが握っており、3系ではlib/Baser/View/Helper/BcTimeHelper.phpになります。
こちらのそれぞれのメソッドについて、令和が追加できるようにして見ては如何でしようか。
また、4系でも令和については未対応な様なのでこちらの方で実装して見ますね。

すみません。。。
どうやら4系では既に対応済みの様です。。。
令和対応のコミットログがございますので、こちらを参考に該当ファイルを編集して見ては如何でしょうか。

1 Like

iwamoto様

ご連絡ありがとうございます。

ご教授いただいた BcTimeHelper.phpの修正ですが、このファイルを自力で探し出して同じような修正をしてみたのですが、修正後にテストしたところ、メールフォームの確認画面で和暦部分だけ表示されず、入力ミスで再度入力画面に戻されてしまいます。(延々とこのループに陥ります。)

BcTimeHelper.phpだけの修正ではなく、他のファイル修正も必要なのかも知れません。
引き続き、情報がありましたらご教授願います。

以下の流れでメールが送信できるところまで確認しました。

3.0.9に以下のコミットのBcTimeHelperの変更を適用

これだけだと表示が崩れるので以下の2コミットも適用


ただ、BcTimeHelperを変更しただけの時点でもループは発生しなかったので、BcTimeHelperの変更部分を正しく適用できているか再度確認されてみてください。

1 Like

seto様

ご連絡ありがとうございます。
他業務と兼任しており、ご返信が遅くなりまして大変申し訳ありません。

ご教授いただいた通り修正をしてみましたが、やはりメールフォームの確認画面で
和暦部分だけ表示されず、入力ミスで再度入力画面に戻されてしまいます。
(延々とこのループに陥ります。)

以下の2ファイルについては、該当フォルダにファイルが存在しておらず
(lib/Baser/Test/Case/View/についてはフォルダ自体が存在していなかったので作成)、
こちらで作成したものを使用しました。
(パーミッションはそれぞれ644にしてあります。)

lib/Baser/Plugin/Mail/Test/Case/View/Helper/MaildataHelperTest.php
lib/Baser/Test/Case/View/Helper/BcTimeHelperTest.php

それ以外のファイルは、ご教授いただいた通りに変更してあります。

これ以外に修正箇所があるのでしょうか?
引き続き、情報がありましたらご教授願います。

テーマ側の問題かと思って、ratioの1.3.0を入れてみたのですが、やはり送信まで進めますね。

調べるとなると、 app/tmp/logs/error.log の内容を確認する必要がありますね。
また、ローカルに環境が存在する場合はテーマを変更してみたり、いったん和暦以外のメールフィールドをすべて無効化して再現するかの確認もしたりしてみると、なにか情報を得られるかもしれません。

seto様

ご連絡ありがとうございます。

ご教授いただいたlogファイルを調べたところ、このようなエラーが出ていました。

2020-04-13 11:47:08 Error: Fatal Error (4): syntax error, unexpected ‘*’, expecting function (T_FUNCTION) in [/home/okunota/www/web/lib/Baser/View/Helper/BcTextHelper.php, line 236]

該当するBcTextHelper.phpの236行目を調べたところ、こちらの行からスタートしていました。

  • BcTimeHelper::convertToWarekiArray() で配列形式の和暦データに変換したものを利用する
  • @param array $arrDate
  • ? wareki:和暦に変換する場合は、trueを設定、設定しない場合何も返さない
    • year :和暦のキーを付与した年。
  •  r: 令和 / h: 平成 / s: 昭和 / t: 大正 / m: 明治
    

エラーになる原因が分かりましたら、ご教授願います。

コードを記載頂く際は、コメント投稿画面の「整形済みテキスト」ボタンを適用していただくとわかりやすいです。
こんな感じのボタンです。 → </>

エラー文を見るとPHPの構文エラーみたいですね。該当箇所を以下と見比べてみてください。

seto様

ご連絡ありがとうございます。
また、引用の仕方が良くわかっていなくて申し訳ありません。

PHPの構文エラーとの事ですが、もしかしてサーバー側のPHPのバージョンも
関係しているのでしょうか?

いま調べたら、バージョンが PHP 5.6.40 (CGI版)となっていました。
サーバーは、さくらのレンタルサーバ ライトを使用しています。

BcTextHelper.phpの該当箇所を見比べてみても、間違っている箇所がありません。

 * @param boolean $value
 * @return string 有/無
 * @access public
 */
	public function booleanExists($value) {
		$list = $this->booleanExistsList();
		return $list[(int) $value];
	}

    /**
 * 配列形式の和暦データを文字列データに変換する
 *
 * FormHelper::dateTime() で取得した配列データを
 * BcTimeHelper::convertToWarekiArray() で配列形式の和暦データに変換したものを利用する
 *
 * @param array $arrDate
 * 	− `wareki`:和暦に変換する場合は、trueを設定、設定しない場合何も返さない
 *	- `year` :和暦のキーを付与した年。
 * 		r: 令和 / h: 平成 / s: 昭和 / t: 大正 / m: 明治
 * 		(例)h-27
 * 	- `month` : 月
 * 	- `day` : 日
 * @return string 和暦(例)平成 27年 8月 11日
 * @access public
 */
	public function dateTimeWareki($arrDate) {
		if (!is_array($arrDate)) {
			return;
		}
		if (!$arrDate['wareki'] || !$arrDate['year'] || !$arrDate['month'] || !$arrDate['day']) {
			return;
		}
		list($w, $year) = explode('-', $arrDate['year']);
		$wareki = $this->BcTime->nengo($w);
		return $wareki . " " . $year . "年 " . $arrDate['month'] . "月 " . $arrDate['day'] . '日';
	}

もしかしたらと思い、該当部分の上の箇所を以下のように変更すると、同じようなエラーの再現を確認しました。

/**
 * boolean型のデータを可、不可で出力
 *
 * 0 or 1 の int も許容する
 * 文字列を与えた場合には、不可を出力
 *
 * @param boolean $value
 * @return	string	可/不可
 * @access	public
 */
	public function booleanAllow($value) {
		$list = $this->booleanAllowList();
		return $list[(int) $value];
	}

 * @param boolean $value
 * @return string 有/無
 * @access public
 */
	public function booleanExists($value) {
		$list = $this->booleanExistsList();
		return $list[(int) $value];
	}

2020-04-16 16:58:14 Error: Fatal Error (4): syntax error, unexpected ‘*’, expecting function (T_FUNCTION) in [/var/www/html/_baser/309/lib/Baser/View/Helper/BcTextHelper.php, line 214]

この場合の修正方法は、上の方も含めて確認することです。

ただ、このエラーの場合はメールフォームの入力画面自体が表示されなくなるんですよね。

問題の現象は、確認画面に進めなくなるとのことでしたので、このエラーとは他のエラーログが出力されているかもしれません。

seto様

ご連絡ありがとうございます。

ご指摘いただきました箇所の

を2か所削除したところ、エラーログにはエラーが吐き出されなく
なりましたが、相変わらず確認画面で和暦部分のみ表示されず
入力ミスで再度入力画面に戻されてしまいます。

他にも原因が考えられるのでしょうか?

コミットの該当箇所を正しく適用していて、エラーログにもエラーが出力されないとなると、実際のファイルを見てみないと解決できないかもしれませんね。

baserCMSのクリエイティブパートナーに相談されることを検討されてみてください。