| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | 
| software:development:demo:cms:ucms:planning [2025/05/08 11:42]  – [Начало проекта]  vladpolskiy | software:development:demo:cms:ucms:planning [2025/05/11 12:58] (текущий)  – внешнее изменение 127.0.0.1 | 
|---|
| ====== Проектирование ======  | ====== 4. Проектирование ======  | 
| Эта глава посвящена то, что везде и во всем должен быть порядок. Так и в рабочем столе и на кухне и тем более в созданном для конечного пользователя приложении. А если не буднт порядка, то и при создании мы получим "хаос!" и   | Эта глава посвящена тому, что везде и во всем должен быть порядок. Так и в рабочем столе и на кухне и   | 
| неразбериху, которые не позволят нам закончить приложение: | тем более в созданном для конечного пользователя приложении. А если не будет порядка,   | 
|   | то и при создании мы получим "хаос!" и неразбериху, которые не позволят нам закончить приложение: | 
|   * написали несколько страниц кода и поняли, что упустили в середине какой-то функционал... |   * написали несколько страниц кода и поняли, что упустили в середине какой-то функционал... | 
|   * создали страницу с логикой и страница долго грузится... |   * создали страницу с логикой и страница долго грузится... | 
 |  | 
| Мы должны точно знать, что будет находиться между начальной и конечной точкой создаваемого приложения. То-есть: | Мы должны точно знать, что будет находиться между начальной и конечной точкой создаваемого приложения. То-есть: | 
|   * index.php - начальная точка входа в приложение.  |   * **index.php** - начальная точка входа в приложение.  | 
|   * "что-то просходит", к примеру подключается база данных, подключаются стили проекта, формируются таблицы, окрывается форма регистрации и т.д.  |   * **"что-то просходит"**, к примеру подключается база данных, подключаются стили проекта, формируются таблицы, окрывается форма регистрации и т.д.  | 
|   * admin_panel.php - конечная точка приложения.   |   * **admin_panel.php** - конечная точка приложения.   | 
| И вот в этом "что-то просходит" будет хаос и путаница и разочарование от написания проекта, если не составить заранее план. Нам неоходимо прописать предполагаемый план план взаимодействия приложения и пользователя, например: | И вот в этом **"что-то просходит"** будет хаос и путаница и разочарование от написания проекта, если не составить заранее план. Нам неоходимо прописать предполагаемый план план взаимодействия приложения и пользователя, например: | 
|   * Пользователь заходит на главную страницу впервые, программа проверит: |   * Пользователь заходит на главную страницу впервые, программа проверит: | 
|     - если приложение не установленно, то отправит пользователя в панель установки приложеня. |     - если приложение не установленно, то отправит пользователя в панель установки приложеня. | 
| Легко? Вроде бы легко, но мы уже не учли, что после выбора языка приложение должно переключить нашу страницу в выбранный язык, а какие языки у приложения будут? И пользователю после выбора нужно подтвердить кнопкой "Продолжить", а иначе приложение, установит язик по умолчанию, не дождавшись выбора пользователя... | Легко? Вроде бы легко, но мы уже не учли, что после выбора языка приложение должно переключить нашу страницу в выбранный язык, а какие языки у приложения будут? И пользователю после выбора нужно подтвердить кнопкой "Продолжить", а иначе приложение, установит язик по умолчанию, не дождавшись выбора пользователя... | 
 |  | 
| Лугко? Вроды бы "ДА", но как-то не то, что мы ожидали и хочется пропустить этот пунк, но увы, если мы напишем приложение, согласно данной инструкции, то получим приложение, которое уже кто-то написал для учебной цели этой инструкции, и уже есть готовая версия этого приложения. Вы сможите загрузить, как демонстрационную, так и рабочую версию для некоммерческого использования. Прочитав руководство вы сможите модифицировать код под себя и т.д., это позволяет лицензия. Но если вы решите написать свое, то без проекта вам не обойтись, а он в свою очередь облегчит вам работу по написаю кода. Готовы потрать время на проект? Если "Да", продолжаем: | Лугко? Вроды бы "ДА", но как-то не то, что мы ожидали и хочется пропустить эту главу, но увы, если мы напишем приложение, согласно данной инструкции, то получим приложение, которое уже кто-то написал для учебной цели этой инструкции, и уже есть готовая версия этого приложения. Вы сможите загрузить, как демонстрационную, так и рабочую версию для некоммерческого использования. Прочитав руководство вы сможите модифицировать код под себя и т.д., это позволяет лицензия. Но если вы решите написать свое, то без проекта вам не обойтись, а он в свою очередь облегчит вам работу по написаю кода. Готовы потрать время на проект? Если "Да", продолжаем: | 
 |  | 
