baserCMSのお問い合せフォーム(メールプラグイン)ってすごく便利なのですが、
入力画面に戻るボタンがないので、実装してみました。
baserCMS 2.0.3で確認しています。
とりあえず、変更点
baser/plugins/mail/views/elements/mail_form.php
の50行目あたりの
<?php if($freezed): ?> <?php echo $mailform->submit(' 送信する ', array('div' => false, 'class' => 'btn-red button', 'id' => 'MessageSubmit')) ?> <?php elseif($this->action != 'submit'): ?>
の部分に1行追加&1行修正して
<?php if($freezed): ?> <?php echo $mailform->submit(' 書き直す ', array('div' => false, 'class' => 'btn-red button', 'id' => 'MessageBack', 'name' => 'data[mode][back]')) ?> <?php echo $mailform->submit(' 送信する ', array('div' => false, 'class' => 'btn-red button', 'id' => 'MessageSubmit', 'name' => 'data[mode][submit]')) ?> <?php elseif($this->action != 'submit'): ?>
と、戻るボタンの追加とsubmitボタンに名前をつけます。
でもって、次は baser/plugins/mail/controllers/mail_controller.php の324行目あたり function submit($id = null) のメソッドのなかの
if(!$this->data) { $this->redirect(array('action' => 'index', $id)); }else {
を
if(!$this->data) { $this->redirect(array('action' => 'index', $id)); } elseif( isset($this->data['mode']) && key($this->data['mode']) == 'back' ) { $this->_back($id); } else {
とします。
あわせて、元ファイルだと、352行目あたりの
} $this->set('mailContent',$this->dbDatas['mailContent']); $this->render($this->dbDatas['mailContent']['MailContent']['form_template'].DS.'submit');
を、
$this->set('mailContent',$this->dbDatas['mailContent']); $this->render($this->dbDatas['mailContent']['MailContent']['form_template'].DS.'submit'); }
として、326行目(元ファイルは324行目)あたりの else 句の中に入れ込みます。
最後に、同じmail_controller.phpにメソッドをまるっと追加。
/** * [private] 確認画面から戻る * * @param mixed mail_content_id * @return void * @access public */ function _back($id) { $this->set('freezed',false); $this->set('error',false); if($this->dbDatas['mailFields']){ $this->set('mailFields',$this->dbDatas['mailFields']); } //mailの重複チェックがある場合は、チェック用のデータを復帰 $sendVal = array(); $noSendVal = array(); foreach($this->dbDatas['mailContent']['MailField'] as $val){ if($val['valid_ex'] == 'VALID_EMAIL_CONFIRM'){ if(! $val['no_send'] ){ $sendVal[$val['group_valid']] = $val['field_name']; } else { $noSendVal[$val['group_valid']][] = $val['field_name'] ; } } } if(! empty($noSendVal) ){ foreach( $noSendVal as $key => $val){ foreach( $val as $v){ if( isset($this->data['Message'][$sendVal[$key]]) ){ $this->data['Message'][$v] = $this->data['Message'][$sendVal[$key]]; } } } } $this->action = 'index'; //viewのボタンの表示の切り替えに必要なため変更 $this->set('mailContent',$this->dbDatas['mailContent']); $this->render($this->dbDatas['mailContent']['MailContent']['form_template'].DS.'index'); }
とすれば、完成です。
で、スマホは基本PCと同じなので一応チェックして動作確認しておりますが、ケータイはview自体が別物なので baser/plugins/mail/views/elements/mobile/mail_form.php の
<?php echo $mailform->submit(' 送信する ', array('class' => 'btn-red button')) ?>
を
<?php echo $mailform->submit(' 書き直す ', array('class' => 'btn-red button', 'name' => 'data[mode][back]')) ?> <?php echo $mailform->submit(' 送信する ', array('class' => 'btn-red button', 'name' => 'data[mode][submit]')) ?>
とすれば大丈夫です。
とりあえず、本体の方には、マージしてもらえるように(関連する細かいバグを含めて)リクエストしておりますが
現状のバージョンにくみこみたい場合はお試しください。
あと、完了画面で、リロードすると2回送信なるので、全部の処理が終わったあとに、
入力データの 初期化を組み込むべきだろうなぁ。取りあえずチケットは上げたのでそのうち修正されると思います。