sub insert_node { my ($class, $rs, $id, $data) = @_; my $var = $class . "::_nested_set"; no strict 'refs'; my ($left_id, $right_id, $parent_id) = (1, 2, 0); $data->{title} = 'root' unless defined $data->{title}; if ($id) { my $cat = $rs->find($id) or return; my $upper = $rs->search({ left_id => { '<=' => $cat->left_id }, right_id => { '>=' => $cat->right_id }, }); $upper->update({ right_id => \'right_id + 2', }); my $right = $rs->search({ left_id => { '>' => $cat->left_id }, right_id => { '>' => $cat->right_id }, }); $right->update({ left_id => \'left_id + 2', right_id => \'right_id + 2', }); ($left_id, $right_id, $parent_id) = ($cat->right_id, $cat->right_id + 1, $cat->id); } my $node = $rs->create({ %$data, left_id => $left_id, right_id => $right_id, parent_id => $parent_id, }); return $node; }