| ===== Начало проекта =====  | <note blue>  | 
| Запишем основные действия пользователя будущего приложения:  | <wrap left>← [[software:development:demo:cms:ucms:software|3. Программное обеспечение]]</wrap>   | 
|   * Пользователь заходит на главную страницу впервые, программа проверит:  | <wrap right>[[software:development:demo:cms:ucms:creating_project|4.1 Создание проекта]] →</wrap>  | 
|     - если приложение не установленно, то отправит пользователя в панель установки приложеня.  | </note> | 
|     - если приложение установленно, то приложение проверит регистрацию пользователя.   |  | 
|     - если пользователь не зарегистрирован, перенаправит на регистрацию.  |  | 
|     - если пользователь зарегистрирован, перенаправит на авторизацию.   |  | 
|     - если авторизация не прошла успешно, заблокирует на время этого пользователя.  |  | 
|     - если авторизация прошла успешно, откроет панель администратора.  |  | 
|     - если открыта панель администратора, но не установлена конфигурация (видеохостинг, блог или социальная сеть), то приложение придложит сделать выбор и установить.  |  | 
|     - если открыта панель администратора и установлена конфигурация (видеохостинг), то приложение придложит сделать выбор между закрытой или открытой.  |  | 
|       - если открытая, то можно ли регистрироваться и т.д.. (Видеохостинг описан в руководстве по написанию UCMS Video, что является продолжение данного руководства). А в этом, мы остановимся на выборе конфигурации, окне настройки, установке дополнительных модулей (загрузка файлов, почта, редактор текста, двуфакторная авторизация и т.д.), добавление шаблонов, языков и прочее, а пока...  |  | 
|   |  | 
| В наш маленький проект внесем дополнения:  |  | 
|   * Пользователь заходит на главную страницу **index.php** впервые, программа проверит:  |  | 
|     - если приложение не установленно (файлы **config.ini**, **version.txt** не существуют), то отправит пользователя в панель установки приложеня (файл **install.php**) в директорию **/install**.  |  | 
|     - панель установки приложеня (файл **install.php**) предложит выбрать язык (английский/русский)  |  | 
|     - по умолчанию предложен английский (файл **english.php**) в дирректории **lang** установщика  |  | 
|     - при выборе русский (файл **russian.php**) в дирректории **lang** установщика **/install** переключит установщик на русский язык и будет ожидать выбора часового пояса (форма выбора **timezone** -12, 0, +12)  |  | 
|     - после выбора станет активной кнопка "Продолжить", при нажатии на которую, данные lang_select и timezone_select будут записаны в файл конфигурации **config.ini**  |  | 
|     - пользователь будет перенаправлен к окну проверки совместимости сервера (файл **check_server.php**)  |  | 
|   |  | 
| Пока остановимся. Откуда названия файлов и директорий (папок)? Придумываем имена файлам сами, чтобы нам проще было понять, например:  |  | 
|   * config - в переводе с английского конфигурация  |  | 
|   * install - установка  |  | 
|   * lang - язык  |  | 
|   * check_server - проверить сервер  |  | 
|   * timezone - часовой пояс и т.д.  |  | 
| Таким образом, мы всегда будем понимать, что директория **/install** - это папка установки, а переменная lang_select - выбор языка, стало быть **%%lang_select_russian%%** - выбор языка русский.  |  | 
|   |  | 
| Подумаем еще немного... А где будет распологаться наше приложение? В корне сайте **%%./%%** или в директории **/ucms**! Мы не знаем что хочет пользователь, т.е. сделаем в директории **/ucms** без привязки к директории, а за это будет отвечать файл, где будут постоянные данные - константы (стало быть **cons.php**). Т.к. **cons.php** и **config.ini** являются конфигурационными, то целесообразно использовать отдельную директорию **/config**  |  | 
|   |  | 
| Продолжим наш план-проект...  |  | 
|   |  | 
|   * Пользователь заходит в директорию **/ucms** на главную страницу файл **index.php** впервые, программа проверит:  |  | 
|     - если приложение не установленно (файлы **config.ini**, **version.txt** не существуют), то отправит пользователя в панель установки приложеня (файл **install.php**) в директорию **/install**.  |  | 
|     - панель установки приложения (файл **install.php**) предложит выбрать язык (английский/русский)  |  | 
|     - по умолчанию предложен английский (файл **english.php**) в дирректории **lang** установщика  |  | 
|     - при выборе русский (файл **russian.php**) в дирректории **lang** установщика **/install** переключит установщик на русский язык и будет ожидать выбора часового пояса (форма выбора **timezone** -12, 0, +12)  |  | 
|     - после выбора станет активной кнопка "Продолжить", при нажатии на которую, данные lang_select и timezone_select будут записаны в файл конфигурации **config.ini** в дирректории **/config**  |  | 
|     - пользователь будет перенаправлен к окну проверки совместимости сервера (файл **check_server.php**), который запросит наличие файла **version.txt**  |  | 
|     - если **version.txt** не существует (т.е. проверка сервера не проводилась), то приложение перейдет к файлу **check_server.php** и проверит сервер....  |  | 
|     - если **version.txt** существует (т.е. проверка сервера ранее проводилась), то приложение перейдет к запросу данных для подключения к приложению баз данных (файл **db_config.php**)  |  | 
|   |  | 
| По мере написания проекта мы видим, что мы пишем "логику" работы приложения, на "научном" языке это называется - "алгоритм", и мы уже видим за какие действия отвечает тот или иной файл и где находится. Мы можем это отобразить формой записи алгоритма и это будет более наглядно для понимания.   |  | 
|   |  | 
| === Карточки === |  | 
 |  | 
| Проще все визиулизировать, написав/нарисовав карточки (соотвествуют отображению на экране), они же файлы и директории и три кружочка: пользователь, зарегистрированный пользователь и администратор.  |   | 
| На карточке название: **version.txt**, **db_config.php** и т.д. и в карточках пишем заметки: что делает эта карточка и зарисовки экрана пользователя, а на обратной стороне наброски кода, предварительные таблицы массивов и т.д. |   | 
 |  | 
| Надеемся, что прочитав данную главу стало понятно, откуда берутся названия файлов, директорий, переменных и т.д. И главное откуда мы знаем, что будет дальше! Потому что у нас есть - план! При этом мы не будем в этом руководстве писать полный проект, а поверхносто будем коментировать, что и для чего мы создаем и что в итоге получим. |   |