четверг, 7 июня 2012 г.

Группировка разных деревьев в одном разделе

Для тех, кто интересуется созданием своих собственных разделов и "деревьев" в админке, - в версии Composite C1 3.2 появилась возможность группировать "деревья" (и вообще т.н. "консольные приложения") из разных файлов определения древовидных структур (tree defintions) в одном разделе (своем, или как подпапку в существующем).

Что имеется в виду?

Скажем, у вас есть несколько файлов определения древовидных структур, каждый из которых создает свой раздел в админке.


Благодаря новому функционалу их можно объединить их в одном разделе, особенно если их будет немало. К тому же, если они связаны между собой логически, то тем более.



Как вариант, их также можно объединить в общей подпапке в существующем разделе.


Самое главное, что теперь не нужно "сливать" все файлы в один файл (что реально затруднит работу с ними). Нужно просто внести небольшие изменения в свои файлы определения древовидных структур.

А именно: во всех файлах определения древовидной структуры, которые мы собираемся сгруппировать в общем разделе:
  1. Добавляем атрибут ShareRootElementById к XML-элементу ElementRoot.
  2. Устанавливаем ему значение "true".
  3. У самого верхнего XML-элемента Element (который служит "корнем" нашего дерева) в атрибуте Id указываем значение, одинаковое для всех группируемых деревьев, напр.,  "SharedTreesId".
Примечание. "Корневой" XML-элемент Element - это дочерний XML-элемент у ElementRoot.

Таким образом мы сообщим системе, что нужно взять все "деревья", - у которых: а) атрибут ShareRootElementById="true" (в XML-элементе ElementRoot) и б) атрибут Id (в "корневом" XML-элементе Element) имеет одинаковое значение,  - и объединить их в одном разделе.

Пример:

<ElementStructure xmlns="http://www.composite.net/ns/management/trees/treemarkup/1.0" xmlns:f="http://www.composite.net/ns/function/1.0">
  <ElementStructure.AutoAttachments>
    <NamedParent Name="PerspectivesRoot" Position="Top" />
  </ElementStructure.AutoAttachments>
<ElementRoot ShareRootElementById="true">
    <Children>
      <Element Label="Деревья" Id="SharedTreesId">
        <Children>
          <Element Label="Фруктовые деревья" Id="FruitTreesId">
            <Children>
              <!-- элементы данных -->
            </Children>
          </Element>
        </Children>
      </Element>
    </Children>
  </ElementRoot>
</ElementStructure>

Несколько замечаний:
  • Группировка не получится, если в вашей древовидной структуре - несколько "корневых" XML-элементов Element (дочерних у ElementRoot).
  • При группировке разных "деревьев" имеет смысл размещать элементы данных в двух вложенных XML-элементах Element. Первый - для общего раздела (название, иконка, подсказка); второй, его дочерний, - "корень" для элементов данных. (В примере выше это  Element[@Label="Деревья"] и Element[@Label="Фруктовые деревья"] соответственно.)
  • Первое загруженное "дерево" будет определять название, подсказку и иконку нового раздела (или подпапки в существующем разделе). И "деревья" отобразятся в порядке загрузки.
  • Если изменить раздел (NamedParent[@Name]) в файле, загружаемом первым, то это изменит общие установки всей группы (название раздела/подпапки, иконка, подсказка). Если же сделать такое изменение в любом другом файле, который не загружен первым, такого эффекта не будет.

Комментариев нет:

Отправить комментарий