Всем привет. Стоит задача сделать неактивный option если расширение картинки меньше расширения option Проблема вся в проверке и хочется сделать как то по проще, может я туплю и самым оптимальным для меня остается этот способ Код (Text): <?php // получили расширение картинки $size = "1040x1040" ; // форма с проверкой echo '<form> <select name="size">' ; if($size > '1920x1200') { echo '<option disabled value="1920x1200">1920x1200</option>' ; } else { echo '<option value="1920x1200">1920x1200</option>' ; } // и т.д. echo '</select> </form>'; Проблема в том что размеры не генерируются циклом или еще как то, они просто прописаны в файле. Можно ли как то упростить проверку?
а куда он денется? Ну пока писал немного ошибся Код (Text): if($size > '1920x1200') { echo '<option value="1920x1200">1920x1200</option>' ; } else { echo '<option disabled value="1920x1200">1920x1200</option>' ; } на самом деле в этом все дело. Дело в том как упростить все это. Я уже подумываю регуляркой дергать расширения с option и прогонять через функцию, чтобы в идеале получить на выходе что то вроде того Код (Text): <option $disabled value="1920x1200">1920x1200</option>
А нет я слегка ошибся на глаз что называется определял... У тебя $size = "1921x1040" ; $size > '1920x1200' вернет true Это правильно? т.е. второй 1040 не проверяется.
да это правильно, этим я готов ограничиться пока что, потому что другого варианта проверки ширины и высоты не вижу, в смысле если еще и проверку по высоте сделать, то код который и так корявый, будет вобще корявым =) На данный момент хотелось бы сделать проверку именно 1921x1040, а не по ширине и высоте
Код (PHP): // получили расширение картинки $size = "1921x1201"; $screen_sizes = explode('x', $size); $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 1200) ? '' : 'disabled'; echo '<form> <select name="size">' ; echo '<option '.$disabled.' value="1920x1200">1920x1200</option>' ; // и т.д. echo '</select> </form>'; Так не подойдет? поменяй на $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 1200) ? 'disabled' : '';
c explode все понятно. Проблема буде опять в громозкости кода Хочется чтобы получилось так Код (Text): echo '<form> <select name="size">' ; echo '<option '.$disabled.' value="1920x1200">1920x1200</option>' ; echo '<option '.$disabled.' value="1920x1000">1920x1000</option>' ; echo '<option '.$disabled.' value="1920x100">1920x100</option>' ; echo '<option '.$disabled.' value="1030x1030">1040x1040</option>' ; echo '<option '.$disabled.' value="100x100">1000x1000</option>' ; echo '<option '.$disabled.' value="10000x10000">10000x10000</option>' ; echo '</select> </form>'; А с таким кодом получиться так Код (Text): $size = "1040x1040" ; $screen_sizes = explode('x', $size); echo '<form> <select name="size">' ; $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 1200) ? '' : 'disabled'; echo '<option '.$disabled.' value="1920x1200">1920x1200</option>' ; $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 1000) ? '' : 'disabled'; echo '<option '.$disabled.' value="1920x1000">1920x1000</option>' ; $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 100) ? '' : 'disabled'; echo '<option '.$disabled.' value="1920x100">1920x100</option>' ; $disabled = ($screen_sizes[0] > 1030 && $screen_sizes[1] > 1030) ? '' : 'disabled'; echo '<option '.$disabled.' value="1030x1030">1040x1040</option>' ; $disabled = ($screen_sizes[0] > 100 && $screen_sizes[1] > 100) ? '' : 'disabled'; echo '<option '.$disabled.' value="100x100">100x100</option>' ; $disabled = ($screen_sizes[0] > 10000 && $screen_sizes[1] > 10000) ? '' : 'disabled'; echo '<option '.$disabled.' value="10000x10000">10000x10000</option>' ; echo '</select> </form>'; просто будет более 30 расширений и будет громозко очень
Код (PHP): $size = "1040x1040" ; $select_size = array('1920x1200', '1920x1000', '1920x100', '1030x1030', '100x100', '10000x10000'); $screen_sizes = explode('x', $size); echo '<form> <select name="size">' ; for($i=0; $i < count($select_size); $i++){ $allowed_size = explode('x', $select_size[$i]); $disabled = ($screen_sizes[0] > $allowed_size[0] && $screen_sizes[1] > $allowed_size[1]) ? 'disabled' : ''; echo '<option '.$disabled.' value="'.$select_size[$i].'">'.$select_size[$i].'</option>'; } echo '</select> </form>'; ?
в массив не могу загнать так как присутствует optgroup для некоторых расширений я вот думаю сделать так то так Код (Text): function detect($id) { // $id - расширение каждого option // $size - выбрали расширение картинки из базы $size = "1920x1200" ; // Получили в массив, высоту и ширину $screen_sizes = explode('x', $size) ; // Получили данные из option $option = explode('x', $id) ; // Делаем проверку $disabled = ($screen_sizes[0] > $option[0] && $screen_sizes[1] > $option[1]) ? 'disabled' : ''; return $disabled ; } function size() { $out = '<form> <select name="size"> <option '.detect($disabled).' value="1920x1200">1920x1200</option> <option '.detect($disabled).' value="1920x1000">1920x1000</option> <option '.detect($disabled).' value="1920x100">1920x100</option> <option '.detect($disabled).' value="1030x1030">1040x1040</option> <option '.detect($disabled).' value="100x100">100x100</option> <option '.detect($disabled).' value="10000x10000">10000x10000</option> </select> </form>' ; return $out ; } правда работоспособность пока не проверял, но думаю в эту сторону нужно кумекать, более правильно будет я думаю вместо Код (Text): '.detect($disabled).' это Код (Text): '.detect('расширение').' Уже просто запарился, надо перекурить =)
Код (PHP): function disabled($size, $select_size){ $allowed_size = explode('x', $select_size); $screen_sizes = explode('x', $size); $disabled = ($screen_sizes[0] > $allowed_size[0] && $screen_sizes[1] > $allowed_size[1]) ? 'disabled' : ''; return $disabled; } $size = "1040x1040" ; echo '<form> <select name="size">' ; echo "\n".'<option '.disabled($size, '1920x1200').' value="1920x1200">1920x1200</option>' ; echo "\n".'<option '.disabled($size, '1920x1000').' value="1920x1000">1920x1000</option>' ; echo "\n".'<option '.disabled($size, '1920x100').' value="1920x100">1920x100</option>' ; echo "\n".'<option '.disabled($size, '1030x1030').' value="1030x1030">1030x1030</option>' ; echo "\n".'<option '.disabled($size, '100x100').' value="100x100">100x100</option>' ; echo "\n".'<option '.disabled($size, '10000x10000').' value="10000x10000">10000x10000</option>' ; echo '</select> </form>'; Так что ли хочешь? Не гибко как-то...
ну да, как то так, только вместо Код (Text): $disabled = ($screen_sizes[0] > $allowed_size[0] && $screen_sizes[1] > $allowed_size[1]) ? 'disabled' : ''; Код (Text): $disabled = ($screen_sizes[0] >= $allowed_size[0] && $screen_sizes[1] >= $allowed_size[1]) ? '' : 'disabled' ; А почему не гибко? smitt, спасибо за помощь =)
По моему название темы не соответствует вопросу. Не расширение, а разрешение ))) Сравнивать размеры картинок в таком формате можно функцией version_compare. Она как раз проверяет числа-из-строки попарно. Пример: version_compare('1024x640', '1024x600') вернет 1. или так version_compare('1024x640', '1024x600', '>') вернет TRUE Код (PHP): foreach ($sizes as $s) { if (чего_то_там_про_optgroup) { echo про_optgroup; } else { echo '<option '.(version_compare($size, $s, '>') ? DISABLED : '').' value="' . $s . '">' . $s . '</option>' ; } } где DISABLED — заранее объявленная константа, сами знаете какая ))
artoodetoo, циклом перебирать не вариант, у меня там еще optgroup, в котором отсортированы разрешения, в прочим есть еще куда подумать, буду кумекать, пока что оставлю предыдущий вариант. У меня возникла следующая проблема, с js у меня тоскливо. Вобщем есть кусок кода js который определяет разрешение монитора Код (Text): <script> var sel_resolution = screen.width+"x"+screen.height; $("#size").val(sel_resolution); </script>'; и проблема в следующем Если в форме у разрешения прописан disabled и это разрешение монитора, то он его все равно выбирает Код (Text): <form> <select id="size"> <option value="1400x1050">1400x1050</option> <option disabled value="1280x960">1280x960</option> <option value="1024x768">1024x768</option> </select> </form> Как сделать, чтобы если у меня монитор 1280x960 и в форме стоит disabled у 1280x960, то выбралось следующее разрешение, а именно 1024x768 ?