parser

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

 

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

Ответ

dRmx 16.09.2003 22:50

^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]
А вообще полный код
@auto[] 
$connect_string[mysql://root@localhost/forum]

@getMessageById[id]
$result[^table::sql{
		SELECT
			forum_message.forum_message_id,
			parent_id,
			thread_id,
			title,
			author,
			email,
			dt_published,
			forum_message_body.body
		FROM
			forum_message
			^MAIN:pSQL.left_join[from;forum_message_body;forum.forum_message_id = forum_message_body.forum_message_id]
		WHERE
			^MAIN:pSQL.left_join[where;forum_message_body;forum.forum_message_id = forum_message_body.forum_message_id]
			forum_message.forum_message_id = ^id.int(0) AND
			is_published = 1
}]

@getMessagesByParent[parent_id;limit]
$result[^table::sql{
		SELECT
			forum_message.forum_message_id,
			parent_id,
			thread_id,
			title,
			author,
			email,
			dt_published,
			forum_message_body.forum_message_id AS is_not_empty
		FROM
			forum_message
			^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]
		WHERE
			^MAIN:pSQL.left_join[where;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]
			^if(def $parent_id){parent_id = ^parent_id.int(0) AND}
			is_published = 1
		ORDER BY
			dt_published
}[^if(^limit.int(0)){$.limit(^limit.int(0))}]]

@getMessagesByThread[thread]
$result[^table::sql{
		SELECT
			forum_message.forum_message_id,
			parent_id,
			thread_id,
			title,
			author,
			email,
			dt_published,
			forum_message_body.forum_message_id AS is_not_empty
		FROM
			forum_message
			^MAIN:pSQL.left_join[from;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]
		WHERE
			^MAIN:pSQL.left_join[where;forum_message_body;forum_message.forum_message_id = forum_message_body.forum_message_id]
			^if($thread is table){
				^if($thread){thread_id IN (^thread.menu{$thread.thread_id}[,]) AND}
			}{
				thread_id = ^thread.int(0) AND
			}
			is_published = 1
		ORDER BY
			dt_published DESC
}]

@printMessagesByParent[messages;parent_id][levelmessages]
$levelmessages[^messages.select($messages.parent_id == $parent_id)]
^levelmessages.menu{
	^printTreeItem[$levelmessages.fields;^printMessagesByParent[$messages;$levelmessages.forum_message_id]]
}

@printTreeItem[message;body]
$result[<tree-item id="$message.forum_message_id" date="$message.dt_published" is-empty="^if($message.is_not_empty){0}{1}">
	<title>$message.title</title>
	<author>$message.author</author>
	<email>$message.email</email>
	$body
</tree-item>]

@main[]
# достаем не более 20 корневых сообщений (parent_id == 0)
$rootMessages[^getMessagesByParent[0;20]]
# достаем все сообщения в тредах, которые мы только что достали
$messages[^getMessagesByThread[$rootMessages]]
# собственно выводим все данные о сообщениях в виде дерева
^printMessagesByParent[$messages;0]