Sunday, 20.05.2012 13:26:05, power by dbRus   Русский | English

Блог сайта dbRus

Блог сайта dbRus

Россия, 603022, г. Нижний Новгород, ул. Студенческая, д.8. Официальная почта: info2@dbrus.ru. Телефон: (831) 715-41-25
dbRus CMS - Система управления сайтом
dbRus Project - Система управления проектами и работами
dbRus SEO - История ТИЦ и PR, учёт обратных ссылок
dbRus HCR - Интернет-магазин блюд + рецепты
BB Avto - Каталог автомобильных объявлений
BB Home - Каталог объявлений о недвижимости
Все веб-приложения dbRus Group
Веб-приложения BB Group
Хостинг
Разработка веб-приложений
Разработка сайтов
Разработка информационных систем
Обучение и консультации
Услуги BB Group
Компоненты dbRus Group
Веб-приложения
Услуги
Программные продукты
Группы разработчиков и компании
Введение
Этап 1 - Проектирование веб-приложения
Этап 2 - Создание таблиц базы данных веб-приложения
Этап 3 - Формирование структуры информационной системы
Этап 3 шаг 1 - Регистрация модуля и разделов
Этап 3 шаг 2 - Регистрация форм разделов
Этап 3 шаг 3 - Регистрация бизнес-объектов, настройка операций
Этап 4 - Разработка интерфейса информационной системы
Этап 4 шаг 1 - Разработка справочников и разделов в ручном режиме
Среда разработки Qt Creator
Хранение настроек программы. Работа с INI-файлами
Переменное количество аргументов в функциях
Прикрепление файлов к записям
Вставка изображений в статью, новость или пост блога
Как я работал на заводах
Главная
Разработка веб-приложений
Фреймворк Qt
Работа с dbRus CMS
Жизнь в каменных джунглях
dbRus - Веб платформа
Инструменты Администрирования
Веб-приложение dbRus CMS - Управление сайтом
Веб-приложение dbRus CPW - Проекты и работы
Веб-приложение dbRus HCR - Интернет-магазин блюд
Все статьи...
Сравнение текстов, алгоритмов без учёта пробелов, табуляции и переноса строк
UrlEncode и UrlDecode - кодирование и декодирование строки или текста
Транслитерация слов как в ЧПУ
Выпечка
Торты и пироженные
Вторые блюда
Рубрикатор
Установка db-клиента
Список всех веб-приложений
Веб-приложение "Интернет-магазин блюд +рецепты"
Веб-приложение "Каталог автомобильных объявлений"
Веб-приложение "Учёт ПО"
Прочее
Графики работ по проектам и направлениям
История проекта
Поддержка проекта
Контакты. Обратная связь
Гocтeвaя книгa
ГлавнаяНовостиПрайс-листы Блог Статьи Online-сервисы Демо DBRus Project ПоискКарта сайта
Блог
Реклама
БЛОГ » РАЗРАБОТКА ВЕБ-ПРИЛОЖЕНИЙ » ЭТАП 4 ШАГ 1 - РАЗРАБОТКА СПРАВОЧНИКОВ И РАЗДЕЛОВ (РУЧНОЙ РЕЖИМ)
  сб 16 Апрель 2011  | Просмотров: 15
Рассмотрим разработку справочников информационной системы в ручном режиме на примере справочника "Ингредиенты". Разработка в полуавтоматическом режиме будет рассмотрена на примере разделов "Каталог рецептов" и "Заказы".
 
 
В предыдущих этапах мы зарегистрировали разделы и формы информационной системы веб-приложения "Каталог рецептов". В разделе "Формы информационной системы" отфильтруем формы по разделу "hcr - [id] - elements - Ингредиенты" и выбирем основную форму (elements - Ингредиенты). У основных форм класс всегда должен быть "Section".
 
Фильтрация секций данных
Формы информационной системы
 
1. HTML-код формы
 
Внесём следующий HTML-код для формы "Ингредиенты":
 
HTML-код формы
Код для копирования:

<div id="frm_elements_elements">
  <div id="elements_elements_spt1">
    <div id="lr_elements_groups" class="oaf"></div>
    <div id="lr_elements_elements" class="oaf"></div>
  </div>
 <script type="text/javascript">
  var spt = $('#elements_elements_spt1');
  $(spt).splitter({
    sizeLeft: 300,
    outline: outline,
    anchorToWindow: true
  });
 </script>
</div>
 
