beshio
1
【環境情報】
・baserCMSのバージョン:5.2.1
・レンタルサーバー名:XAMPP on Windows
・使用テーマ:BcCosmo
・PHPスキル(自己評価):始めて二日目の全くの初心者
問い合わせで、例えば「不具合の報告、質問」をラジオボタンでの選択項目とし、「不具合の報告」の時は別フィールドの「アプリバージョン」を必須にしています。具体的には、
vendor/baserproject/bc-mail/src/Model/Table にある、MaleMessagesTable.php の239行目を、以下の様に書き換えました。‘appver’ は上記、別フィールドで、‘what’ はラジオボタンのフィールドです。
if ($mailField->field_name === 'appver') {
$radio = $postData['what'];
if ($radio == '不具合の報告') {
$validator->requirePresence($mailField->field_name)
->notEmptyString($mailField->field_name, __d('baser_core', '必須項目です。'));
} else {
$validator->allowEmptyString($mailField->field_name);
}
} else {
$validator->allowEmptyString($mailField->field_name);
}
試したみたところ、これで上手く動いているようです。ここからが質問なのですが、このような basercms 本体のファイルに手を加えるのが正しい方法なのでしょうか?basercms 4日を始めて4日目の全くのど素人のため、常識的な質問でしたら、お許しください。
こんにちは
basercms 本体のファイルに手を加えるのが正しい方法なのでしょうか?
コアに手を入れるのは避けるべきです
アップデート時に、対象ファイル(今回の場合MaleMessagesTable.php )に更新がある場合、先祖返りが発生するリスクがあります
質問主さまのやりたいことをどのように実現するか、という話ですが、
- カスタマイズ用のプラグインを作成してイベント処理での実装
- JavaScriptを利用して簡易的なチェックを実装する
などになるかと思います
例えば、ラジオボタン(「不具合の報告、質問」)の入力値を監視して、「[不具合の報告]が選択されている」かつ「[アプリバージョン]が未入力」の場合、アラートで警告文を出す
のような簡易的な処理を、themeのファイル内に直接記述するとかですかね…
少しでも参考になれば幸いです
beshio
3
ご教授感謝いたします。さらに一件だけお教え下さい。「カスタマイズ用のプラグインを作成」すると、サーバーサイドで処理ができるようになるのでしょうか?それとも現行の仕様ではできないとの理解でしょうか?
よろしくお願いいたします。
「カスタマイズ用のプラグインを作成」すると、サーバーサイドで処理ができるようになるのでしょうか?
ご認識の通りです
カスタマイズによってサーバーサイド(PHP)処理が可能になります
参考までに公式のドキュメントを置いておきます
beshio
5
お教えいただきまして感謝します。
pluginの作成にはcakePHPなどの作法の学習が必要なようですね。当初は「改造」で凌いで学習をして、いずれはユーザーが「不具合の報告」を選択したときは「必須」を、「質問」を選択したときは「任意」を表示するようJavaScriptで処理し、さらにサーバーサイドでも処理するようにしたいと思います。
有難うございました。
「いいね!」 1