Первое, что я создал для класса вложенных множеств это его интерфейс:
interface HierarchicalБлагодаря интерфейсу, иной класс, наследуя его может с легкостью заменить класс вложенных множеств.
{
public function build($object);
public function _getTree();
public function _getBranch($branch = 0);
public function _add($parent);
public function _delete($id);
public function _replace($parent,$id);
}
Сам класс выглядит так:
class NestedSet extends Doctrine_Record implements HierarchicalЗная, о том, что деревья могут содержать несколько рутовых веток или одну рут-ветку некоторые функции учитывают эту особенность.
{
public function build($object)
{
$this->iObject = $object;
$this->Object = Doctrine::getTable($this->TABLE_NAME)->getTree();
$this->hasManyRoots = $this->Object->getAttribute('hasManyRoots');
}
public function _getTree()
private function getChildren($item)
public function _getBranch($branch = 0)
public function _add($parent)
public function _delete($id)
public function _replace($parent,$id)
}
Функция получения Дерева в Nested set:
public function _getTree()Как видно из кода все ясно и понятно.
{
$this->TreeArray = array();
if ($this->hasManyRoots)
{
$rootColumnName = $this->Object->getAttribute('rootColumnName');
foreach ($this->Object->fetchRoots() as $root)
{
$options = array('root_id'=>$root->$rootColumnName);
foreach($this->Object->fetchTree($options)->toArray() as $node)
{
$this->TreeArray[$root->$rootColumnName][] = $node;
}
}
}
else
{
foreach ($this->Object->fetchTree()->toArray() as $node)
{
$this->TreeArray[$node['level']][] = $node;
}
}
return $this->TreeArray;
}
Особенности создания правильной структуры Nested Set, и как создавать Many Roots деревья используя Doctrine yaml в схемах, я опишу немного позже.
Вот основная функция, которая работают с деревом Nested Set в Symfony и в CodeIgniter используя PHP ORM Doctrine плагин. Сам класс получился довольно простым и дееспособным. Остальные функции, выложить не удалось из-за нечитабельного их расположения на страницах блога (код вылазит за границы страницы и надо его вручную подгонять, а мне лень).
Весь код класса я могу выложить сюда же в блог, по первому требованию девелоперов, для того, что бы сократить время затраченное на разработку тех или иных задач, в которых используется NestedSet.
Основную информацию по легкому созданию и управлению деревьями вы можете взять отсюда и написать свой собственный класс.
В дальнейшем я планирую написать легкое и доступное овервью как создавать деревья посредством Doctrine yaml схем, и как использовать SimpleTest в Doctrine для методики TDD.
Также хочу насторожить тех девелоперов, которые впервые работают с Nested Set. Переход от структуры смежных вершин к вложенному множеству влечет за собой некий дискомфорт ))).
Адміністратор блогу видалив цей коментар.
ВідповістиВидалитиАдміністратор блогу видалив цей коментар.
ВідповістиВидалитиавтозвук тюннинг компьютерные сети сложные сети сказки в мире сказок китай движения аэробики аэробика для всех дипломные по географии курсовые по географии индия реферати українські дипломні роботи дельфины обыкновенный дельфин обои из сериалов обои к шоу seropol5
ВідповістиВидалитиuser manuals for mobile phones users guides for mobile phones медицина лікарські засоби фінанси банки audi opel вертолеты история авиации печи и камины строительство печей космос метеорити новые шрифты шрифты бесплатно best fonts only fonts download seropol5
ВідповістиВидалитиТвори Еміліо Сальгарі Еміліо Сальгарі Місто прокаженого короля Історія архітектури лабораторні аналізи методи діагностики хворіб kapraldr3
ВідповістиВидалитиПожалуйста вышлите класс, и документацию если есть на мыло m.dolinskiy(at)gmail.com
ВідповістиВидалитии мне вышлете, пожалуйста сюда
ВідповістиВидалити