DateTimeSettingsのメソッドについて

concrete cms 9.1.2を使用しています。バグではないのですが、詰まったことがあったので要望です。DateTimeSettingsにおけるakDateDisplayModeに"date_time"を初期値に入れて欲しいです。akDateDisplayModeを設定し忘れ、コンポーザーで入力必須にするとバリデーションがうまく機能しなくなります。入力しても「〜〜は入力必須です」と怒られて作成できません。

パッケージ開発にてプログラム的に日時の属性を作成するとき、以下の様に作成しました。

$service = Core::make('Concrete\Core\Attribute\Category\CategoryService');
$categoryEntity = $service->getByHandle('collection');
$category = $categoryEntity->getController();

$key = $category->getByHandle('start_end');
if (!is_object($key)) {
    $key = new PageKey();
    $key->setAttributeKeyHandle('start_end');
    $key->setAttributeKeyName('掲載終了日');

    $settings = new DateTimeSettings();
    $settings->setMode('date_time');

    $key = $category->add('date_time', $key, $settings);
}

日付日時の属性は問題なく作成できたのですが、上記の属性をコンポーザーフォームに追加して「入力必須」にした場合、コンポーザーで値を入力しているのにもかかわらず入力必須ですと警告でてしまい作成が行えません。

原因は「atDateTimeSettings」のテーブルを見たとき、akDateDisplayModeが未入力だったことです。web上から作成する時はakDateDisplayModeに「date_time」が初期値で入る(セレクトボックスで選択済み」なので問題ありません。しかし、上記の様にプログラム的に作成する場合は

$settings->setMode('date_time');

と設定しておく必要があります。そうすればバリデーションがきちんと機能します。ソース上では


protected $akDateDisplayMode = '';

となっていますが、ここの初期値がdate_timeになっているとありがたいです。

別の内容となるのですが、このように属性をプログラム的に作る記述が少なく結構苦労しました。また、上記のように入力しなければならない項目など一通りのドキュメントや方法があれば教えていただきたいです。

1 Like

@junmedia2 お世話になります。
遅くなりましたが、
ありがとうございます。

確かに、ドキュメントをしっかりさせるか、デフォルトの値で気をつけないといけないところは、デフォルトを設定すべきかですね。

GitHub に Issue を登録してみました。

ドキュメントを整備すべきであれば、ちょっと違うかもですが、コアチームと議論できると思います。

差し支えなければ、このスレッドをウォッチしていただけると幸いです。

@junmedia2 お世話になります。2週間前に Andrew から GitHub の Issue に返信がありました

I think have a default akDateDisplayMode in the DateTimeSettings class makes the most sense to fix this issue.

ということで、
よろしければ、GitHub に修正 Pull Request を送ってみてみませんか?

返信に間を開けて申し訳ありません。初めてなので模索しながらですが、ぜひプルリクを送ってみようと思います。

1 Like

@junmedia2

ありがとうございます。
お待ちしてます。

わからないことがあったら、聞いてください。
金曜日夜に画面共有しなあがらお教えすることも可能です。