Здесь frm_elements_elements - id элемента-контейнера, по которому данная форма будет определяться в веб-браузере. Состоит из обязательного префикса frm, кода раздела ИС (elements) и кода формы (elements). elements_elements_spt1 - контейнер для создания сплиттеров на основной форме справочника, программируется через JavaScript, который присутствует в контейнере frm_elements_elements. lr_elements_groups - Контейнер для вставки дерева групп, состоит из обязательного префикса lr, кода формы elements и кода секции данных groups. lr_elements_elements - Контейнер для таблицы ингредиентов.
 
Далее, добавим и запрограммируем две секции данных - "Группы" и "Ингредиенты":
 
2. Настройка секции данных "Группы" в основной форме справочника
 
Заполните основные данные как указано на изображении. Доступные действия заполняются после того, как будет выбран бизнес-объект и добавлена секция данных (создана запись в базе данных):
 
Настройка секции данных 1
 
Для секции данных "Группы" зададим следующие алгоритмы:
 
2.1. Вкладка "PHP/SQL Dataset":
 
<? $sql = 'select f.id, f.number, f.name from hcr_group as f '; ?>
 
Здесь $sql - переменная, в которой должен быть сформирован SQL-запрос для выгрузки из БД записей из нужной нам таблицы. Таблица, которая реализует дерево папок обязательно должна иметь поле parent_id, а в запросе названа буквой f. Только тогда система автоматически правильно присоединит нужные таблицы, если они потребуются, и сформирует правильные условия выборки (то, что идёт после where).
 
2.2. Вкладка "Edit" (здесь проставить флажок "Общий алгоритм Add и Edit"):
 
<?
function seaMain($PKEY_ID, $_MSF, $_SEA, $_FIELDS, $_USER) {
  if (!$_FIELDS->name) jxErr('Не указано название группы');
  if (!$_FIELDS->number) $_FIELDS->number = nextNum('hcr_group');
  if ($_SEA->action == 2) $PKEY_ID = $_SEA->createRec(); else $_SEA->updateRec();
  return $PKEY_ID;
}
?>
 
Здесь seaMain - функция, которая вызывается системой в алгоритмах редактирования. В неё передаются несколько параметров:
 
$PKEY_ID - ИД редактируемой записи. Если запись добавляется, то $PKEY_ID = -1.
$_MSF - Мета-информация (текущий модуль, раздел, форма, бизнес-объект, секция данных и др.). См. подробности здесь. (TODO: адресовать на отдельную страницу про $_MSF).
$_SEA - Класс для работы с записями (автоматическое добавление/изменение на основании объектных описаний). См. подробности здесь.(TODO: адресовать на отдельную страницу про $_SEA).
$_FIELDS - Список значений полей. Поля доступны как свойства класса, т.е. через ->.
$_USER - Объект с информацией о текущем пользователе. См. подробности здесь. (TODO: адресовать на отдельную страницу про $_USER).
 
Функция nextNum() возвращает следующий свободный номер. Принимает 4 не обязательных аргумента: function nextNum($tbl = 'folder', $fld = 'number', $fk = 'parent_id', $fk_id = null).
 
2.3. Вкладка "Move":
 
<?
function seaMain($PKEY_ID, $_SEA, $_MSF) {
  $qr = new TSQL('update hcr_group set parent_id = ? where (id = ?)', $_SEA->destRecID, $PKEY_ID);
  $qr->free();
  return 1;
 }
?>
 
Это типичный алгоритм перемещения папки из одной в другую папку. Класс TSQL предназначен для работы с базой данных. Позволяет выполнить любой SQL-запрос и получить данные в удобном формате.
 
2.4. Вкладка "Delete":
 
<?
function seaMain($PKEY_ID, $_SEA, $_MSF) {
  if ($PKEY_ID == $_MSF->root_id) jxErr('Нельзя удалить корневую группу раздела!');
  if (getValFromDB('count(*)', 'hcr_elements', 'group_id = '.$PKEY_ID)) jxErr('Ошибка! Удалите или переместите все ингредиенты в группе!');
  if (getValFromDB('count(*)', 'hcr_group', 'parent_id = '.$PKEY_ID)) jxErr('Ошибка! Необходимо удалить или переместить все вложенные группы!');
  $qr = new TSQL('delete from hcr_group where (id = ?);', $PKEY_ID);
  $qr->free();
  return 1;
}
?>
 
