====== 8.4. Файл lang_and_time_zone.php ====== Этот файл выполняет функцию начального экрана установщика и предоставляет пользователю выбор язык приложения и временную зону, а также создает файл конфигурации **config.php** в директории **/includes/** и записывает в него переменные **$lang_select** и **$timezone_select**, полученные из форм выбора. * **$lang_select** - выбор языка приложения (русский и англиский, при необходимости можно добавлять переводы) * **$timezone_select** - время сервера приложения (время написания поста, время отправки сообщений и т.д.) ===== Формы =====
* **form action="install.php"** - указывает обработчик, к которому обращаются данные формы при их отправке на сервер. В нашем случае это переход к файлу **install.php** (подробнее файл install.php будет описан в Главе 8.6). :!: **Внимание:** \\ Файл **lang_and_time_zone.php** будет подключен внутри и будет отображать данные в теле файла **install.php**, поэтому **form action="install.php"** будет просто обновлять страницу при отправки данных на сервер. * **method="post"** - в отличие от метода **GET**, который используется для получения данных, **POST** служит для отправки данных на сервер. В файле **lang_and_time_zone.php** у нас будет два вида формы для наглядности * **input type="radio"** - переключатель * **select type="text"** - выпадающий список ==== Переключатель ==== Используется для примера, при добавлении большего количества переводов приложения, целесообразнее, использовать "выпадающий список".
* **input type="radio"** - переключатель * **method="post"** - в отличие от метода **GET**, который используется для получения данных, **POST** служит для отправки данных на сервер. * **id="lang_english"** - идентификатор формы * **name="lang_selection"** - имя формы * **value="english"** - принимаемое значение * **checked** - определяет выбор формы переключателя (т.е. выбран по умолчанию) * **label for="lang_english"** - надпись для элимента * **br** - перенос на следующую строку ==== Выпадающий список ==== Используется для выбора часового пояса работы сервера, т.е. при физически установленном сервере в Дании и использовании Приложения для русскоязычного населения, бедет отображаться время комминтариев "Московское". * **select type="text"** - выпадающий список * **name="timezone_selection"** - имя формы * **option value=** - определитель значение пункта списка, которое будет отправлено на сервер. Идентификатор формы, надпись для элимента и перенос на следующую строку не указываем т.к. в примере выше мы это сделали для "Чистоты кода" и на логику работы кода это не влияет (т.е. для наглядности примера, а именно: **select type="text"** - определяет выпадающий список, **name="timezone_selection"** - имя формы из которого данные получит переменная и **option value=** - значение пункта формы). Значение пункта данной формы - это всего лишь время добавляемое к времени часового пояса места установки сервера (т.е. -2, -1, 0, +1 и т.д.) и мы могли бы это записать, но для наглядности пропишем именно обозначения "таймзон". Полный список зон можно выбрать из формы ниже: Данная форма выбора будет рассмотрена в [[software:development:demo:cms:ucms:appendix_c|Приложении C]] этого руководства, пока же нас интересует 26 часовых поясов для выбора (от -11 до +14). :&11: **Пимечание:** \\ Данный код приложения, это всего лишь установщик выводимого времени и нам нет смысла создавать отдельный файл **timezones.php** с массивом со всеми **418** часовыми зонами, т.к. установщик - это не основное приложение, а визуально понятный сборщик данных для корректной работы нашего приложения. Файл **timezones.php** с массивом будет описан в [[software:development:demo:cms:ucms:appendix_c|Приложении C]] этого руководства. ==== Кнопка ====
* **input** - интерактивный элемент управления * **type=** - тип элемента для отображения * **"submit"** - кнопка для отправки формы * **value=** - значение элемента управления, в нашем случае это название кнопки "Продолжить" * **name="lang_and_time_zone"** - имя формы, которое отправляется вместе с данными формы :&11: **Пимечание:** \\ Код приведенный ниже, это всего лишь обертка нашей формы, к классу **button_lang_and_time_zone** позже будут подключенны стили ранее созданного (пока пустого) файла [[software:development:demo:cms:ucms:creating_file_install_css|install.css]] в директории **css**.
Кнопку **"Назад"** логично расположить по левому краю формы, а кнопку **"Вперед"** или **"Продолжить"** по правому. Это мы позже и пропишем в файле **install.css**.
**div class = "button_lang_and_time_zone"** - создан нами заранее, что-бы в [[software:development:demo:cms:ucms:creating_file_install_css|Главе 8.6. Файл install.css]] при указании стиля кнопки соблюсти последовательность написания данного руководства и нам в дальнейшем не прийдется вазвращатся в Файл **lang_and_time_zone.php** для "обертывания" нашей кнопки. ===== Логика формы ===== У нас имеется переключатель языков с выбранным по умолчанию Английским языком и поле выбора часовой зоны, с **Pacific/Kiritimati +14:00** по умолчанию (первая в списке выбора) и кнопка "Продолжить".\\ При нажатии кнопки будет проверенно условие, что выбор произведен, либо оставлен по умолчанию (это нам понадобиться позже для того, чтобы по умолчанию программа вывела нам язык и часовую зону сервера). Следом будет создан файл конфигурации приложения **config.php** и в него запишется наш выбор в виде объявленных переменных **$lang_select** и **$timezone_select**. После этого приложение направит нас к файлу проверки сервера **server_check.php** * **%% if(isset($_POST['lang_selection']) && isset($_POST['timezone_selection'])) {тут мы проверим, нажатие кнопки и запишем логику создания файла config.txt} * **%%if(...)%%** - логический оператор условия **ЕСЛИ** * **%%isset(...)%%** - функция определения инициализации переменной * **%%$_POST['lang_selection']%%** - глобальный ассоциативный массив **$_POST** с данными из нашей формы "Переключателя" по имени **name="lang_selection"** * **%%&&%%** - логический оператор **И** * **%%$_POST['timezone_selection']%%** - глобальный ассоциативный массив **$_POST** с данными из нашей формы "Выпадающего списка" по имени **name="timezone_selection"** Проверим что кнопка **button_lang_and_time_zone** нажата (необходимо чтобы наш код выполнялся только по нажатию, и не выполнялся при открытии, либо перезагрузке страницы). if(isset($_POST['button_lang_and_time_zone'])) {$bam="ИСТИНА"; echo "Кнопка нажата и переменной bam присвоенно значение = " . "$bam"; file_put_contents("config.txt","Hello World. Testing!"); echo "Файл config.txt создан и данные записаны!"; } else {$bam="ЛОЖЬ"; echo "Кнопка не нажата и переменной bam присвоенно значение = " . "$bam"; } * **%%if(...){...}%%** - логический оператор условия **ЕСЛИ** * **%%isset(...)%%** - функция определения инициализации переменной * **%%$_POST['button_lang_and_time_zone']%%** - глобальный ассоциативный массив **$_POST** с данными из нашей формы "Кнопка" по имени **name="button_lang_and_time_zone"** * **%%$bam="ИСТИНА"%%** - переменной **%%$bam%%** присвоили значение ="ИСТИНА" * **%%echo "...."%%** - вывели текст нажатия кнопки и значение "ИСТИНА" присвоенное переменной **%%$bam%%** * **%%else(...){...}%%** - логическая конструкция **ИНАЧЕ** оператора условия **ЕСЛИ** * **%%$bam="ЛОЖЬ"%%** - переменной **%%$bam%%** присвоили значение ="ЛОЖЬ" * **%%echo "...."%%** - вывели текст нажатия кнопки и значение "ЛОЖЬ" присвоенное переменной **%%$bam%%** * **%%file_put_contents%%** - функция записи данных в файл запишет **Hello World. Testing!** в файл **config.txt** Описанный выше код проверит условие:\\ ЕСЛИ кнопка нажата, присвоится переменной значение ИСТИНА и выведиться текст "Кнопка нажата" и значение переменной, а так же в этой-же директории будет создан файл **config.txt** и в него будет записано сообщение: Hello World. Testing!, ИНАЧЕ присвоится той же переменной значение ЛОЖЬ и выведиться текст "Кнопка не нажата" и значение переменной ====Файл test_3==== Создадим в директории **/ucms/test/** файл **test_3.php**, объединим выше разобранный нами код и запишем во вновь созданный файл следующее:
Выберите язык приложения:

Russian

Выберите часовой пояс:
'; echo "$lang_select" . '
'; echo "$timezone_select" . '
'; file_put_contents("config.txt","Hello World. Testing!"); echo "Файл config.txt создан и данные записаны!"; } } else {$bam="ЛОЖЬ"; echo "Кнопка не нажата и переменной bam присвоенно значение = " . "$bam" . '
'; echo "$lang_select" . '
'; echo "$timezone_select" . '
'; } ?>
И откроем файл **test_3.php** в браузере для проверки работы логики приложения {{:software:development:demo:cms:ucms:ucms_creat_22.png?|}} Как видно в окне приложения, кнопка "Продолжить" еще не нажата, поэтому выводится сообщение: Кнопка не нажата и переменной bam присвоенно значение = ЛОЖЬ. При этом значения переменных **%%$lang_select"%%** и **%%$timezone_select%%** не выводятся, по причине не активности кнопки формы. Не трогаем окна выбора, а просто обновим окно браузера, ничего не измениться, т.к. работает проверка нажатия кнопки. Активируем кнопку "Продолжить": Получаем сообщение: Кнопка нажата и переменной bam присвоенно значение = ИСТИНА, а так-же значения переменных **%%$lang_select"%%** = english и **%%$timezone_select%%** = Pacific/Kiritimati указанные по умолчанию, т.е. когда переключатели мы не трогали и самое главное: в директории **/ucms/test/** появился файл **config.txt**, а чем нас уведомило сообщение: Файл config.txt создан и данные записаны! {{:software:development:demo:cms:ucms:ucms_creat_23.png?|}} Проверим наш созданный файл **config.txt** и убеждаемся, что текст **Hello World. Testing!** записан. {{:software:development:demo:cms:ucms:ucms_creat_25.png?|}} Выбирем другой язык, а так же другой часовой пояс и нажмем кнопку Продолжить {{:software:development:demo:cms:ucms:ucms_creat_24.png?|}} Мы видим, что переменные **%%$lang_select"%%** и **%%$timezone_select%%** приняли другие значения. На этом проверку логики закончим. ===== 8.4. Файл lang_and_time_zone.php ===== Откроем в блокноте созданный ранее в директории **/ucms/library/install/** файл **lang_and_time_zone.php** и запишем в него код из файла **test_3.php**, убрав лишнее, а именно: * вывод на экран сообщений о нажатии кнопки и присвоении переменным **%%$lang_select"%%** и **%%$timezone_select%%** значений, а так-же вывод на экран сообщения Файл config.txt создан и данные записаны! Так-же откорректируем код в части form action="test_3.php" * заменим **form action="test_3.php"** на **form action="install.php"** * заменим **file_put_contents("config.txt","Hello World. Testing!");"** на приведенный ниже код: $file_lang_and_time_zone = '../../includes/config.php'; file_put_contents($file_lang_and_time_zone, ' ' . "\n", FILE_APPEND); header("Location: server_check.php"); * **%%$file_lang_and_time_zone = '../../includes/config.php';%%** - присвоим переменной **%%$file_lang_and_time_zone"%%** значение, указывающее путь к директории **/includes/**, где будет создан файл **%%config.php%%** * **%%../../includes/config.php%%** - значение вновь создаваемого файла **%%config.php%%** в директории **/includes/**. * **%%file_put_contents%%** - функция PHP записи в файл **%%config.php%%** месторасположение которого присвоенно переменной **%%$file_lang_and_time_zone"%%** * **%% %%** - записывается определение конца границы выполнения кода PHP * **%%header("Location:%%** - перенаправление к коду файла проверки сервера **server_check.php** В результате в файле **%%config.php%%** получим следующую запись: где переменной **%%$lang_select%%** присвоенно значение языка по умолчанию, т.е **english**, а переменной **%%$timezone_select%%** - присвоенно значение часовой зоны **Pacific/Kiritimati** {{:software:development:demo:cms:ucms:ucms_creat_26.png?|}} * в конец нашего файла добавим следующий код "Прогресс-бара", чтобы пользователь знач, где он в данный момент находиться. :&11: **Пимечание:** \\ Код приведенный выше, это всего лишь обертка блока "Погресс-бара", который будет написан на чистом css и пока соответственно мы его не видим. Позже будут подключенны стили ранее созданного (пока пустого) файла [[software:development:demo:cms:ucms:creating_file_install_css|install.css]] в директории **css** и "Погресс-бар" отобразиться. В заключении мы добавим проверку того, что если это не первая установка, т.е. файл **config.php** существует в директории **/includes**, то окно выбора языка и часовой зоны будет пропущенно и приложение переадресует нас к выбору устанавливаемой конфигурации приложения (блог, видеохостинг и.д.), за что будет отвечать файл **options.php**. Код проверки приведен ниже: include "../../includes/cons.php"; $file_config = FOLDER . '/includes/config.php'; if (file_exists($file_config)) { /* Вызов header, перенаправит пользователя на страницу /options.php в этой же директории */ header("Location: options.php"); } else { Сюда будет записан весь наш код формы } * **%%include "../../includes/cons.php";%%** - включает и оценивает код файла **cons.php** из диретории **/includes/** как PHP-код * **%%$file_config = FOLDER . '/includes/config.php';%%** - переменной **%%$file_config%%** присвоили значение **%%/includes/config.php%%** (местонахождения файла **config.php**) * **%%if(...){...}%%** - логический оператор условия **ЕСЛИ** * **%%file_exists(...)%%** - функция проверки существования указанного файла или каталога. * **%%header("Location: options.php")%%** - функция перенаправления пользователя к файлу **options.php**. * **%%else{...}%%** - логическая конструкция **ИНАЧЕ** оператора условия **ЕСЛИ** Ниже приведен отредактированный и имеющий заключительный вид код файла lang_and_time_zone.php ' . "\n", FILE_APPEND); header("Location: server_check.php"); } } } ?>
Выберите язык приложения:

Russian

Выберите часовой пояс:
Запишем его в тело файла **lang_and_time_zone.php** и откроем его в окне браузера для проверки, где после отправки формы у нас созается файл **config.php** с данными и браузер нас перенаправляет на страницу проверки сервера **server_check.php** о которой речь пойдет в следующей главе [[software:development:demo:cms:ucms:creating_file_server_check|8.5. Файл server_check.php]], а пока мы получим пустое окно. {{:software:development:demo:cms:ucms:ucms_creat_27.png?|}} Если мы повторно в адресной строке браузера набирем путь к нашему файлу **lang_and_time_zone.php**, то нас приложение перенаправит на страницу выбора конфигурации установки **options.php** {{:software:development:demo:cms:ucms:ucms_creat_28.png?|}} ← [[software:development:demo:cms:ucms:creating_file_lang|8.3. Файл lang.php]] [[software:development:demo:cms:ucms:creating_file_server_check|8.5. Файл server_check.php]] →