parser

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

 

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

Передача параметров черех хеш

vadbars 27.01.2003 12:09

Есть задачка: организовать передачу некоей функции большого числа параметров, которые не меняют алгоритма, а касаются, к примеру, оформления вывода результатов (цвет, шрифт и т.д.). Типичный случай - навигация, календарь и т.п.
Хочется добиться того, чтобы без передачи параметров использовалось значение (оформление) по умолчанию, а переданный параметр имел приоритет перед дефолтным.

Я сделал это так:

@t_table[tablename;param1]
#В теле функции определяю хеш с default значениями
$param[
$.table[border=0 cellSpacing=1 cellPadding=0 width=100% align=center bgColor=#999999]
$.tr[bgColor=#FFFFFF]
$.td[align=center noWrap]
$.td_nocontent[bgColor=#999999]
# если попался неизвестный ключ хеша - применяем таблицу стилей default
$._default[class=default]
]
# если были переданы иные параметры (через хеш param1),
# заменим ими дефолтные значения
^if(def $param1){
^param.foreach[key;value]{
$param.$key[^if(def $param1.$key){$param1.$key}{$param.$key}]
}
}
# ну и сама функция
...
<table $param.table>
<tr $param.tr>
<td $param.td>$content</td>
...
<td $param.td_nocontent>&nbsp^;</td>
</tr>
</table>

Можно, конечно, сделать это "правильнее" - через CSS и везде писАть типа <td class="$default_CSS_name">.
Меня смутили исходники ArtLebedevStudio-страниц - бОльшая часть параметров оформления определяется в тегах, а не через CSS. Кроссбраузерность, однако... :-$

А теперь, внимание, - вопрос:
Скажите что-нибудь плохое про такой подход :-)
Может быть, есть более красивый ("спортивный") вариант?

Прошу прощения за целый hash вопросов, но очень хочется писАть код "в духе Parsera (с)PAF" :-).