Это пример алгоритма удаления одной записи бизнес-объекта. Функция jxErr() генерирует исключительную ситуацию и прерывает выполнение алгоритма. Функция getValFromDB() предназначена для получения значения одного или нескольких полей записи в одной строчке кода.
 
3. Настройка секции данных "Элементы" в основной форме справочника
 
Заполните основные данные как указано на изображении:
 
Настройка секции данных 2
 
Для секции данных "Ингредиенты" зададим следующие алгоритмы:
 
3.1. Вкладка "PHP/SQL Dataset":
 
<?
$sql = 'select id, code, name from hcr_elements';
?>
 
3.2. Вкладка "Edit" (здесь проставить флажок "Общий алгоритм Add и Edit"):
 
<?
function seaMain($PKEY_ID, $_MSF, $_SEA, $_FIELDS, $_USER) {
  if ($_SEA->action == 2) {
   $PKEY_ID = $_SEA->createRec();
  } else {
   $_SEA->updateRec();
  }
  return $PKEY_ID;
}
?>
 
3.3. Вкладка "Move":
 
<?
function seaMain($PKEY_ID, $_SEA, $_MSF) {
  $qr = new TSQL('update hcr_elements set group_id = ? where (id = ?)', $_SEA->destRecID, $PKEY_ID);
  $qr->free();
  return 1;
}
?>
 
3.4. Вкладка "Delete":
 
<?
function seaMain($PKEY_ID, $_SEA, $_MSF) {
  if (getValFromDB('count(*)', 'hcr_composition', 'element_id = '.$PKEY_ID)) jxErr('Индигриент используется в рецептах!');
  $qr = new TSQL();
  $qr->execute('delete from hcr_elements where (id = ?)', $PKEY_ID);
  $qr->free();
}
?>
 
4. Формирование списка полей дерева "Группы"
 
Добавим первое поле в секцию данных "Группы" формы "Группы":
 
Добавление поля секции данных
ИД и номер заполняются автоматически. Код прописываем строчными латинскими буквами. Он используется в шаблонах форм редактирования (в т.н. контейнерах). Название отображается в заголовке столбцов грида или дерева. Для наборов данных доступны первые несколько типов полей. Для записей - все. Стили используются для форматирования текста, вот несколько часто используемых стилей: l - (left) выравнивание слева, r - (right) выравнивание справа, cn - (center) выравнивание по центру, jsf - (justify) выравнивание по ширине, pr6 - выравнивание справа +правый отступ 6px (используется для числовых полей), nw - (nowrap) перенос слов запрещён, f6, f6b, f7, f7b, f8, f8b, f8bi, f9, f9b, f9bi, f10 и др. - размер шрифта, жирность, наклон. Например, комбинация "cn f10b nw" означает, что значение в ячейках столбца центрируется, перенос слов запрещён, размер шрифта 10pt, жирность - жирный. Ширина в пикселях указывается для столбцов, если требуется запретить растягивание ячеек по горизонтали. Видимость указывается по умолчанию (какие столбцы будут видны при первом открытии справочника). Остальные поля доступны в зависимости от текущего типа секции данных и выбранного типа поля.
 
Добавим ещё два поля так что бы у нас получился следующий список полей:
 
Список полей секции данных
 
После добавления можно менять порядок следования полей. Для этого используются пользовательские действия "Поднять позицию" и "Опустить позицию":

Кнопки пользовательских действий

Кнопка "Включить поле в SQL-запрос" предназначена для быстрого изменения поля "Используется в SQL".

 
5. Формирование списка полей таблицы "Ингредиенты"
 
Аналогично предыдущему пункту сформируем список полей и для ингредиентов:
 
Список полей секции данных
 
6. Формирование списка фильтрова таблицы "Ингредиенты"
 
Добавление фильтра
ИД и номер заполняются автоматически. Код прописываем строчными латинскими буквами. Название потом выводится в окне фильтрации слева напротив каждого фильтра. Опция может принимать следующие значения: "Обычный", "Foreign Key" (подстановка ИД записей секций данных, от которых зависит текущая), "ИД группы пользователя", "SAR (tree/grid) по таблице" (подключается к таблице-гриду, что бы выводить только те записи, которые доступны при отключённом фильтре "С учётом папки ..."), "Корневая запись - группа пользователя" (используется для вывода дерева групп пользователей). Описание классов фильтров см. здесь. CSS - набор стилей, применяемый к элементу ввода данных (input, select, textarea). Набор значений - перечень значений выпадающего списка значений (select). Бизнес-объект - php-код с вызовом функции getBObjectValues(), которая формирует список записей бизнес-объекта, например, <?getBObjectValues('sec_user','login','id<>0');?> вернёт список пользователей из таблицы sec_user, причём ИД записей сформируются автоматически, а отображаться будут значения поля login. Можно задать значение фильтра и по умолчанию (при первом открытии справочника) активировать сразу.
SQL - подключаемые строки SQL-запроса (подстановка выполняется в конце базового SQL-запроса, который прописывается во вкладке PHP/SQL-запрос на форме редактирования секции данных).
 
