За последние 24 часа нас посетили 23160 программистов и 1516 роботов. Сейчас ищут 887 программистов ...

Как причесать вывод данных в select?

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

  1. DarkSagittarius

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

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    Есть такая вот формочка, в ней мультиселект. Очень хочется цены выстроить в стройный столбик справа.


    [​IMG]


    Как это сделать? У меня пока только одна идея - считать количество символов наименования и за тем добавлять 40-%кол-во% неразрывных пробелов. Но как это реализовать технически, опять же, не знаю...


    Вот отрывок кода сейчас:
    Код (Text):
    1.  
    2. <select name="cable_order[]" multiple>
    3. <?php
    4.  
    5. $cables_list = $wpdb->get_results("SELECT
    6.             `ID`,
    7.             `post_title`,
    8.             `post_status`,
    9.             `post_type`
    10.             FROM `wp_posts` WHERE `post_type`='post' AND `post_status`='publish' ORDER BY post_title
    11.             ");
    12.            
    13.         foreach ( $cables_list as $cable_item ) {
    14.            
    15.             $cables_price = $wpdb->get_row("SELECT
    16.             `post_id`,
    17.             `meta_key`,
    18.             `meta_value`
    19.             FROM `wp_postmeta` WHERE `post_id`='$cable_item->ID' AND `meta_key`='price'
    20.             ");
    21.            
    22.            
    23.         echo "<option value=\"".$cable_item->post_title."\">".$cable_item->post_title."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(от ".$cables_price->meta_value." рублей за метр)</option>";
    24.        
    25.         }
    26.  
    27. ?>
    28. </select>
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    sprintf
     
  3. DarkSagittarius

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

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    прочитал мануал, но идеи не понял
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    %40s %40s - выведет через пробел 2 последовательности по 40 символов шириной, а потом меняйте пробелы на неразрывные
     
  5. DarkSagittarius

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

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    printf("<option value=\"[%40s]\"> %s (от %s рублей за метр)</option>",$cable_item->post_title,$cable_item->post_title,$cables_price->meta_value);
    сделал так. Вообще пробелы не добавляет. Или надо что-то еще сделать?

    Добавлено спустя 20 минут 26 секунд:
    Ура, сообразил! Правда не знаю, насколько правильно реализовал
    Код (Text):
    1.  
    2. $cable_item_title = sprintf("%-70s",$cable_item->post_title);
    3.        
    4.         $cable_item_title = str_replace(' ', '&nbsp;', $cable_item_title);
    5.            
    6.         printf("<option value=\"%s\"> %s (от %s рублей за метр)</option>",$cable_item->post_title,$cable_item_title,$cables_price->meta_value);  
    Добавлено спустя 1 минуту 35 секунд:
    [​IMG]

    Выходит не так ровно как хотелось бы... может есть вариант как сделать лучше?
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    <option value="$cable_item->post_title">str_replace(' ', '&nbsp;' sprintf('%40s %40s', $cable_item->post_title,$cables_price->meta_value))</option>
    примерно так. дальше разберетесь?
     
  7. DarkSagittarius

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

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    вроде уже и так получается то же самое по результату, но хотелось бы еще сделать цены строго в столбик
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    шрифт моноширинный ставьте
     
  9. DarkSagittarius

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

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    Courer New поставил, все равно все едет
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а, текст-то русский...
     
  11. DarkSagittarius

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

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    Никаких идей нет больше? :(
     
  12. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    без костыля не обойтись видимо. вот первое что в голову пришло. под вашу задачу нужно чуть переписать но идею сохранить

    $len = 40+mb_strlen(preg_replace("/[^а-я]*/i", '$1$1', $title));
    str_replace(' ', '&nbsp;', sprintf("%-{$len}s | %6s", $title, rand(100000,999999)));

    выводит чётко прилепленное влево название и через промежуток - столбец из 6-значных чисел.
    в стиле своего селекта не прописывал жестко шрифт. просто сказал моноспэйс