ネットで買い物とか企業サイトの登録とかしようとすると必ずある機能
入力にエラーがあるとメッセージとともに再入力させられます
設定ページに多少の追記が必要。以下に例を示します
* fields
項目名 見出し 形式 オプション デフォルト値 チェック text テキスト text 20 textのデフォルト値 not null,numeric page ページ page 20 pageのデフォルト値 numeric,0or1
* check
チェック名 正規表現 表示メッセージ not null ^(.+)$ 空白はダメ numeric ^([0-9]*)$ 数字で入力してください 0or1 ^(0[[]]1)$ 0か1
* fields |項目名|見出し |形式|オプション|デフォルト値 |チェック |h |text |テキスト|text|20 |textのデフォルト値|not null,numeric| |page |ページ |page|20 |pageのデフォルト値|numeric,0or1| * check |チェック名|正規表現 |表示メッセージ |h |not null |^(.+)$ |空白はダメ | |numeric |^([0-9]*)$|数字で入力してください| |0or1 |^(0[[]]1)$|0か1 |
苦しい点としては、以下の2つがあります
新たに異なるファイル名にすると定数定義や関数名変更が面倒なのでそのままにしました。 オリジナルのバックアップを取ってから上書きしてから使ってみてください
148a149,245 > // Check by regular expression - add from here -----> > > $error_flags = array(); > foreach (array_keys($fields) as $key) > { > // 送信された値を取得 > $value = array_key_exists($key,$_post) ? $_post[$key] : ''; > > $error_flags[$key] = ''; > > // カンマで区切られ、いくつも指定されたチェックのIDを取得 > $check = split(",", $fields[$key]->check); > foreach ($check as $checkid) { > > // チェックのリストにヒットするか > foreach ($config->get('check') as $check_cond) > { > if ($checkid == $check_cond[0]) { > // '|' を表に入れると崩れるので、正規表現で使用しな い'[[]]'で表し、直前で置換する > if (!(ereg(str_replace('[[]]', '|', $check_cond[1]), $value))) { > $error_flags[$key] = $check_cond[0]; > } > break; > } > } > // 最初にヒットしたエラーだけを処理 > if ($error_flags[$key] != '') { > break; > } > } > } > > // 1つでもエラーがあるか > $error = false; > foreach ($error_flags as $error_flag) { > $error = $error || ($error_flag != ''); > } > > if ($error) { > > $retval = convert_html(plugin_tracker_get_source($config->page.'/form')); > $hiddens = ''; > > foreach (array_keys($fields) as $name) > { > // 送信された値を取得 > $value = array_key_exists($name,$_post) ? $_post[$name] : ''; > > // 再入力しないで済むように送信された値をデフォルトに設定 > $fields[$name]->default_value = $value; > > // 自分に付け替え > if (is_a($fields[$name],'Tracker_field_submit')) { > $fields[$name]->page = $base; > } > > $replace = $fields[$name]->get_tag(); > > if (is_a($fields[$name],'Tracker_field_hidden')) > { > $hiddens .= $replace; > $replace = ''; > } else { > if ($error_flags[$name] != '') { > $mesasge = ''; > foreach ($config->get('check') as $check_cond) > { > if ($error_flags[$name] == $check_cond[0]) { > $message = $check_cond[2]; > break; > } > } > if (trim($message) == '') { > $message = 'error'; > } > $message = '<div><strong>' . $message . '</strong></div>'; > // スタイルシートに無いので自分で記述 > $replace = '<div class="error_message" style="background-color:#f66;padding:2px;">' > . $replace . $message . '</div>'; > } > } > $retval = str_replace("[$name]",$replace,$retval); > } > $reform = <<<EOD > <form enctype="multipart/form-data" action="$script" method="post"> > <div> > $retval > $hiddens > </div> > </form> > EOD; > > return array('msg'=>$refer, 'body'=>$reform); > } > > // Check by regular expression - add to here <----- > 259a357,359 > // Check by regular expression - add from here -----> > var $check; > // Check by regular expression - add to here <----- 270a371,373 > // Check by regular expression - add from here -----> > $this->check = $field[5]; > // Check by regular expression - add to here <-----