parser

/faq/faq
/authors/авторы
/docs/документация

/powered_by_parser/в действии
/feedback/куда говорить
/jargon/жаргон

/download/скачать

/examples/примеры
/forum/форум



Поиск по форуму

По умолчанию ключевое слово ищется только в заголовке сообщения.

Ключевое слово:

Фильтровать по автору:



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

Luzhnikovskiy | tom@ofm.ru 03.12.2001 21:58

Назовем "перелопачивание контекста с использованием стека"...
По времени с рекурсией не сопоставлял, но тормозов никогда не видел. (Правда, деревья с очень большим числом веток и не строил, но про 200 тормозов не было).
Вставляю as is (без комментариев - надеюсь разберетесь ;-))

В результате - "правильно рассортированный" контекст с индикатором уровня вложенности.
В @main позвать ^macro[go], потом променюшить контекст с учетем ^item[level]

@go
#########################################
^macro[stack_init]
^macro[server;
	^context[sorted_messages;
		^config[named;message_id	parent_id	thread_id	posted	subject	name	level]
	]
	^context[messages;
		^sql[select
				message_id,
				parent_id,
				thread_id,
				date_format(posted, '%d-%m %H:%i') as posted,
				subject,
				name
			from forum
			where thread_id=^form[thread]
			order by thread_id desc, parent_id, posted]
		^var[parent_id;0]
		^var[context_isnt_empty;1]
		^while[^var[context_isnt_empty];
			^empty[^var[context_isnt_empty;0];
				^locate[parent_id;^var[parent_id]]
				^eq[^item[parent_id];^var[parent_id];
					^context[sorted_messages;
						^config[append;^item[messages;message_id]	^item[messages;parent_id]	^item[messages;thread_id]	^item[messages;posted]	^item[messages;subject]	^item[messages;name]	^macro[stack_depth]]
					]
					^macro[stack_push;^var[parent_id]]
					^var[parent_id;^item[message_id]]
					^config[remove;^item[current]]
				;
					^var[parent_id;^macro[stack_pop]]
				]
			]
		]
	]
]

@stack_init
#########################
^context[stack;^config[named;value]]

@stack_depth
#########################
^context[stack;^if[^item[count];^item[count];0]]

@stack_push
#########################
^context[stack;^config[insert;0;$1]]

@stack_pop
#########################
^context[stack;^item[value]^config[remove;0]]

<<  Вернуться к списку сообщений


E-mail: mailbox@parser.ruCopyright © 1997-2001 Студия Артемия Лебедева