#php #html #select #option
#php #HTML #html-select
Вопрос:
Я работаю над перепроектированием несколько плохо спроектированной системы и столкнулся со следующей проблемой. У меня есть поле времени, в котором пользователь может выбрать час, минуту и часовой пояс для события. Это делается с помощью выпадающего меню выбора HTML с несколькими различными опциями. Мой предшественник счел необходимым дать людям возможность выбирать точную минуту, тогда как в моем конкретном приложении будет достаточно 15-минутных приращений (не говоря уже о том, чтобы сделать список примерно в миллион раз проще для навигации для пользователей).
Проблема, с которой я столкнулся, заключается в следующем: если событие было создано, чтобы произойти, скажем, в 1:17 вечера ранее, но 17 больше не находится в выпадающем меню my minute, в нем будет отображаться опция по умолчанию —select— . Но я бы предпочел, чтобы в этих случаях 17 отображались в меню и были выбраны по умолчанию. Моя проблема в том, что я не знаю, как точно проверить, существует ли мое значение minute уже в списке, а затем добавить его, если это не так. Я полагаю, что я мог бы создавать массив PHP параллельно с моими выпадающими опциями, но я бы предпочел иметь возможность просматривать список опций напрямую и определять, есть ли значение уже там, если да, то двигаться дальше, если не добавлять его в конец. Есть ли способ получить такую информацию из HTML-объекта в PHP?
Ответ №1:
Нет, вы не можете получить доступ к этой информации из PHP. Единственное, что вы могли бы сделать, это буферизировать отправляемый вами HTML-код, а затем использовать DOM для доступа к раскрывающемуся списку. Но я предлагаю вам использовать php-массив, как вы упомянули, и создать из него выпадающий список.
$values = array(0,15,30,45);
if(!in_array($values, $minute)) {
$values[] = $minute;
}
// Generate select box..
[...]
Ответ №2:
Вы можете использовать модуль (%), чтобы определить, делится ли значение на 15 (при условии, что вы используете минуты 0, 15, 30 и 45 в новом списке), например
if($value !== 0 amp;amp; $value % 15 !== 0) { // add it to the list }
Ответ №3:
Нет, если не считать синтаксического анализа вашего HTML с помощью анализатора PHP и получения значений, нет хорошего способа узнать это заранее. Лучшим решением для этого было бы иметь массив со значениями в вашем выпадающем списке и сверяться с этим массивом.
В качестве альтернативы я бы предложил выбрать ближайшее из новых возможных значений к предыдущему выбору пользователя. Вы могли бы получить это так:
round($minute, 15) * 15; //14 will give 15, 35 will give 30, etc
Ответ №4:
Почему бы вам просто не создать весь объект (select / option) и удалить его с имеющейся у вас веб-страницы? У вас все равно будет HTML-страница. Вы просто не помещаете HTML для выбора / опции заранее. Вы создаете его в PHP и помещаете на страницу.
Вы используете PHP для определения значений, которые должны быть в опции.
Ответ №5:
PHP запускается во время рендеринга HTML, если вы хотите изменить a <select>
с помощью PHP, этот рендеринг должен быть выполнен до представления списка. Ваше лучшее решение — создать массив и добавить туда свое пользовательское значение.
define('DEFAULT_SELECT', array(0, 15, 30, 45));
...
$select_options = DEFAULT_SELECT;
if (!in_array($new_option, $select_options)) { array_push($new_option, $select_options)); }