parser

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

 

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

О парадоксах... ;-)

BeaVe 03.08.2005 13:05 / 03.08.2005 13:05

Вот так я поизвращался над вашим кодом о построении деревьев средствами P3:
@categories_parents[params]
$result[^table::sql{
	SELECT
		category_id AS id,
		category_parent_id,
		category_type,
		category_thread,
		name,
		title,
		date_published,
		is_published
	FROM
		categories
	WHERE
		^if(def $params.category_parent_id){category_parent_id = ^params.category_parent_id.int(0) AND}
		is_published = 1
	ORDER BY
		date_published
}[
	^if(^params.limit.int(0)){$.limit(^params.limit.int(0))}
]]

@categories_threads[thread]
$result[^table::sql{
	SELECT
		category_id AS id,
		category_parent_id,
		category_type,
		category_thread,
		name,
		title,
		date_published,
		is_published
	FROM
		categories
	WHERE
		^if($thread is table){
			^if($thread){category_thread IN (^thread.menu{$thread.category_thread}[,]) AND}
		}{
			category_thread = ^thread.int(0) AND
		}
		is_published = 1
	ORDER BY
		date_published DESC
}]

@category[category;body]
$result[<category>
	<id>$category.id</id>
	<title>$category.title</title>
	<name>$category.name</name>
	$body                   
</category>]

@printCategoriesByParent[category_parent_id][levelcategories]
^if($categories_hash_tree.[$category_parent_id]){
	$levelcategories[$categories_hash_tree.[$category_parent_id]]
	^levelcategories.menu{
		^switch[$out]{
			^case[DEFAULT]{<category>
				<id>$levelcategories.fields.id</id>
				<title>$levelcategories.fields.title</title>
				<name>$levelcategories.fields.name</name>
				^if($categories_hash_tree.[$levelcategories.id]){^printCategoriesByParent[$levelcategories.id]}
			</category>}
		}
	}
}

@categories_hash[categories;key]
^createTreeHash[$categories;$key]

@categories_list[params]
$root_categories[^categories_parents[]]
$categories[^categories_threads[$root_categories]]
$categories_hash_tree[^categories_hash[$categories;category_parent_id]]
<categories>
	^printCategoriesByParent[0]
</categories>
Из своих наблюдений.

Если изменить переменную $category_parent_id в методе @printCategoriesByParent[] на число, к примеру 0, то получается ошибка. Теоритически вроде бы не должна быть ошибка...
@printCategoriesByParent[category_parent_id][levelcategories]
^if($categories_hash_tree.[0]){
	$levelcategories[$categories_hash_tree.[0]]
	^levelcategories.menu{
		^switch[$out]{
			^case[DEFAULT]{<category>
				<id>$levelcategories.fields.id</id>
				<title>$levelcategories.fields.title</title>
				<name>$levelcategories.fields.name</name>
				^if($categories_hash_tree.[$levelcategories.id]){^printCategoriesByParent[$levelcategories.id]}
			</category>}
		}
	}
}
Ведь вызовом ^printCategoriesByParent[0] я и присваиваю этой переменной значение 0. А почему тогда Parser ругается?... ;-)
Может это парадокс...