Навигатор с использованием Celesta

Материал из Course Orchestra
Перейти к: навигация, поиск
Внимание! Вы просматриваете документацию к Celesta 6.x. Документация по Celesta 7.x доступна на courseorchestra.github.io/celesta.

1. Справочник Celesta

1.1 Введение и основные понятия
1.2 Запуск и авто-обновление
1.3 Базовая настройка
1.4 Системные таблицы
1.5 CelestaSQL
1.6 CelestaDoc
1.7 Контексты сессии и вызова
1.8 Курсоры
1.9 BLOB-поля
1.10 Option-поля
1.11 Защита от потерянных обновлений
1.12 Метаданные Celesta
1.13 CelestaUnit

2. Celesta и базы данных

2.1 Особенности работы Celesta с поддерживаемыми типами СУБД
2.2 Проектирование базы данных Celesta в DBSchema

3. Создание решений с использованием Celesta для ShowCase

3.1 Программа обучения Celesta
3.2 Подготовка рабочего места для работы с Celesta
3.2.1 Для разработчиков платформы
3.2.2 Для разработчиков решений
3.3 Системные гранулы Celesta
3.3.1 common
3.3.1.1 Экспорт/импорт данных
3.3.1.2 Навигатор
3.3.1.3 Серии номеров
3.3.1.4 Иерархия Дьюи
3.3.1.5 Системные функции
3.3.1.6 Реестр настроек
3.3.1.7 Mailsender
3.3.1.8 Common.filter
3.3.2 common.api
3.3.4 security
3.3.3 lyra
3.4 Стандартные гранулы Celesta
3.4.1 dirusing
3.4.2 workflow
3.4.3 File repository
3.5 Отрисовка элементов Showcase при помощи Celesta
3.5.1 Конвертер XML-JSON
3.5.2 Навигатор (Navigator)
3.5.3 Информационная панель (Datapanel)
3.5.4 Серверное действие (Server activity)
3.5.5 Вебтекст (WebText)
3.5.6 Грид (Grid)
3.5.6.1 Панель инструментов (ToolBar)
3.5.7 XForms
3.5.7.1 Селекторы
3.5.7.2 Submission
3.5.7.3 Загрузка/Выгрузка файлов (Upload/Download)

5. Решение проблем

5.1 Проблемы с кодировкой jython-файлов

Для создания навигатора с использованием Celesta в базовой грануле Common предусмотрена специальная функция standardNavigator. Таким образом в гранулах необходимо создать один или несколько кусков навигатора (фактически куски соответствуют тегам group в навигаторе). Т. к. предполагается, что в большинстве проектов вы будете пользоваться именно этой функцией, то в файле app.properties должно быть прописано следующее

navigator.proc.name = common.navigator.standardNavigator.celesta

Далее в одной или нескольких Ваших гранулах необходимо создать функции отвечающие части навигатора. Желательно создавать их в отдельном файле, например navigator.py. В общем виде функции должны принимать на вход два параметра: context, session, на выходе они должны возвращать json-объект, соответствующий разделу навигатора.

def navFirstGroup(context, session):
    myNavigator = {
        "group":{
            "@id": "testGroup",
             "@name": "Hello",
             "level1":{
                 "@id": "testLevel",
                 "@name": "World"
                 }
            
        }                
    }
    return myNavigator 
 
def navSecondGroup(context, session):
    myNavigator = {
        "group":{
            "@id": "testGroup1",
             "@name": "Hello1",
             "level1":{
                 "@id": "testLevel1",
                 "@name": "World1"
                 }
            
        }                
    }
    return myNavigator

def navSettings(context, session):
    myNavigator = {
        "@width": "200px",
        "@hideOnLoad": "true"            
    }
    return myNavigator

После того как Вы создали функции для навигатора, их необходимо положить в специальный словарь. Данную процедуру необходимо производить в файле __init__.py вашей гранулы.

from common import navigator
from mygrain.navigator import navFirstGroup,navSecondGroup

navigator.navigatorsParts['1'] = navFirstGroup
navigator.navigatorsParts['2'] = navSecondGroup
navigator.navigatorsParts['__header__'] = navSettings

Для добавления настроек относящихся ко всему навигатору (скрыть по умолчанию, ширина ) необходимо также создать функцию, возвращающую эти настройки и добавить её в словарь navigatorsParts с ключом __header__ (см. пример выше)

Следует обратить внимание на два момента

  1. Добавлять в словарь navigatorsParts следует именно функции, а не результат их выполнения
  2. Ключи словаря navigatorsParts должны иметь такие имена, которые при сортировке по алфавиту дадут правильную последовательность групп в навигаторе

Таким образом, создание навигатора будет распределено на различные гранулы так, что все его куски будут независимы друг от друга, что повышает читаемость кода и скорость разработки.

Важная информация
Вам никто не запрещает написать свою функцию навигатора, при этом она должна иметь вид указанный ниже. Но мы настоятельно рекомендуем так не делать, т.к. в случае больших навигаторов это усложнит их поддержку. В общем виде функция навигатора принимает на вход два параметра: context, session, на выходе она должна возвращать xml строку с навигатором.


def navigator(context, session):
    myNavigator = '''
        <navigator>
            <group id="testGroup" name="Hello">
                 <level1 id="testLevel" name="World">            
                 </level1>
            </group>
        </navigator>
        '''
    return myNavigator