[Закрыть]
 
popoff.donetsk.ua
На бои гладиаторов, на показные избиения, убийства всегда сбегалось гораздо больше плебса, чем на проникновенные проповеди о любви к ближнему своему.
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Программирование на PHP - Перенос ветки в Nested Sets

Перенос ветки в Nested Sets

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
Гость Michael url://forum.message:2814
Перенос ветки в Nested Sets
Michael

Здравствуйте Юрий
Вижу Вы посвятили какую-то часть своего веремени вопросу Nested Sets
Я тоже тратил на это время, только результаты похуже
Использовал в своих поектах phpDBTree 1.4, в который внес некоторые изменения
Например перелел инсерт

<?php function insert($ID$data$where "into") {
        if(!(list(
$leftId$rightId$level) = $this->getNodeInfo($ID))) trigger_error("phpDbTree error: ".$this->db->error(), E_USER_ERROR);

        
// preparing data to be inserted
        
if(sizeof($data)) {
            
$fld_names implode(','array_keys($data)).',';
            
$fld_values '\''.implode('\',\''array_values($data)).'\',';
        }
        
$fld_names .= $this->left.','.$this->right.','.$this->level;
        
        if (
$where == "after"$fld_values .= ($rightId+1).','.($rightId+2).','.($level);
        elseif (
$where == "before"$fld_values .= ($leftId).','.($leftId+1).','.($level);
        else 
$fld_values .= ($rightId).','.($rightId+1).','.($level+1);
                
        
// creating a place for the record being inserted
        
if($ID) {
            if (
$where == "after"$this->sql 'UPDATE '.$this->table.' SET '
            
.$this->left.'=IF('.$this->left.'>'.$rightId.','.$this->left.'+2,'.$this->left.'),'
            
.$this->right.'=IF('.$this->right.'>'.$rightId.','.$this->right.'+2,'.$this->right.')'
                               
'WHERE '.$this->right.'>'.$rightId;
            elseif (
$where == "before"$this->sql 'UPDATE '.$this->table.' SET '
            
.$this->left.'=IF('.$this->left.'>='.$leftId.','.$this->left.'+2,'.$this->left.'),'
            
.$this->right.'=IF('.$this->right.'>'.$leftId.','.$this->right.'+2,'.$this->right.')'
                               
'WHERE '.$this->right.'>'.$leftId;
            else 
$this->sql 'UPDATE '.$this->table.' SET '
                
$this->left.'=IF('.$this->left.'>'.$rightId.','.$this->left.'+2,'.$this->left.'),'
                
$this->right.'=IF('.$this->right.'>='.$rightId.','.$this->right.'+2,'.$this->right.')'
                
'WHERE '.$this->right.'>='.$rightId;
            if(!(
$this->db->query($this->sql))) trigger_error("phpDbTree error: ".$this->db->error(), E_USER_ERROR);
        }                

        
// inserting new record
        
$this->sql 'INSERT INTO '.$this->table.'('.$fld_names.') VALUES('.$fld_values.')';
        if(!(
$this->db->query($this->sql))) trigger_error("phpDbTree error: ".$this->db->error(), E_USER_ERROR);

        return 
$this->db->insert_id();
    } 
?>

Таким образом добавил возможность в отличии от штатной функции добавлять элемент не только после но и перед указанным элементом

Хочу такое же сделать в отношении функции moveAll. Т.е. чтоб можно было двигать не только внутрь указанного узла, но и после и до него. Но честно говоря, видать, у меня оперативки в голове не хватает
Голова пухнет, а результата нет. Уже весь стол бумажками с «деревьями» завалил, кучу доков перечитал, кучу скриптов пересмотрел, но результата ноль.
Чем дольше сижу тем меньше понимаю как это сделать :(

Не подскажите как к этому подступиться? может уже какой готовый путь есть? Видел у Вас на сайте скрипт который позволяет менять соседние узлы, но это не совсем удобно.

popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:2815

Видел у Вас на сайте скрипт который позволяет менять соседние узлы, но это не совсем удобно.

Michaelфорумы popoff.donetsk.ua

Скрипт объёмом в 20 КБ для обмена местами соседних узлов. Глупость какая, Вы не находите? %)

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
popoff
Yuri
Июл, 2004
Сообщений: 940
popoff url://forum.message:2816
________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.
Гость Михаил url://forum.message:2817
Михаил

Видимо мозги уже совсем закипели
Ваших файлов я не видел:)
Совсем уже запутался в сайтах и исходниках
Там были просто дописаны пару функий для обмена местами соседних узлов. Погружаюсь в изучение Ваших трудов.
И постараюсь подкрутить под свой функционал

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
porter.mir.dn.ua