parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

есть элегантное решение

mashi 08.02.2006 15:10

$news[^table::sql{SELECT... }]
# кол-во колонок в таблице
$cols(4)
# количество строк таблицы
$i(0)
# Переводим таблицу в хеш-таблицу, ключами которого являются номера срок.
$news[^news.hash{^if(^news.line[]<=$cols*($i+1)){$i}{^i.inc(1)$i}}[$.distinct[tables]]]
# каждую таблицу из хеша таблиц переводим в хеш, ключами которого будут порядковые номера ячеек в строке
^news.foreach[key;value]{
	$news.[$key][^news.[$key].hash(^news.[$key].line[])[header]]
}
# Таким образом получили матрицу.

# ширину колонок будим хранить в хеше.
# если будит остаток от деления 100\$cols, то он будит добавлен к ширине последней колонки
$cell_width[
	^for[k](1;$cols){
		$.[$k](100\$cols + ($k == $cols)*(100%$cols))
	}
]

# выводим таблицу
<table width="100%" border="1">
^for[j](0;$i){
<tr>
	^for[k](1;$cols){
#		width ставим только для первой строки
		<td ^if(!$j){width="$cell_width.[$k]"}>
			^if(def $news.[$j].[$k].header){$news.[$j].[$k].header}{&nbsp^;}
		</td>
	}
</tr>
}
</table>