Ответ
Дмитрий 09.05.2010 16:19
Суть в том, что я брал из базы кучу дубликатов записей (get_options), а потом отсеивал нужные мне записи уже средствами парсера (get_event_options), формируя новую табличку.
У меня пример был более сложный, тут он упрощён, так что может показаться слегка надуманным.
@get_options[h_params]
$h_params[^hash::create[$h_params]]
$result[^oSql.table{
SELECT
option_id,
option_name,
option_value,
option_event_id
FROM
events_options
^if(def $h_params.where){
WHERE $h_params.where
}
}]
@get_event_options[i_event_id][locals]
$t_options[^get_options[
$.where[
... куча условий, которые плодили дубликаты...
]
$.order_by[option_event_id DESC, option_id ASC]
]]
$result[^table::create{option_name option_value}]
^t_options.menu{
^if($t_options.option_event_id == ^i_event_id.int(0) || ($t_options.option_event_id == 0 && !^result.locate($result.option_name eq $t_options.option_name))){
^result.append{$t_options.option_name $t_options.option_value}
}
}
В итоге у меня формировалась примерно такая табличка
option_name option_value
title_comment Задать вопрос
title_comment_text Вопрос
title_comment_name Ваше имя
title_comment_city Город
comments_description
Понятно, что параметр comments_description был не задан, но почему то не создавался tab с пустым значением параметра.
@page[]
$t_options[^get_event_options[$t_event.event_id]]
$h_options[^t_options.hash[option_name][option_value][$.type[string]]]
^comments[$h_options]
@comments[h_options]
^if(def $h_options.comments_description){
$h_options.[comments_description]
}