====== Создание объектной модели и первоначальная генерация VT ======
===== Развертывание проекта =====
>Если вы все делали правильно по инструкции и у вас Windows, то пути можно не менять и bat-файлы смело запускать, иначе анализируйте каждый свой шаг, связанный с первоначальным развертыванием проекта.
При запуске bat файлов убедитесь, что они запускаются от администратора. Помните, что при намеренном запуске файла в режиме администратора (UAC), домашняя директория меняется на %WINDIR%\System32.
Системные требования: PHP 5.2, php_mbstrings, php_mysql, php_postgres.
- Распакуйте архив в D:\Documents\Projects\PHP\Panda
- Замените файл docs\Panda.dm2 своей версией.
- Откройте файл docs\Panda.dm2 в TDM, нажмите F9.
- В качестве имени файла введите D:\Documents\Projects\PHP\Panda\docs\Panda.sql
- Нажмите кнопку Default (сохранение настроек), после этого – Generate. Таким образом, у вас появился файл docs\Panda.sql с правильной структурой базы данных.
- Перейдите в папку docs, в файл **docs\rebuild-database.bat** после строки '%PGSQL_ROOT%\createdb.exe ...' необходимо добавить следующий код:%PGSQL_ROOT%\psql.exe -U %DATABASE_USER% -f D:\usr\postgres\share\contrib\ltree.sql %DATABASE_NAME%
- Запустите файл create-hosts.bat (не забудьте посмотреть исходный код файла).
- Запустите файл rebuild-database.bat (не забудьте посмотреть исходный код файла).
- Откройте http://panda/vt/ . Логин и пароль по умолчанию – admin.
{{ :eaze:panda:login.png?300 |}}
===== Работа с MF.Devenv =====
==== Описание====
MFD – специальная программа, выполняющая следующие функции:
* создание объектной модели;
* создание представлений;
* создание классов для работы с ней;
* создание административного интерфейса;
* поддержание объектной модели в актуальном состоянии;
* перевод и локализация интерфейсов.
При желании можно проинсталлировать программу (тогда появится ассоциация с файлами проектов *.mfd). Для этого нужно запустить MF.Devenv.exe /install
В архиве в папке mfd самая последняя версия 1.5.6.102. Если у вас специфичные настройки с базой данных, то в mfd\database.config можно поменять их.
==== Основные правила работы с MFD ====
- Все изменения нужно сохранять вручную
- Ctrl+S – сохранение текущей вкладки с объектом.
- Ctrl+Shift+S – сохранение проекта целиком в файл.
- Для того чтобы создать пакет, нужно нажать Ctrl+P или правой кнопкой мыши по проекту Add New Package.
- Для того чтобы создать объект на основе таблицы, нужно нажать правой кнопкой мыши по необходимому пакету и выбрать пункт Add Entity from Database.
- Для того чтобы сгенерировать код, нужно нажать правой кнопкой мыши по необходимому пакету и выбрать пункт Run Eaze Generator.
- Для того чтобы закрыть вкладку с объектом, нужно нажать одну из комбинаций клавиш – Ctrl+F4, Ctrl+W или средней кнопкой мыши.
- Порядок добавление объектов – от базового к сложным (например, необходимо добавить сначала categories, а только потом news).
- Если после изменения значения selectbox или checkbox сразу нажать Ctrl+S без перевода фокуса на другое поле, то последние изменения не сохранятся.
- При создании Views выбирайте только те колонки в дополнительных таблицах, которые необходимы (например, в vfsFiles необходимы только fileId, folderId, title, path, а status.* можно вообще не использовать).
==== Создание объектной модели ====
- Открыть файл docs/Model/Panda.mfd.
- Создать новый пакет Panda.News (в нее будем добавлять categories, news, comments, newsRatings).
==== Добавление нового объекта из БД ====
- Вызвать Add Entity from Database.
- Выбрать соединение, базу panda и таблицу categories. Нажать «применить».
- Убрать галочки Add to View с полей status.* (для того, чтобы они не попали во view).
- Нажать на кнопку «Создать представление».
- Скопировать код view в папку docs/Views/Panda.News.sql. Добавить в него по желанию order by.
- Нажать кнопку «Ок», после Ctrl+S.
- Настроить объект.
==== Настройка объектов ====
Подробнее про [[mfd:faq|Model Flags]].
Настраиваем объект **Category**:
- Отмечаем необходимые флаги (у этого объекта их нет).
- Выбираем тип поиска по title SEARCHTYPE_ILIKE.
- Идем во вкладку templates.
- Убираем поиск по alias.
- Сохраняем объект.
Настраиваем объект **News**:
- Отмечаем флаг CanPages.
- По полям title, foreword, content ставим тип поиска SEARCHTYPE_ILIKE.
- C «createdAt» убираем галочки Addable и Updatable, ставим Nullable: Yes.
- Идем в Templates, осуществляем перевод (для тех, где пусто – ничего не пишем).
- Для categoryId нажимаем edit, изменяем Добавлять пустое = true вместо false.
- Control type для foreword ставим как HTML_TEXT.
- Снимаем галочки с List для foreword, url.
- Снимаем галочки с Edit для createdAt, rating.
- В Search снимаем галочки с createdAt, rating.
- Сохраняем объект.
Настраиваем объект **NewsRatings**:
- View для этого объекта не нужна.
- Отмечаем флаги CanPages, WithoutTemplates.
- C «createdAt» убираем галочки Addable и Updatable, ставим Nullable: Yes.
- В поле View: ставим newsRatings вместо getNewsRatings.
- Сохраняем объект.
Настраиваем объект **Comment**:
- При создании View нам нужны только поля из таблицы comments.
- Отмечаем флаг CanPages.
- По полям author, email, comment ставим тип поиска SEARCHTYPE_ILIKE.
- C «createdAt» убираем галочки Addable и Updatable, ставим Nullable: Yes.
- Control type для comment ставим как HTML_TEXT.
- Control type для IP ставим как HTML_INPUT.
- Снимаем галочки с List для createdAt.
- Снимаем галочки с Edit для createdAt.
- Удаляем строчку news.title, ставим галочку List для “newsId”.
- В Search снимаем галочки с createdAt, parentCommentId.
- Сохраняем объект.
Сохраняем проект.
==== Генерация кода ====
- Вызвать Eaze Generator для Panda.News.
- Выбрать любой класс из selectbox.
- Перейти на вкладку pages.xml, скопировать код, вставить полученный код в секцию vt в pages.xml.
- Save All -> выбираем все файлы, сохраняем.
Пересобираем базу включая Panda.News.sql. http://panda/vt/news/ - первый результат.
==== Локализация ====
- Выбираем Eaze – Language Editor.
- Выбираем File – Open.
- Выбираем Load from project, language code – ru (utf-8).
- Вводим названия для single и plural.
- Нажимаем Decline, после ОК, после – Ctrl+S.
- Открываем http://panda/vt/news/ – видим результат.
==== Добавление меню ====
- В файле etc/templates/vt/header.tmpl.php добавляем меню для news, categories, comments в виде трех отдельных верхних пунктов (без вложенности).
- Не забываем перевести их.
- Делаем пункты меню выделенным на страницах списка news, categorties, comments – по аналогии, как в static-pages (смотрим на Panda.Common.SetStaticPagesMenu в pages.xml и lib/Panda.Common/Panda.Common.xml).
==== Изменения в коде ====
SaveNewsAction.php, getFromRequest();
if ( $originalObject != null ) {
$object->newsId = $originalObject->newsId;
$object->rating = $originalObject->rating;
} else {
$object->rating = 0;
}
Черновая генерация закончена. Можно переходить разделу [[eaze:panda:работа_с_vt|Работа с VT]].