2017 © Pedro Peláez
 

library nstree

Позволяет работать с деревьями Nested Set через API ORM Битрикс

image

nook-ru/nstree

Позволяет работать с деревьями Nested Set через API ORM Битрикс

  • Monday, June 26, 2017
  • by nook
  • Repository
  • 1 Watchers
  • 0 Stars
  • 12 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 4 Forks
  • 0 Open issues
  • 3 Versions
  • 0 % Grown

The README.md

Библиотека citrus/nstree

Содержит класс Citrus\NSTree\DataManager, унаследованный от Bitrix\Main\Entity\DataManager, позволяющий работать с деревьями Nested Set через API ORM Битрикс., (*1)

Для работы с деревом необходимо создать класс-наследник от Citrus\NSTree\DataManager., (*2)

Метод getMap() обязательно должен содержать поля:, (*3)

  • ID - Идентификатор записи, первичный ключ
  • PARENT_ID - Идентификатор родительской записи
  • LEFT_MARGIN - левый ключ
  • RIGHT_MARGIN - правый ключ
  • DEPTH_LEVEL - уровень вложенности
  • SORT - сортировка

Дополнительно поддерживаютя поля:, (*4)

  • ACTIVE - флаг активности
  • GLOBAL_ACTIVE - флаг активности всего узла, устанавливается автоматически

Примеры

Пример ORM-класса находится в файле lib/example.php, (*5)

Добавление новой записи в корень дерева

Citrus\NSTree\ExampleTable::add(
    array(
        'NAME' => 'ROOT ROW'
    )
);

Добавление записи в существующую ветку

Citrus\NSTree\ExampleTable::add(
    array(
        'PARENT_ID' => $parent_node_id,
        'NAME' => 'CHILD ROW'
    )
);

Перемещение записи или целой ветки в новую ветку

Citrus\NSTree\ExampleTable::update(
    $id,
    array(
        'PARENT_ID' => $new_parent_node_id
    )
);

Получение всего упорядоченного дерева, начиная от корня

$res = Citrus\NSTree\ExampleTable::getList(
    array(
        'select' => array(
            'ID',
            'NAME'
        ),
        'order' => array(
            'LEFT_MARGIN' => 'ASC'
        )
    )
);

Получение только корневых элементов

$res = Citrus\NSTree\ExampleTable::getList(
    array(
        'select' => array(
            'ID',
            'NAME'
        ),
        'filter' => array(
            '=DEPTH_LEVEL' => 1
        ),
        'order' => array(
            'LEFT_MARGIN' => 'ASC'
        )
    )
);

Получение всех потомков конкретной ветки дерева

$node = Citrus\NSTree\ExampleTable::getRow(
    array(
        'select' => array(
            'LEFT_MARGIN',
            'RIGHT_MARGIN'
        ),
        'filter' => array(
            '=ID' => $node_id
        )
    )
);
$res = Citrus\NSTree\ExampleTable::getList(
    array(
        'select' => array(
            'ID',
            'NAME'
        ),
        'filter' => array(
            '>LEFT_MARGIN' => $node['LEFT_MARGIN'],
            '<RIGHT_MARGIN' => $node['RIGHT_MARGIN']
        ),
        'order' => array(
            'LEFT_MARGIN' => 'ASC'
        )
    )
);

Получение всех предков конкретной ветки дерева

$node = Citrus\NSTree\ExampleTable::getRow(
    array(
        'select' => array(
            'LEFT_MARGIN',
            'RIGHT_MARGIN'
        ),
        'filter' => array(
            '=ID' => $node_id
        )
    )
);
$res = Citrus\NSTree\ExampleTable::getList(
    array(
        'select' => array(
            'ID',
            'NAME'
        ),
        'filter' => array(
            '<LEFT_MARGIN' => $node['LEFT_MARGIN'],
            '>RIGHT_MARGIN' => $node['RIGHT_MARGIN']
        ),
        'order' => array(
            'LEFT_MARGIN' => 'ASC'
        )
    )
);

Транзакции

Во избежание разрушения структуры дерева при совместном доступе желательно блокировать таблицу на запись и откатывать изменения при возникновении ошибок. Для этого служат методы lockTable() и unlockTable(), (*6)

$connection = Bitrix\Main\Application::getConnection();
Citrus\NSTree\ExampleTable::lockTable();
try {
    Citrus\NSTree\ExampleTable::add(
        array(
            'PARENT_ID' => $parent_node_id,
            'NAME' => 'CHILD ROW'
        )
    );
    $connection->commitTransaction();
} catch (\Exception $e) {
    $connection->rollbackTransaction();
    Citrus\NSTree\ExampleTable::unlockTable();
    echo($e->getMessage() . "\n");
}

The Versions

26/06 2017

dev-master

9999999-dev

Позволяет работать с деревьями Nested Set через API ORM Битрикс

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

by Дмитрий Козлов
by Marat Shamshutdinov

orm nested set bitrix

26/06 2017

0.1.1

0.1.1.0

Позволяет работать с деревьями Nested Set через API ORM Битрикс

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

by Дмитрий Козлов
by Marat Shamshutdinov

orm nested set bitrix

08/06 2017

0.1.0

0.1.0.0

Позволяет работать с деревьями Nested Set через API ORM Битрикс

  Sources   Download

MIT

The Requires

  • php >=5.3.0

 

by Дмитрий Козлов
by Marat Shamshutdinov

orm nested set bitrix