За последние 24 часа нас посетили 60903 программиста и 1743 робота. Сейчас ищет 841 программист ...

Проверка расширения и неактивный option

Тема в разделе "PHP для новичков", создана пользователем viphost, 2 дек 2012.

  1. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    Всем привет.
    Стоит задача сделать неактивный option если расширение картинки меньше расширения option
    Проблема вся в проверке и хочется сделать как то по проще, может я туплю и самым оптимальным для меня остается этот способ
    Код (Text):
    1.  
    2. <?php
    3. // получили расширение картинки
    4. $size = "1040x1040" ;
    5. // форма с проверкой
    6. echo '<form>
    7. <select name="size">' ;
    8.   if($size > '1920x1200') {
    9.     echo '<option disabled value="1920x1200">1920x1200</option>' ;
    10.   } else {
    11.   echo '<option value="1920x1200">1920x1200</option>' ;
    12.   }
    13.    // и т.д.
    14. echo '</select>
    15. </form>';
    Проблема в том что размеры не генерируются циклом или еще как то, они просто прописаны в файле.
    Можно ли как то упростить проверку?
     
  2. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А он у тебя разве работает???

    Он всегда возвращает true
     
  3. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    а куда он денется?
    Ну пока писал немного ошибся
    Код (Text):
    1. if($size > '1920x1200') {
    2.     echo '<option value="1920x1200">1920x1200</option>' ;
    3.   } else {
    4.   echo '<option disabled value="1920x1200">1920x1200</option>' ;
    5.   }
    на самом деле в этом все дело. Дело в том как упростить все это.
    Я уже подумываю регуляркой дергать расширения с option и прогонять через функцию, чтобы в идеале получить на выходе что то вроде того
    Код (Text):
    1. <option $disabled value="1920x1200">1920x1200</option>
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А нет я слегка ошибся на глаз что называется определял...
    У тебя
    $size = "1921x1040" ;
    $size > '1920x1200' вернет true
    Это правильно? т.е. второй 1040 не проверяется.
     
  5. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    да это правильно, этим я готов ограничиться пока что, потому что другого варианта проверки ширины и высоты не вижу, в смысле если еще и проверку по высоте сделать, то код который и так корявый, будет вобще корявым =)
    На данный момент хотелось бы сделать проверку именно 1921x1040, а не по ширине и высоте
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Код (PHP):
    1. // получили расширение картинки
    2. $size = "1921x1201";
    3. $screen_sizes = explode('x', $size);
    4. $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 1200) ? '' : 'disabled';
    5.  
    6. echo '<form>
    7. <select name="size">' ;
    8.     echo '<option '.$disabled.' value="1920x1200">1920x1200</option>' ;
    9.     
    10.    // и т.д.
    11. echo '</select>
    12. </form>';
    13.  
    Так не подойдет?

    поменяй на
    $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 1200) ? 'disabled' : '';
     
  7. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    c explode все понятно.
    Проблема буде опять в громозкости кода
    Хочется чтобы получилось так
    Код (Text):
    1. echo '<form>
    2. <select name="size">' ;
    3.     echo '<option '.$disabled.' value="1920x1200">1920x1200</option>' ;
    4.     echo '<option '.$disabled.' value="1920x1000">1920x1000</option>' ;
    5.     echo '<option '.$disabled.' value="1920x100">1920x100</option>' ;
    6.     echo '<option '.$disabled.' value="1030x1030">1040x1040</option>' ;
    7.     echo '<option '.$disabled.' value="100x100">1000x1000</option>' ;
    8.     echo '<option '.$disabled.' value="10000x10000">10000x10000</option>' ;
    9. echo '</select>
    10. </form>';
    А с таким кодом получиться так
    Код (Text):
    1. $size = "1040x1040" ;
    2. $screen_sizes = explode('x', $size);
    3. echo '<form>
    4. <select name="size">' ;
    5.     $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 1200) ? '' : 'disabled';
    6.         echo '<option '.$disabled.' value="1920x1200">1920x1200</option>' ;
    7.     $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 1000) ? '' : 'disabled';
    8.         echo '<option '.$disabled.' value="1920x1000">1920x1000</option>' ;
    9.     $disabled = ($screen_sizes[0] > 1920 && $screen_sizes[1] > 100) ? '' : 'disabled';
    10.         echo '<option '.$disabled.' value="1920x100">1920x100</option>' ;
    11.     $disabled = ($screen_sizes[0] > 1030 && $screen_sizes[1] > 1030) ? '' : 'disabled';
    12.         echo '<option '.$disabled.' value="1030x1030">1040x1040</option>' ;
    13.     $disabled = ($screen_sizes[0] > 100 && $screen_sizes[1] > 100) ? '' : 'disabled';
    14.         echo '<option '.$disabled.' value="100x100">100x100</option>' ;
    15.     $disabled = ($screen_sizes[0] > 10000 && $screen_sizes[1] > 10000) ? '' : 'disabled';
    16.         echo '<option '.$disabled.' value="10000x10000">10000x10000</option>' ;
    17. echo '</select>
    18. </form>';
    просто будет более 30 расширений и будет громозко очень
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    На самом деле это правильно. true будет если хотя бы один параметр больше лимита, и это верно же.
     
  9. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Код (PHP):
    1. $size = "1040x1040" ;
    2. $select_size = array('1920x1200', '1920x1000', '1920x100', '1030x1030', '100x100', '10000x10000');
    3. $screen_sizes = explode('x', $size);
    4. echo '<form>
    5. <select name="size">' ;
    6.  
    7.  
    8. for($i=0; $i < count($select_size); $i++){
    9.     $allowed_size = explode('x', $select_size[$i]);
    10.     $disabled = ($screen_sizes[0] > $allowed_size[0] && $screen_sizes[1] > $allowed_size[1]) ? 'disabled' : '';
    11.     echo '<option '.$disabled.' value="'.$select_size[$i].'">'.$select_size[$i].'</option>';
    12. }
    13. echo '</select>
    14. </form>';
    15.  
    ?
     
  10. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    в массив не могу загнать так как присутствует optgroup для некоторых расширений
    я вот думаю сделать так то так
    Код (Text):
    1. function detect($id) {
    2.     // $id - расширение каждого option
    3.     // $size - выбрали расширение картинки из базы
    4.     $size = "1920x1200" ;
    5.     // Получили в массив, высоту и ширину
    6.     $screen_sizes = explode('x', $size) ;
    7.    
    8.     // Получили данные из option
    9.     $option = explode('x', $id) ;
    10.     // Делаем проверку
    11.     $disabled = ($screen_sizes[0] > $option[0] && $screen_sizes[1] > $option[1]) ? 'disabled' : '';
    12.    
    13.     return $disabled ;
    14. }
    15.  
    16. function size() {
    17.     $out = '<form>
    18. <select name="size">
    19.         <option '.detect($disabled).' value="1920x1200">1920x1200</option>
    20.         <option '.detect($disabled).' value="1920x1000">1920x1000</option>
    21.         <option '.detect($disabled).' value="1920x100">1920x100</option>
    22.         <option '.detect($disabled).' value="1030x1030">1040x1040</option>
    23.         <option '.detect($disabled).' value="100x100">100x100</option>
    24.         <option '.detect($disabled).' value="10000x10000">10000x10000</option>
    25.         </select>
    26. </form>' ;
    27.  
    28.     return $out ;
    29.  
    30. }
    правда работоспособность пока не проверял, но думаю в эту сторону нужно кумекать, более правильно будет я думаю
    вместо
    Код (Text):
    1.  '.detect($disabled).'
    это
    Код (Text):
    1.  '.detect('расширение').'
    Уже просто запарился, надо перекурить =)
     
  11. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Код (PHP):
    1. function disabled($size, $select_size){
    2.     $allowed_size = explode('x', $select_size);
    3.     $screen_sizes = explode('x', $size);
    4.     $disabled = ($screen_sizes[0] > $allowed_size[0] && $screen_sizes[1] > $allowed_size[1]) ? 'disabled' : '';
    5.     
    6.     return $disabled;
    7. }
    8.  
    9. $size = "1040x1040" ;
    10.  
    11. echo '<form>
    12. <select name="size">' ;    
    13.         echo "\n".'<option '.disabled($size, '1920x1200').' value="1920x1200">1920x1200</option>' ;    
    14.         echo "\n".'<option '.disabled($size, '1920x1000').' value="1920x1000">1920x1000</option>' ;    
    15.         echo "\n".'<option '.disabled($size, '1920x100').' value="1920x100">1920x100</option>' ;
    16.         echo "\n".'<option '.disabled($size, '1030x1030').' value="1030x1030">1030x1030</option>' ;    
    17.         echo "\n".'<option '.disabled($size, '100x100').' value="100x100">100x100</option>' ;    
    18.         echo "\n".'<option '.disabled($size, '10000x10000').' value="10000x10000">10000x10000</option>' ;
    19. echo '</select>
    20. </form>';
    21.  
    Так что ли хочешь? Не гибко как-то...
     
  12. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    ну да, как то так, только вместо
    Код (Text):
    1. $disabled = ($screen_sizes[0] > $allowed_size[0] && $screen_sizes[1] > $allowed_size[1]) ? 'disabled' : '';
    Код (Text):
    1. $disabled = ($screen_sizes[0] >= $allowed_size[0] && $screen_sizes[1] >= $allowed_size[1]) ? '' : 'disabled' ;
    А почему не гибко?

    smitt, спасибо за помощь =)
     
  13. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Ну если option будет не много то все ok...
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    По моему название темы не соответствует вопросу. Не расширение, а разрешение )))

    Сравнивать размеры картинок в таком формате можно функцией version_compare. Она как раз проверяет числа-из-строки попарно. Пример:
    version_compare('1024x640', '1024x600') вернет 1. или так
    version_compare('1024x640', '1024x600', '>') вернет TRUE

    Код (PHP):
    1. foreach ($sizes as $s) {
    2.     if (чего_то_там_про_optgroup) {
    3.         echo про_optgroup;
    4.     } else {
    5.         echo '<option '.(version_compare($size, $s, '>') ? DISABLED : '').' value="' . $s . '">' . $s . '</option>' ;
    6.     }
    7. }
    8.  
    где DISABLED — заранее объявленная константа, сами знаете какая ))
     
  15. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    artoodetoo, циклом перебирать не вариант, у меня там еще optgroup, в котором отсортированы разрешения, в прочим есть еще куда подумать, буду кумекать, пока что оставлю предыдущий вариант.
    У меня возникла следующая проблема, с js у меня тоскливо.
    Вобщем есть кусок кода js который определяет разрешение монитора
    Код (Text):
    1. <script>
    2.                             var sel_resolution = screen.width+"x"+screen.height;
    3.                             $("#size").val(sel_resolution);
    4.                         </script>';
    и проблема в следующем
    Если в форме у разрешения прописан disabled и это разрешение монитора, то он его все равно выбирает
    Код (Text):
    1. <form>
    2. <select id="size">
    3. <option value="1400x1050">1400x1050</option>
    4. <option disabled value="1280x960">1280x960</option>
    5. <option value="1024x768">1024x768</option>
    6. </select>
    7. </form>
    Как сделать, чтобы если у меня монитор 1280x960 и в форме стоит disabled у 1280x960, то выбралось следующее разрешение, а именно 1024x768
    ?