====== Создание объектной модели и первоначальная генерация 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]].