Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: автоматическая генерация сортировки полей html таблицы
 
 автор: Axxil   (22.11.2007 в 13:18)   письмо автору
 
 

Продолжаю публиковать интересные, на мой взгляд, решения.
На этот раз автоматическая генерация сортировки в таблице.
Заодно показаны какие горизонты открывает работа с буфером в php.

<?
// Страница перед выводом в браузер считывается в буфер и проходит через данную функцию.
// Здесь текст в ячейках заголовка таблицы меняется на линки сортировки
function callback($buffer){
  
$link preg_replace('|&orderby=[^&]*|is','',$_SERVER['REQUEST_URI']);
  
preg_match('|&direction=([^&]*)|is',$link,$out);
  if(
$out[1] == 'asc'$link str_replace('&direction='.$out[1],'&direction=desc',$link);
  elseif(
$out[1] == 'desc'$link str_replace('&direction='.$out[1],'&direction=asc',$link);
  else 
$link .= '&direction=desc';
  
$buffer preg_replace('|<td(.*)orderby="(.*)"(.*)>(.*)</td>|isU',
                         
'<td\\1 \\3><a href="'.$link.'&orderby=\\2">\\4</a></td>',
                         
$buffer);
}
ob_start('callback');
// Определяем параметры сортировки по умолчанию.
define('_DEFAULT_SORT','t1.entity_id');
define('_DEFAULT_DIRECTION','ASC');
// Какая-то функция отвечающая за контроль входящи параметров. Проверяет кавычки и прочие запрещённые символы
$_GET clear($_GET);
// Определяем параметры сортировки
$orderby = (isset($_GET['orderby']))?$_GET['orderby']:_DEFAULT_SORT;
$direction = (isset($_GET['direction']))?$_GET['direction']:_DEFAULT_DIRECTION;
// Для наглядности показан запрос объединяющий две таблицы. Какой список он выводит, думаю ясно из самого запроса
$query mysql_query('SELECT
                        t1.enatity_id,
                        t1.create_date,
                        t1.answer_date,
                        t2.client_name
                      FROM entities t1
                      LEFT JOIN clients t2 ON t2.client_id=t1.client_id
                      ORDER BY '
.$orderby.' '.$direction);
$list = array();
while(
$r mysql_fetch_assoc($query)){
  
$list[] = $r;
}
?>

Строим собственно таблицу.

<table>
  <tr>
    <!-- В теги td помещаем инструкции сортировки.
         По какому полю таблицы сортировать.
         Пусть невалидно, зато удобно :) -->
    <td class="header" orderby="t1.entity_id">ID</td>
    <td class="header" orderby="t1.create_date">Отправлено</td>
    <td class="header" orderby="t1.answer_date">Отвечено</td>
    <td class="header" orderby="t3.c_name">Клиент</td>
  </tr>
  <?foreach($list as $item){?>
    <tr>
      <td class="cell"><?=$item['entity_id']?></td>
      <td class="cell"><?=$item['create_date']?></td>
      <td class="cell"><?=$item['answer_date']?></td>
      <td class="cell"><?=$item['client_name']?></td>
  <?}?>
</table>


Буду рад конструктивной критике.

   
 
 автор: RV   (22.11.2007 в 13:56)   письмо автору
 
   для: Axxil   (22.11.2007 в 13:18)
 

помоему это надо реализовывать на xls

   
 
 автор: Axxil   (22.11.2007 в 13:58)   письмо автору
 
   для: RV   (22.11.2007 в 13:56)
 

какой процент разработчиков владеют этой технологией?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования