Это старая версия документа!
Содержание
Проектирование
Эта глава посвящена то, что везде и во всем должен быть порядок. Так и в рабочем столе и на кухне и тем более в созданном для конечного пользователя приложении. А если не буднт порядка, то и при создании мы получим «хаос!» и неразбериху, которые не позволят нам закончить приложение:
- написали несколько страниц кода и поняли, что упустили в середине какой-то функционал…
 - создали страницу с логикой и страница долго грузится…
 - и так далее…
 
Все это и не только, станет большим разочарованием и в большенстве заставит нас отложить разработку, а потом и вообще забросить проект.
Мы должны точно знать, что будет находиться между начальной и конечной точкой создаваемого приложения. То-есть:
- index.php - начальная точка входа в приложение.
 - «что-то просходит», к примеру подключается база данных, подключаются стили проекта, формируются таблицы, окрывается форма регистрации и т.д.
 - admin_panel.php - конечная точка приложения.
 
И вот в этом «что-то просходит» будет хаос и путаница и разочарование от написания проекта, если не составить заранее план. Нам неоходимо прописать предполагаемый план план взаимодействия приложения и пользователя, например:
- Пользователь заходит на главную страницу впервые, программа проверит:
- если приложение не установленно, то отправит пользователя в панель установки приложеня.
 - если приложение установленно, то приложение проверит регистрацию пользователя.
 - если пользователь не зарегистрирован, перенаправит на регистрацию.
 - если пользователь зарегистрирован, перенаправит на авторизацию.
 - если авторизация не прошла успешно, заблокирует на время этого пользователя.
 - если авторизация прошла успешно, откроет панель администратора.
 
 
Пока вроде бы легко и просто, но посмотрим на пункт 1.
- если приложение не установленно, то пользователь перенаправляется в панель установки приложеня, а это страница выбора языка и часовой зоны и продолжаем…
- если пользователь не выбрал язык, то
- приложение по умолчанию создаст файл конфигурации и запишет в него язык браузера или первый язык в списке приложения
 
 - если пользователь не выбрал часовую зону, то
- приложение определит время сервера и запишет его в файл конфигурации…
 
 
 
Легко? Вроде бы легко, но мы уже не учли, что после выбора языка приложение должно переключить нашу страницу в выбранный язык, а какие языки у приложения будут? И пользователю после выбора нужно подтвердить кнопкой «Продолжить», а иначе приложение, установит язик по умолчанию, не дождавшись выбора пользователя…
Лугко? Вроды бы «ДА», но как-то не то, что мы ожидали и хочется пропустить этот пунк, но увы, если мы напишем приложение, согласно данной инструкции, то получим приложение, которое уже кто-то написал для учебной цели этой инструкции, и уже есть готовая версия этого приложения. Вы сможите загрузить, как демонстрационную, так и рабочую версию для некоммерческого использования. Прочитав руководство вы сможите модифицировать код под себя и т.д., это позволяет лицензия. Но если вы решите написать свое, то без проекта вам не обойтись, а он в свою очередь облегчит вам работу по написаю кода. Готовы потрать время на проект? Если «Да», продолжаем:
Начало проекта
Запишем основные действия пользователя будущего приложения:
- Пользователь заходит на главную страницу впервые, программа проверит:
- если приложение не установленно, то отправит пользователя в панель установки приложеня.
 - если приложение установленно, то приложение проверит регистрацию пользователя.
 - если пользователь не зарегистрирован, перенаправит на регистрацию.
 - если пользователь зарегистрирован, перенаправит на авторизацию.
 - если авторизация не прошла успешно, заблокирует на время этого пользователя.
 - если авторизация прошла успешно, откроет панель администратора.
 - если открыта панель администратора, но не установлена конфигурация (видеохостинг, блог или социальная сеть), то приложение придложит сделать выбор и установить.
 - если открыта панель администратора и установлена конфигурация (видеохостинг), то приложение придложит сделать выбор между закрытой или открытой.
- если открытая, то можно ли регистрироваться и т.д.. (Видеохостинг описан в руководстве по написанию 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
- если приложение установленно, то приложение проверит регистрацию пользователя.
 - если пользователь не зарегистрирован, перенаправит на регистрацию.
 - если пользователь зарегистрирован, перенаправит на авторизацию.
 - если авторизация не прошла успешно, заблокирует на время этого пользователя.
 - если авторизация прошла успешно, откроет панель администратора.
 
