parser

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

 

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

Ответ

Mizter Egoist 27.04.2016 12:38 / 27.04.2016 12:43

Из всех пяти пунктов получилось сделать только 4.
1. Все предки узла
$_parent[^table::sql{
	SELECT
		t.anc,
		t.dsc,
		t.lvl,
		p.eID
	FROM path AS t
	JOIN pages AS p ON (p.eID = t.dsc)
	WHERE t.dsc = $form:id AND t.lvl > 0
}]
2. Все потомки узла
$_child[^table::sql{
	SELECT
		t.anc,
		t.dsc,
		t.lvl,
		p.eID
	FROM path AS t
	JOIN pages AS p ON (p.eID = t.dsc)
	JOIN path AS h ON (h.dsc = t.dsc AND h.lvl = 1)
	WHERE t.anc = $form:id
}]
3. Все предки нового узла
$n_parent[^table::sql{
	SELECT
		t.anc,
		t.dsc,
		t.lvl,
		p.eID
	FROM path AS t
	JOIN pages AS p ON (p.eID = t.anc)
	WHERE t.dsc = $form:catalog
}]
Считаем дистанцию
$n_count[^table::sql{
	SELECT COUNT(*) AS count
	FROM path AS t
	JOIN pages AS p ON (p.eID = t.anc)
	WHERE t.dsc = $form:catalog
}]
$level[^get.getPath[
	$.anc(0)
	$.dsc[$form:catalog]
]]
$lvl($level.lvl + 1)
4. Удаляем предыдущие связи
^_parent.menu{
	^void:sql{
		DELETE FROM path 
		WHERE dsc = $_parent.dsc
			AND anc = $_parent.anc
			AND lvl = $_parent.lvl
	}
}
5. Создаем новые связи для узла с новой дистанцией
^void:sql{
	INSERT INTO path (anc, dsc, lvl)
	VALUES (0, $form:id, $lvl)
}
^if($n_parent){
	$distance($n_count.count)
	^n_parent.menu{
		^void:sql{
			INSERT INTO path (anc, dsc, lvl)
			VALUES ($n_parent.anc, $form:id, $distance)
		}
		$distance($distance - 1)
	}
}
Вот только как еще сделать перезапись для потомков перемещенного узла (поддерева).
И еще не работает перемещение родителя под ребенка.