Для некоторых проектов нужен компонент деревьев. Например, структура организации или дерево ресурсов MODX. Для отображения и управления деревом добавил в gtsAPI-PVTables модуль UniTree.


Для того чтобы написать админку MODX на Vue осталось сделать менеджер файлов. Но пока он нам, к сожалению, не нужен и админка на Vue откладывается. Может к концу года понадобиться.
Ниже описание модуля UniTree.

Особенности
UniTree сделан так, чтобы работать в 4 вариантах:
1) Таблица UniTree связанная c другими таблицами. В этом варианте создается таблица дерево
<object class="osTree" table="orgstructure_tree" extends="xPDOSimpleObject">
       <field key="parent_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="true" default="0"/>
       <field key="parents_ids" dbtype="varchar" precision="191" phptype="string" null="false" default=""/>
       <field key="title" dbtype="varchar" precision="191" phptype="string" null="false" default=""/>
       <field key="class" dbtype="varchar" precision="191" phptype="string" null="false" default=""/>
       <field key="target_id" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="true" default="0"/>
       <field key="menuindex" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="true" default="0"/>
       <field key="active" dbtype="tinyint" precision="1" phptype="boolean" null="true" default="1"/>

       <index alias="parent_id" name="parent_id" primary="false" unique="false" type="BTREE">
              <column key="parent_id" length="" collation="A" null="false"/>
       </index>
       <index alias="parents_ids" name="parents_ids" primary="false" unique="false" type="BTREE">
              <column key="parents_ids" length="" collation="A" null="false"/>
       </index>
       <index alias="title" name="title" primary="false" unique="false" type="BTREE">
              <column key="title" length="" collation="A" null="false"/>
       </index>
       <index alias="class" name="class" primary="false" unique="false" type="BTREE">
              <column key="class" length="" collation="A" null="false"/>
       </index>
       <index alias="target_id" name="target_id" primary="false" unique="false" type="BTREE">
              <column key="target_id" length="" collation="A" null="false"/>
       </index>
       <index alias="active" name="active" primary="false" unique="false" type="BTREE">
              <column key="active" length="" collation="A" null="false"/>
       </index>
    </object>
Где class и target_id указывают на объект в другой таблице. Например, есть еще таблица
<object class="osOrg" table="orgstructure_orgs" extends="xPDOSimpleObject">
       <field key="name" dbtype="varchar" precision="191" phptype="string" null="false" default=""/>
       <field key="active" dbtype="tinyint" precision="1" phptype="boolean" null="true" default="1"/>

       <index alias="active" name="active" primary="false" unique="false" type="BTREE">
              <column key="active" length="" collation="A" null="false"/>
       </index>
       <index alias="name" name="name" primary="false" unique="false" type="BTREE">
              <column key="name" length="" collation="A" null="false"/>
       </index>
    </object>
В osTree запись class=«osOrg», target_id=«1» указывают на запись id=«1» в таблице osOrg.
Пример приложения с этим вариантом https://github.com/tuniekov/OrgStructure.
Записи в поле parents_ids имеют вид "#1#4#". Где 1 и 4 id записей родителей. Тогда найти все дочернии записи родителя 4 можно запросом с
WHERE parents_ids LIKE '%#4#%'
В gtsAPI свойствах таблицы надо указать:
тип таблицы type: 3,
Описания связанных таблиц: gtsAPIUniTreeClass,
Использовать таблицу UniTree: properties.useUniTree: true,
Расширение таблиц modResource: properties.extendedModResource: false,
Пример настроек в файле https://github.com/tuniekov/OrgStructure/blob/main/_build/configs/gtsapipackages.js

2) Таблица UniTree связанная с таблицей modResource. Этот вариант я врядли буду использовать, но вдруг понадобиться.
В gtsAPI свойствах таблицы надо указать:
тип таблицы type: 3,
Описания связанных таблиц: gtsAPIUniTreeClass, ( них exdended_modresource: true,)
Использовать таблицу UniTree: properties.useUniTree: true,
Расширение таблиц modResource: properties.extendedModResource: true,

Пример тестого приложения https://github.com/tuniekov/TestUniTreeLinkModResourceMode.

3) Приложение может взаимодействовать с modResource напрямую без специальной таблицы UniTree.
В gtsAPI свойствах таблицы надо указать:
тип таблицы type: 3,
Описания связанных таблиц: Не указываются
Использовать таблицу UniTree: properties.useUniTree: false,
Расширение таблиц modResource: properties.extendedModResource: true,

Пример тестового приложения https://github.com/tuniekov/TestUniTreeModResourceMode.

4) Приложение можно использовать только с одной таблицей вида таблицы UniTree, добавляя необходимые поля в таблицу.

В gtsAPI свойствах таблицы надо указать:
тип таблицы type: 3,
Описания связанных таблиц: Не указываются
Использовать таблицу UniTree: properties.useUniTree: true,
Расширение таблиц modResource: properties.extendedModResource: false,

Пример, тестового приложения https://github.com/tuniekov/TestUniTreeSingleTableMode.

Использование
19 мая 2025, 22:54    Александр Туниеков Компоненты 0    1 0

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Вы можете авторизоваться на сайте через:
    YandexGoogle