Заменить числовой интервал текстовым интервалом

Я редактировал и очищал код в бухгалтерском приложении для компании, с которой я работаю. Когда пользователи регистрируются, они сообщают нам, как часто проверять свои учетные записи на наличие новой информации. На данный момент он использует числовой выпадающий список от 1 до 30 дней, основанный на дате их регистрации. Код ниже.

<div class="{{ $class }}">
<label for="syst_interval">How often do you want us to scan your account?</label>

<?php $value = ($user->syst_settings->syst_interval) ?: Input::old('syst_interval'); ?>
<select name="syst_interval" id="syst_interval" class="form-control">
<option value="0">Select value</option>
@for( $i=0; $i<30; $i++ )
<?php if( $value == ($i+1) ) $selected = 'selected'; else $selected = false; ?>
<option value="{{$i+1}}" {{$selected}}>{{$i+1}}</option>
@endfor
</select>

@if( $errors->has('syst_interval') )
@foreach( $errors->get('syst_interval') as $error )
<span class="help-block">{{ $error }}</span>
@endforeach
@endif
</div>

Мы хотим изменить интервал на следующие параметры: каждый день (1), каждую неделю (7), каждые две недели (14) и каждый месяц (28).
Каков наилучший способ сделать это? Я понимаю, что это может быть невозможно без существенного пересмотра некоторого кода.
Спасибо

3

Решение

Поскольку ваши параметры уже основаны на числовых значениях, почему бы просто не записать параметры?

<select name="syst_interval" id="syst_interval" class="form-control">
<option value="0">Select value</option>
<option<?php if($value == 1) echo ' selected="selected"' ?> value="1">Every day</option>
<option<?php if($value == 7) echo ' selected="selected"' ?> value="7">Every week</option>
<option<?php if($value == 14) echo ' selected="selected"' ?> value="14">Every fortnight</option>
<option<?php if($value == 28) echo ' selected="selected"' ?> value="28">Every month</option>
</select>

Доступные опции в любом случае жестко запрограммированы, а цикл for просто для удобства, не нужно никаких модных штучек для динамических вещей 🙂

И если вы действительно ненавидите это таким образом, просто определите массив и передайте по нему, например:

<?php
$options = array(0 => 'Choose a value', 1 => 'Every day', 7 => 'every Week', 14 => 'every fortnight', '28' => 'every month');
?>

<select name="syst_interval" id="syst_interval" class="form-control">

<?php
foreach($options as $key => $text)
{
echo '<option value="' . $key . '"';
print $key == $value ? ' selected="selected"' : '';
echo '>' . $text . '</option>';
}
?>
</select>
0

Другие решения

Поскольку у вас уже есть «определенные человеком» интервалы, вы должны жестко закодировать параметры в представлении следующим образом:

<select name="syst_interval" id="syst_interval" class="form-control">
<option value="0">Select value</option>
<option value="1" <?= ( $value == 1 ) ?'selected':'' ?>  >Everyday</option>
<option value="7" <?= ( $value == 7 ) ?'selected':'' ?>  >Every week</option>
<option value="14" <?= ( $value == 14 ) ?'selected':'' ?>  >Every forthnight</option>
<option value="28" <?= ( $value == 28) ?'selected':'' ?>  >Every month</option>
</select>
0

По вопросам рекламы [email protected]