PHP と HTML を分離しようとしています。PHP 変数の配列を HTML コードに渡しています。選択ドロップダウンを作成し、変数に基づいて特定のオプションを選択しようとしています。このような:
//example vars from PHP array (uses magic getter and accessed by $this->varName)
//$array = array('aaa' => '123', 'bbb' => '456', 'ccc' => '789');
//$selected = 'bbb';
<select name="name" id="id">
<option value="0">Choose n Option</option>
<?
foreach($this->array as $key => $value)
{
?>
//$selected may not be set
<option value="<?=$key?>" <? echo isset($this->selected) ? (strcmp($key,$this->selected)==0 ? 'selected' : '') : '' ?> ><?=$value?></option>
<?
}
?>
</select>
結果は次のとおりです。
<select name="name" id="id">
<option value="0">Choose an Option</option>
<option value="aaa" >123</option>
<option value="bbb" selected >456</option> //'selected' determined by code above
<option value="ccc" >789</option>
</select>
どのオプションを選択するべきかを書く方が良い方法はありますか? PHP を使用するか、ロジックを変更しますか? <? echo isset($this->selected) ? (strcmp($key,$this->selected)==0 ? 'selected' : '') : '' ?>
非常に読みにくいようです。HTML/view コードでネストされたループと if を使用する必要がある状況で、特にこのような HTML タグ内でコードを記述するより良い方法があるかどうかを知りたいです。
<? echo isset($this->selected) ? (strcmp($key,$this->selected)==0 ? 'selected' : '') : '' ?>
の結果を変数に入れることを考えました。
$newSelectVar = <? echo isset($this->selected) ? (strcmp($key,$this->selected)==0 ? 'selected' : '') : '' ?>;
<option value="<?=$key?>" <?=$newSelectVar?> ><?=$value?></option>
私はインライン PHP のみを使用しようとしていたため、これを行いたくありませんでした (これにより、HTML がより読みやすく、保守しやすくなります) foreach
。