Создание коробки отбора день месяца


 <select name="checkInDay" tabindex="3" onchange="calcDay();" class="ffe selectform" id="checkInDate">
    <?php for($i=1;$i<=31;$i++) {
        $value = $i < 10 ? "0".$i : $i;
     ?> 
     <option value="<?= $value ?>" <?php if($i == 12) {?> selected="selected" <?php } ?> > <?= $i ?> </option>
     <?php } ?>

  </select>


298
1
задан 14 июня 2011 в 12:06 Источник Поделиться
Комментарии
2 ответа

Я предлагаю построить функции, которые могут быть использованы для вариантов:

function select_options($options, $selected = null) {
$_options = '';
foreach ($options as $value => $content) {
$_options .= sprintf("<option value=\"%s\"%s>%s</option>\n", $value, $value == $selected ? ' selected="selected"' : '', $content);
}

return $_options;
}

И некоторые PHP "магия" для создания ценности, но это не действительно необходимо:

<?php $values = array_map(create_function('&$v', 'return sprintf("%02d", $v);'), range(1, 31)) ?>
<select name="checkInDay" tabindex="3" onchange="calcDay();" class="ffe selectform" id="checkInDate">
<?php echo select_options(array_combine($values, range (1, 31)), 12) ?>
</select>

Но что еще важнее: в HTML шаблона, использовать в PHP альтернативной нотации.

5
ответ дан 14 июня 2011 в 01:06 Источник Поделиться

Удалить Магических Чисел

Что значит "12" представляете? Почему это выбранное значение?

А не оставлять это как есть, я настоятельно рекомендую заменить его на более описательное постоянной.

Бизнес-Логика

Это может или не может быть что-то стоящие изменения. Это действительно зависит от того, что эта капля-вниз используется для.

Есть ли смысл для этого, чтобы 31 числа перечисленных?

Похоже, вариант 31 будет иметь смысл только в течение нескольких месяцев, в то время как варианты 1 - 28 имеет смысла для всех месяцев. Это используется рядом с месяцем падение-вниз? Если так, возможно, оно должно динамически обновляться на основе выбранного месяца. Если нет, пожалуй, вариантов должно быть от 1 - 28, а затем в последний вариант, "последний день месяца".

Если вы держите его как есть, просто будьте уверены, чтобы быть понятным для пользователей, что будет через месяц, как февраль, если они выберите 30.

Короткие Теги

Я бы лично не использовать короткие теги.

Для получения дополнительной информации см.
https://stackoverflow.com/questions/200640/are-php-short-tags-acceptable-to-use

Форматирование Текста

Чтобы дополнить свой число с ведущими нулями, использовать встроенные функции.

Как @spookycoder предложил:

$value = sprintf("<option value=\"%02d\"", $i);

Код Читается Намного Больше, Чем Написано

Сделать код настолько ясно, насколько это возможно. Как @Кевен рекомендуется использовать в PHP альтернативной нотации.

Дело вкуса

Пока это просто мои предпочтения, я бы также рассмотреть вопрос о переносе ли опция отключить опцию HTML строки.

<?php 
if ($day == DEFAULT_CHECK_IN_DAY): // Changed $i to $day and made 12 a const for clarity
$selected = ' selected="selected"';
else:
$selected = '';
endif;
?>
<option value="<?php echo sprintf("%02d", $day) ?>"<?php echo $selected ?>>
<?php echo $day ?>
</option>

2
ответ дан 15 июня 2011 в 06:06 Источник Поделиться