За последние 24 часа нас посетили 18788 программистов и 1650 роботов. Сейчас ищут 1725 программистов ...

из MySQL в 3 тега <TD></TD>

Тема в разделе "Вопросы от блондинок", создана пользователем Nikola, 25 ноя 2006.

  1. avm

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

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    Вот изначально ведь хотел написать:
    PHP:
    1. print_r(array_chunk($array,3));
    , отсюда и непонимания...
    Своим предложением я показал лишь возможность простой подготовки данных для последующего (я просто уверен, что задача, как всегда, не точно такая как ее сформулировали в запросе) их использования...
    А то что данные можно сразу выводить по мере чтения, нарисовал (пусть не совсем так я бы например делал) draak еще на первой странице...
     
  2. А я своим предложением хотел показать, что в данном случае никакой подготовки данных а) не нужно и б) она только вредит.
     
  3. avm

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

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    Чебурген, посмотрите последнее предложение на первой странице этой темы, за которым и идет мой вариант, и вам сразу станет понятно почему я вообще ввязался в эту тему.
     
  4. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Если это о фразе
    То себе я сделал почти так. (критика приветсвуется)
    PHP:
    1. <?php
    2. $cols = 3;
    3.  
    4. echo '<table>';
    5. do {
    6.     echo '<tr>';
    7.     for ($i=0; $i<$cols; $i++) {
    8.         echo '<td>' . (($data = mysql_fetch_assoc($result)) ? $data['text'] : '-') . '</td>';
    9.     }
    10.     echo '</tr>';
    11. } while ($data);
    12. echo '</table>';
    13. ?>
     
  5. Отлично. Это даже лучше, чем то, что я предлагал. У меня вместо while был for. для которого надо определять размер данных. А тут - просто шикарный выход из цикла.
    Единственная проблема - это когда в базе нет ни одной строчки. Но это обычно обходится проверкой и выводом сообщения о том, что нет данных.
    Ну, или, всё-таки, цикл while .. do, а по отсутствию $data - break

    А вообще, вчера весь день я хотел написать о том, что преимущество вывода напрямую из мускуля, а не из массива - фикция ;-)
    Все равно ведь, никто уже давно не выводит данные напрямую, а делает это через шаблон. То есть, массив, все же, нужен.
    А так же получается, что задача в итоге делится на две:
    1. получить массив в удобной форме
    2. прописать логику вывода этого масссива в шаблоне.

    а здесь уже, как мне кажется, подойдут оба подхода. для заполнения массива - функция Vladson-а, ну а вывод - что-то подобное коду avm в синтаксисе любимого шаблонизатора. Тем более, что все пустые места при подготовке заполнены. Хотя... чёрт, что выводить на месте пустых ячеек - это должен писать верстальщик. так что, проверку на пустоту придется в шаблоне писать тоже.
     
  6. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Тогда он выведет один пустой ряд, что в принципе не плохо...
    Это как раз один из тех случаев когда использование "шаблонизации" заганяет в ступор, с одной стороны это должен решать шаблон, с другой стороны логики в шаблоне быть недолжно...
     
  7. это ужасно. с точки зрения юзабилити.
    но если кто-то считает, что пустая строка лучше - пусть делает с ней. это мелочи.
    тебя обманули.
    Может быть, и не должно, но она в шаблоне есть. Всегда.
    Никакого ступора нету. В шаблоне прописывается весь вывод, который производится на странице, и который не содержится в БД. Точка.
    В противном случае смысл шаблонизации теряется полностью.
     
  8. Anonymous

    Anonymous Guest

    Согласен. Надо логику приложения отделять от логики отображения, а не вообще логику от отображения... Но все равно, смарти это зло =) *Холивар*
     
  9. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Это легко обходится
    Одно дело логика в шаблоне, другое дело логика такого уровня !!! (логика логике рознь)

    И то и другое элементарно обходится занесением информации не в браузер а в массив (/шаблонизатор) о чём и было не раз упомянуто
     
  10. Расскажи это авторам и пользователям XSLT. кода они тебе поверят - соглашусь и я. Не раньше.
    Скрипт заносит в массив только данные из БД. Те данные, которые скрипт не занес, прописываются в шаблоне. в том числе - и содержимое пустых ячеек (к примеру, гифчик "нет информации").
     
  11. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Я не понял мы всё ещё о моём скрипте в 10 строчек говорим или разводим флуд на тему XSLT vs Smarty и.т.д. ?

    (я не против логики в шаблонах, просто я против сложных конструкций в шаблоне)
     
  12. Разводим флуд. =)
    Я считаю, что ошаблонах поговорить полезнее, чем обсасывать три страницы тему "как посчитать до трёх и поставить перевод строки".
    Если тема интересна посетителям - почему бы её не обсудить?

    Тем более, что это не флуд, а тема важная и насущная.
    Ну, во всяком случае - для меня.
    Вот, тут некоторые считают, что я теоретик. И вот в своей теоретической практике я сталкиваюсь с поддержанием одного и того же скрипта на разных сайтах. поддержка включает в себя периодические обновления.
    И вот всего пара обновлений привела меня к железобетнному выводу: в коде не прописывается ни одного слова, выводимого на экран.
    Задача кода - взять данные из бд и натянуть на них шаблон. Весь html, весь, до последней запятой, прописан в шаблоне. В результате для обновления проги мне достаточно залить один и тот же программный модуль на все хосты.
    И вот это удобство, скажу я тебе, куда важнее, чем теоретические рассуждения о том, что должно быть в шаблоне, а чего - нет.
     
  13. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Тогда не нужно отталкиваться от моего скрипта в 10 строчек в котором while служит и шаблонизатором и шаблоном и логикой одновременно, наличие у него недостатков очевидно...

    Это известно всем нормальным практикам, только в отличии от теоретиков не многим удаётся этого добиться :)

    Именно по этому писать для себя это одно, а на публику это другое. (всегда найдётся хоть кто нибудь кто с тобой не согласен)
     
  14. Ну, дядя, который присматривает за оформительской частью сайтов, и клепает новые, будучи дизайнером до мозга костей, как-то справляется с логикой в шаблонах. Даже с мелкой.
    поскольку он давно понял - если логики не будет в шаблоне, то она уедет в скрипт. А скрипты его пугают гораздо больше. Как и то, что оформление вместе со скриптом перезапишется.
     
  15. draak

    draak Guest

    PHP:
    1. <?php
    2.  
    3. function html_table($jloop, $cols = 3, $rows = 3, $table_attr = 'border="1"', $tr_attr = '', $td_attr = '', $trailpad = '&nbsp;', $vdir = 'down', $hdir = 'right', $inner = 'cols')
    4.   {
    5.    
    6.     $params['loop'] = $jloop;
    7.  
    8.     if (!isset($params['loop'])) {
    9.         echo("html_table: missing 'loop' parameter");
    10.         return;
    11.     }
    12.  
    13.     foreach ($params as $_key=>$_value) {
    14.         switch ($_key) {
    15.             case 'loop':
    16.                 $$_key = (array)$_value;
    17.                 break;
    18.  
    19.             case 'cols':
    20.             case 'rows':
    21.                 $$_key = (int)$_value;
    22.                 break;
    23.  
    24.             case 'table_attr':
    25.             case 'trailpad':
    26.             case 'hdir':
    27.             case 'vdir':
    28.             case 'inner':
    29.                 $$_key = (string)$_value;
    30.                 break;
    31.  
    32.             case 'tr_attr':
    33.             case 'td_attr':
    34.                 $$_key = $_value;
    35.                 break;
    36.         }
    37.     }
    38.  
    39.     $loop_count = count($loop);
    40.     if (empty($params['rows'])) {
    41.         /* no rows specified */
    42.         $rows = ceil($loop_count/$cols);
    43.     } elseif (empty($params['cols'])) {
    44.         if (!empty($params['rows'])) {
    45.             /* no cols specified, but rows */
    46.             $cols = ceil($loop_count/$rows);
    47.         }
    48.     }
    49.  
    50.     $output = "<table $table_attr>\n";
    51.  
    52.     for ($r=0; $r<$rows; $r++) {
    53.         $output .= "<tr" . html_table_cycle('tr', $tr_attr, $r) . ">\n";
    54.         $rx =  ($vdir == 'down') ? $r*$cols : ($rows-1-$r)*$cols;
    55.  
    56.         for ($c=0; $c<$cols; $c++) {
    57.             $x =  ($hdir == 'right') ? $rx+$c : $rx+$cols-1-$c;
    58.             if ($inner!='cols') {
    59.                 /* shuffle x to loop over rows*/
    60.                 $x = floor($x/$cols) + ($x%$cols)*$rows;
    61.             }
    62.  
    63.             if ($x<$loop_count) {
    64.                 $output .= "<td" . html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n";
    65.             } else {
    66.                 $output .= "<td" . html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n";
    67.             }
    68.         }
    69.         $output .= "</tr>\n";
    70.     }
    71.     $output .= "</table>\n";
    72.    
    73.     return $output;
    74. }
    75.  
    76. function html_table_cycle($name, $var, $no)
    77.   {
    78.     if(!is_array($var)) {$ret = $var;} else {$ret = $var[$no % count($var)];}
    79.     return ($ret) ? ' '.$ret : '';
    80.   }
    81.  
    82. ?>
    83.  
    84. Пример использования
    85. - выведит массив
    86. - в три колонки
    87. - ...хз что
    88. - с атрибутом border="1"
    89. - tr атрибуты
    90. - td атрибуты
    91. - с "..." в пустых ячейках если такие будут
    92. - выравнивание вниз
    93. - направления масива свреху вниз
    94. - направление массива направо
    95. - читаем таблица по строкам (можно и rows)
    96.  
    97. <?php
    98.  
    99. // Сами данные
    100. $array = array(1, 2, 3, 4, 5, 6, 7, 8);
    101. echo html_table($array, 3, 0, "border='1'", "", "", "...", "down", "right", "cols")
    102.  
    103.  
    104. ?>
     
  16. еще один человек, который не знает слова "шаблон"...