プロジェクト:さまざまな状況に応じてさまざまな方法でフィールドにデータを入力する動的なマルチページフォームを作成します。
コンテキスト: CMSMSおよびSmartyタグを使用して、必要なページにPHPを挿入します。フォームの各ページは、1つのsmartyを使用して作成されています
現在の方法: smartyタグを使用して、ヒアドキュメント表記でエコーされたHTMLの大きなチャンクを記述しています。動的に生成する必要のあるフォームの一部(ドロップダウンメニューなど)に到達したら、ヒアドキュメントをエスケープし、PHPを記述して(標準のエコー関数を使用してそのフォーム要素に必要なHTMLを生成します)、ヒアドキュメントに戻ります。 HTMLのより多くのチャンク。
疑惑:これはエレガントではなく、厄介で、退屈で、ただ気分が悪いだけです。
リクエスト:これを行うためのより良い方法のアイデアはありますか?
編集:私の現在の設定のチャンクの例、ここでは静的HTMLの最初のチャンクがエコーされているのを見ることができます-(フォームの開始と最初の質問)次に、データに応じて動的に生成する必要があるドロップダウンメニューこれはSESSION変数に存在します。この後、ヒアドキュメントは再開し、より静的なHTMLをエコーします。
echo <<<EOD
<form id="myform" method="post" action="?page=2">
<div class="myform">
<div class="formfield">
<div class="question"><label for="sv_01">Question?</label> <input type="text" name="sv_01" value="$sv_01" size="10" maxlength="10" /></div>
<div class="subquestion"><label for="sv_02">What Year?</label>
EOD;
echo '<select name="sv_02">';
$vars = array(
'-Year' => 'Year',
'-2012' => '2012',
'-2011' => '2011',
'-2010' => '2010',
'-2009' => '2009',
'-2008' => '2008',
'-2007' => '2007',
'-2006' => '2006',
'-2005' => '2005',
'Pre 2005' => 'Pre 2005',
);
foreach($vars as $val => $name){
if($_SESSION['sv_02'] == $val){
echo '<option value="' . substr($val, 0, 1) . '" selected>' . $name . '</option>';
} else {
echo '<option value="' . substr($val, 0, 1) . '">' . $name . '</option>';
}
}
echo '</select></div>';
echo <<<EOD
<div class="question"><br /> <label for="sv_04">Another question</label> <input type="text" name="sv_04" value="$sv_04" size="10" maxlength="10" />%</div>
<div class="subquestion"><label for="sv_07">When was the data collected?</label>
EOD;
echo '<select name="sv_07">';
$vars = array(
'-Month' => 'Month',
'-January' => 'January',
'-February' => 'February',
'-March' => 'March',
'-April' => 'April',
'-May' => 'May',
'-June' => 'June',
'-July' => 'July',
'-August' => 'August',
'-September' => 'September',
'-October' => 'October',
'-November' => 'November',
'-December' => 'December',
);
foreach($vars as $val => $name){
if($_SESSION['sv_07'] == $val){
echo '<option value="' . substr($val, 0, 1) . '" selected>' . $name . '</option>';
} else {
echo '<option value="' . substr($val, 0, 1) . '">' . $name . '</option>';
}
}
echo '</select><select name="sv_08">';
$vars = array(
'-Year' => 'Year',
'-2012' => '2012',
'-2011' => '2011',
'-2010' => '2010',
'-2009' => '2009',
'-2008' => '2008',
'-2007' => '2007',
'-2006' => '2006',
'-2005' => '2005',
'Pre 2005' => 'Pre 2005',
);
foreach($vars as $val => $name){
if($_SESSION['sv_08'] == $val){
echo '<option value="' . substr($val, 0, 1) . '" selected>' . $name . '</option>';
} else {
echo '<option value="' . substr($val, 0, 1) . '">' . $name . '</option>';
}
}
echo '</select></div>';
echo<<<EOD
<div class="continue"><input type="submit" value="Continue" /></div>
</div>
</div>
</form>
EOD;