Добавим ещё два фильтра так, что бы получился следующий список фильтров:
 
Список фильтров секции данных
 
Далее настроим формы редактирования.
 
7. Настройка формы редактирования "Группа" и секции данных "Группа"
 
Внесём следующий HTML-код в форму "Группа":

<div id="frm_elements_group">
 <br/>
 <br/>
 <table width="100%"><tr><td class="td50"></td><td id="lr_group_group">
  <table cellspacing="0px">
   <tr><td>Номер:</td><td><div id="group_group_number"></div></td></tr>
   <tr><td>Название:</td><td><div id="group_group_name"></div></td></tr>
  </table>
 </td><td class="td50"></td></tr></table>
</div>
 
Здесь frm_elements_group - главный контейнер формы редактирования "Группа", elements - код формы, group - код секции данных. Все элементы ввода данных должны находиться внутри контейнера lr_group_group. На форме всего два элемента ввода данных: group_group_number и group_group_name. Их id состоят из кода формы group, кода секции данных group и кода поля (number и name).
 
Далее добавим новую секцию данных в форме "Группа":
 
Настройка секции данных 3
Алгоритм PHP/SQL Record:
 
<?
$sql = 'select f.id, f.number, f.name from hcr_group f where (f.id = :pkey_id) ';
?>
Алгоритм инициализации записи:

<?
$_JSON->record = Array(
  -1, # id
  '', # number
  '' # name
);
?>
 
 
Добавим поля так, что бы получился следующий список полей секции данных "Группа":
 
Список полей секции данных
 
8. Настройка формы редактирования "Ингредиент" и секции данных "Ингредиент"
 
Внесём следующий HTML-код в форму "Ингредиент":

<div id="frm_elements_element">
 <br/>
 <br/>
 <table width="100%"><tr><td class="td50"></td><td id="lr_element_element">
  <table cellspacing="0px" width="260px">
   <tr><td>Код:</td><td><div id="element_element_code"></div></td></tr>
   <tr><td>Название:</td><td><div id="element_element_name"></div></td></tr>
  </table>
 </td><td class="td50"></td></tr></table>
</div>
 
Далее добавим новую секцию данных в форме "Ингредиент":
 
Настройка секции данных 4
Алгоритм PHP/SQL Record:
 
<?
$sql = 'select id, code, name from hcr_elements where (id = :pkey_id)';
?>
 
Алгоритм инициализации записи:

<?
$_JSON->record = Array(
  -1,
  '',
  ''
);
?>
 
Добавим поля так, что бы получился следующий список полей секции данных "Ингредиент":
 
Список полей секции данных
 
9. Экспорт формы
 
После того как справочник был разработан или были произведены какие-нибудь изменения в его структуре, необходимо выполнить выгрузку html-кода формы, описания логической структуры формы, алгоритмов редактирования и SQL-запросов в папку клиента на сервере-приложений. Для этот выбираем одну или несколько нужных нам форм и в контекстном меню запускаем пользовательское действие "Экспорт формы".
 
Экспорт формы
 
10. Итоги
 
На разработку справочника "Ингредиенты" мы затратили всего пару десятков минут! Разделы в принципе ни чем не отличаются от справочников, но разрабатываются в несколько раз дольше, т.к. количество полей и фильтров в них, как правило, на порядок больше, чем в справочниках, кроме того часто требуется предусмотреть дополнительные функции, реализованные через пользовательские действия.
Updated: 2011-06-17 15:36:09
votevotevotevotevote (голосов 0)
<< Предыдущий пост

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

Ваше имя*:

Код безопасности:
Форма входа
Наш опрос
Какие разделы сайта вы хотели бы использовать?












Облако ключевых фраз
Для красивого отображения этого блока требуется Flash Player 9 или выше
Статистика

При поддержке