четверг, 2 июня 2011 г.

Консольные приложения (8): Пример древовидной структуры элементов

Продолжим рассматривать пример консольного приложения, использующегося в пакете Composite.Community.Blog.

Давайте сделаем быстрый обзор иерархии элементов этого консольного приложения. Дело в том, что в древовидной структуре элементов блога используется несколько уровней. Было бы неплохо разобраться, как такая структура создается.



Под корневым элементом Blog Entries, находятся записи блога, сгруппированные по месяцам. У каждой записи могут быть комментарии, которые находятся под элементом Comments.


Рассмотрим, как это представлено в файле определения древовидной структуры.

<ElementRoot>
  <Children>
    <Element Label="Blog Entries" Id="Root">
      <!-- остальной XML -->
      <Children>
        <DataFolderElements Type="Composite.Community.Blog.Entries" DateFormat="yyyy MMMM" FieldGroupingName="Date" Display="Compact">
          <Children>
            <DataElements Type="Composite.Community.Blog.Entries" Label="${C1:Data:Composite.Community.Blog.Entries:Title}" Display="Auto">
              <!-- остальной XML -->
              <Children>
                <Element Label="Comments" Id="Comments">
                  <Children>
                    <DataElements Type="Composite.Community.Blog.Comments" Label="${C1:Data:Composite.Community.Blog.Comments:Title}" Display="Compact">
                      <!-- остальной XML -->
                    </DataElements>
                  </Children>
                </Element>
              </Children>
            </DataElements>
          </Children>
        </DataFolderElements>
      </Children>
    </Element>
  </Children>
</ElementRoot>

(Я специально оставил только интересующие нас части.)

Здесь мы видим, что под обязательным XML-элементом построения дерева элементов ElementRoot, находится простой XML-элемент Element. Именно он появляется как корневой под страницей в админке.

Далее используется еще один XML-элемент представления данных - DataFolderElements, с помощью которого можно группировать элементы определенного типа данных по какому-нибудь полю (в данном случае по дате поста в блоге). Об этом элементе мы подробнее поговорим в следующем сообщении.

Далее мы при помощи XML-элемента DataElements представляем элементы из типа данных Composite.Community.Blog.Entries, и при помощи динамических полей (${...}), каждую запись из блога показываем в дереве используя ее заголовок (Title).

Далее, у каждой записи может быть простой XML-элемент Element, который имеет одно и тоже название: Comments. И если имеются комментарии к записи, то они представлены при помощи еще одного XML-элемента DataElements, который берет данные из типа Composite.Community.Blog.Comments. (Комментарии в примере фильтруются по идентификатору записи в блоге. О фильтровании элементов данных мы поговорим в одном из следующих сообщений.)

На что нужно обратить внимание?

Во-первых, каждый уровень в дереве всегда представлен одним из трех XML-элементов:
  • Element
  • DataElements
  • DataFolderElements
Во-вторых, каждый из этих элементов “вкладывается” в вышестоящий при помощи XML-элемента Children.

В-третьих, у XML-элемента DataElements есть атрибут Display (режим представления), который контролирует представление каждого элемента в зависимости от того, есть ли у текущего элемента дочерние элементы (в нашем примере, есть ли у записи блога комментарии или нет.). Он может иметь такие значения:
  • Lazy: (“Отложенный”) Показывает все элементы независимо от того, есть ли у них дочерние элементы или нет, а также всегда показывает “плюсик” ("+") возле элементов для их разворачивания. Это значение используется по умолчанию, если явно не задано одно из двух ниже. (На скриншоте выше, у элемента “Консольные приложения” будет показан “плюсик” при этом значении, несмотря на то, что комментариев у него нет.)
  • Compact: (“Компактный”) Показывает только те элементы, у которых есть дочерние элементы, остальные - скрывает. (На скриншоте выше, элемент “Консольные приложения” не будет показан при этом значении.)
  • Auto: (“Автоматический”) Показывает все элементы независимо от того, есть ли у них дочерние элементы или нет, но показывает “плюсик” ("+") только возле тех элементов, у которых есть дочерние элементы.
Как раз последний режим (Auto) и задан в нашем консольном приложении для постов блога.

А теперь рассмотрим более подробно XML-элемент DataFolderElements.


Предыдущие сообщения по теме:

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

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