Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

Панель слева

paxerus
26
paxerus 17.01.2011 18:57 | #

Добрый день

не могли бы вы разъяснить,на простом примере, как при разработки своего модуля, добавить панель слева(например категории в форуме)?

Алло, TeamWox на связи!

Спешим сообщить о выпуске бета-версии нового модуля «Телефония» для системы управления предприятием TeamWox. Теперь любой желающий может бесплатно получить функционал офисной АТС на своем рабочем месте.

alexey
487
alexey 18.01.2011 13:42 | #
paxerus:

Добрый день

не могли бы вы разъяснить,на простом примере, как при разработки своего модуля, добавить панель слева(например категории в форуме)?

Интерфейс модуля может требовать наличия левой "панели" или быть без него.

Указать серверу TeamWox, что модулю необходима левая "панель", необходимо в ответ на вызов функции ModuleGetInfo .dll вашего модуля.

В структуре ModuleInfo для поля flags необходимо указать флаг TW_MODULE_FLAG_LEFTPAGE.

//+------------------------------------------------------------------+
//| Получение информации о модуле                                    |
//+------------------------------------------------------------------+
_DLLAPI TWRESULT __cdecl ModuleGetInfo(int index, ModuleInfo *info)
  {
   if(info==NULL) return(RES_E_INVALID_ARGS);
//---
   if(index==0)
     {
      //--- заполняем структуру
      static ModuleInfo module_info=
        {
......................................................................................................
         TW_MODULE_FLAG_LEFTPAGE | TW_MODULE_FLAG_DIGITAL_SIGN | TW_MODULE_FLAG_MODULE_TAB, // флаги
......................................................................................................
        };
      memcpy(info,&module_info,sizeof(module_info));
      return(RES_S_OK);
     }
//---
   return(RES_E_NOT_FOUND);
  }

Флаги, которые можно указать для поля flags приведены в перечислении EnModuleFlags, определение которого дано в файле SDK\API\Core.h

Если в настройках модуля (структура ModuleInfo) указан соответствующий флаг, то сервер автоматически будет отображать левую "панель". Сервер указывает в качестве URL-а для  страницы отображаемой слева - /[short_module_name]/left (например, /board/left).

Вы должны реализовать в своем модуле обработку запроса на указанной URL.

renat
356
renat 18.01.2011 16:20 | #

Посмотрите исходники модуля Forum (он идет в составе SDK) - там как раз есть работа с левой панелью.

Или речь о том, чтобы внедриться в чужую левую панель существующих модулей?

paxerus
26
paxerus 19.01.2011 17:28 | #
renat:

Посмотрите исходники модуля Forum (он идет в составе SDK) - там как раз есть работа с левой панелью.

Или речь о том, чтобы внедриться в чужую левую панель существующих модулей?

хорошо посмотрю ,нет речь идет именно про свою панель,


alexey спасибо за разъяснения


paxerus
26
paxerus 20.01.2011 13:31 | #

Объясните пожалуйста для чего в модуле Форума есть структура

BoardCategory а так же класс CBoardCategory(чем они отличаются ,заем структура если есть класс), и для чег онеобходим интерфейс IBoardCategory, а то чтото как то запутанно там у вас:)

alexey
487
alexey 20.01.2011 14:03 | #
paxerus:

Объясните пожалуйста для чего в модуле Форума есть структура

BoardCategory а так же класс CBoardCategory(чем они отличаются ,заем структура если есть класс), и для чег онеобходим интерфейс IBoardCategory, а то чтото как то запутанно там у вас:)

Логика модуля форум требует наличия у категории разграничения прав доступа. Сотрудники видят в левой "панели" список категорий в зависимости от разрешений на каждую категорию.

В менеджере форума IBoards (SDK\API\Board.h) объявлены несколько методов для работы по списком категорий форума. Для того, чтобы другие модули могли работать с данным списком необходим интерфейс IBoardCategory:

class IBoards
  {
public:
   //--- работа с категориями
   virtual TWRESULT  CategoriesCount(const Context *context, int flags, int *count)                           =0;
   virtual TWRESULT  CategoriesGet(const Context *context, int flags, IBoardCategory **categories, int *count)=0;
   virtual TWRESULT  CategoryGet(const Context *context, INT64 category_id, IBoardCategory **category)        =0;
   virtual TWRESULT  CategoryGet(const Context *context, INT64 category_id, BoardCategoryInfo *category)      =0;
   virtual TWRESULT  CategoryCreate(const Context *context, IBoardCategory **category)                        =0;
   virtual TWRESULT  CategoryUpdate(const Context *context, IBoardCategory *category)                         =0;
   virtual TWRESULT  CategoryDelete(const Context *context, INT64 category_id)                                =0;
...........................................
  };

С целью повышения производительности список категорий кешируется в памяти. Он запрашивается из БД один раз при инициализации модуля Форум.

Структура BoardCategory используется для хранения записи о категории в кеше (в памяти).

Класс CBoardCategory - это реализация интерфейса IBoardCategory. Данный класс необходим для получения копии списка разрешений для категории.

Если нет необходимости получать и изменять список разрешений на категорию необходимо использовать структуру BoardCategoryInfo, которая содержит минимум необходимой информации.

paxerus
26
paxerus 20.01.2011 14:08 | #

Спасибо, теперь стало понятно

alexey
487
alexey 20.01.2011 14:11 | #

Если для Вашей задачи не нужна сложная логика с проверкой и изменением разрешений на каждую запись (категорию, фильтр и т.д.), то Вам не нужно реализовывать для этого отдельные классы и объявлять интерфейсы.

Вы можете для отображении левой "панели" список сформировать непосредственно в шаблоне.

<!-- Часть шаблона template\left.tpl -->
 var filters = [
   {"id":"index",    "name":"<lngj:MYMOD_OPENED />",   "title":"<lngj:MYMOD_OPENED_TITLE />",   "link":"\/mymodule\/index"},
   {"id":"completed","name":"<lngj:MYMOD_COMPLETED />","title":"<lngj:MYMOD_COMPLETED_TITLE />","link":"\/mymodule\/completed"},
   {"id":"closed",   "name":"<lngj:MYMOD_CLOSED />",   "title":"<lngj:MYMOD_CLOSED_TITLE />",   "link":"\/mymodule\/closed"}
];
TeamWox.Control("List",filters);
paxerus
26
paxerus 20.01.2011 14:27 | #
alexey:

Если для Вашей задачи не нужна сложная логика с проверкой и изменением разрешений на каждую запись (категорию, фильтр и т.д.), то Вам не нужно реализовывать для этого отдельные классы и объявлять интерфейсы.

Вы можете для отображении левой "панели" список сформировать непосредственно в шаблоне.


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

 Я Так понял логика такая, при запуске модуля грузится таблица с категориями, далее при любом изменении дерева(списка), мы подгружаем с базы список заного. с точки зрения С++ более или менее понятно ,но возможно придется помучатся с шаблоном вроде разобрался как сделать дерево, посмотрим что получится

alexey
487
alexey 20.01.2011 14:31 | #
paxerus:


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

 Я Так понял логика такая, при запуске модуля грузится таблица с категориями, далее при любом изменении дерева(списка), мы подгружаем с базы список заного. с точки зрения С++ более или менее понятно ,но возможно придется помучатся с шаблоном вроде разобрался как сделать дерево, посмотрим что получится

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

Описание этого и других элементов управления есть в документации (Documentation\TeamWoxSDK_russian.chm), которая идет в поставке с TeamWox SDK.

К списку тем  | 12

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий