• 1514
  • 1
  • 0
Нравится блог?
Подписывайтесь!

Создание календаря Тамриэля

Не так давно, играя в Skyrim, решил разобраться с календарем и системой летосчисления Тамриэля. Почитал тематические вики, немного изучил тему, и пришла идея создания программы или веб-сайта, который бы просто показывал текущую дату в стиле TES, например "1-ое число месяца Вечерней звезды" (первое Декабря).

От написания программы пришлось отказаться, сделать ее достаточно красивой и полезной, чтобы ее устанавливали и скачивали было-бы очень сложно. Поэтому я решил, что это будет сайт. Т.к. с JavaScript я не очень дружу, было решено писать все на php. Забегая вперед скажу, что сразу я не подумал о том, что функция date() в php берет время и дату установленные на сервере, поэтому мой календарь будет актуален лишь для некоторой части планеты.

С тем, каким образом будет оформлен календарь проблем не было, идея пришла сразу, сделать все как в игре, просто лист бумаги, на котором "рукописным" шрифтом была-бы написана нужная информация. Поиск текстуры листа бумаги не занял много времени, вот что нашлось:

После чего была сверстана простая страница, с блоком содержащим это изображение как фон. Фоном же страницы стал просто затемненный скриншот из игры, в итоге получилось что-то вроде этого:

Теперь, когда основа страницы была готова, нужен php код который бы превращал текущую дату непосредственно в Тамриэльскую.

Реализовано при помощи простых кейсов:

 

  1. $mon = date("n");//номер месяца 1...12
  2. switch ($mon) {//кейсы выбора имени месяца
  3. case 1:
  4. $mon_name = "Утренней звезды";//название на Тамриэльском со склонением
  5. $star_keepers = "Ритуала";//созвездие покровитель со склонением
  6. $star_keeper = "Ритуал";//созвездие покровитель без склонения
  7. $mon_realname = 'Январь';//реальное название (для вывода всплывающей подсказки в теге <abbr>)
  8. break;
  9. case 2:
  10. $mon_name = "Восхода солнца";
  11. $star_keepers = "Любовника";
  12. $star_keeper = "Любовник";
  13. $mon_realname = 'Февраль';
  14. break;
  15. case 3:
  16. $mon_name = "Первого зерна";
  17. $star_keepers = "Лорда";
  18. $star_keeper = "Лорд";
  19. $mon_realname = 'Март';
  20. break;

И так далее для 12 месяцев и 7ми дней недели.

Вы могли заметить переменную содержащую простое название месяца - $mon_realname. Она необходима для всплывающего текста подсказки при наведении мыши на название месяца или дня недели.

Теперь, выведя полученный результат на страницу мы видим примерно следующее:

Вполне приемлемо, но, пустовато. В этот момент и пришла идея сделать на странице, помимо календаря, еще и запись о том, какой праздник сегодня празднуется. Благо, тут проблем тоже не возникло, вселенная TES имеет чуть ли не самую богатую мифологию и историю из всех вымышленных вселенных, поэтому обратившись к викия-сайту по серии игр TES я получил список праздников с описаниями и датами. Дело осталось "за малым", заставить эти данные появляться на странице.

Решение пришло быстро, возможно это конечно не самый удачный и красивый способ, но он работает, а остальное не так важно. Смысл был вот в чем, информация о празднике делится на 3 категории: дата (день/месяц), название, описание. Распределив эти данные на 3 строки в текстовом файле, можно было получить отлично машинно-читаемый файл. Правда над датой пришлось немного поработать, ее я решил записывать просто в виде двух цифр с ведущими нолями, например, второе января - 0201. Выглядит примерно так:

 

  1. 0101
  2. Новый год
  3. Описание праздника может быть довольно длинным, несколько предложений
 

Теперь нужен код, который бы при каждом обращении к сайту, проверял текущую дату, заглядывал в файл с праздниками, и в случае нахождения текущей даты в списке, выводил бы 2 строки - название и описание.

 

  1. $day=date("d");
  2. $mon = date("m");
  3. $holiday_id = "$day$mon";
  4. $arr = file("data/holidays.txt"); // Считывание файла в массив
  5. for ($i = 0; $i <= count($arr); $i++)
  6. {
  7. $string = $arr[$i];
  8. $string = str_replace("\r\n","",$string);//удаляем символы перевода строк
  9. $string = str_replace("\r","",$string);//удаляем символы перевода строк
  10. $string = str_replace("\n","",$string);//удаляем символы перевода строк
  11. if ($string == $holiday_id){//если строка массива совпала с id праздника
  12. $holiday_name=$arr[$i+1];//следующие две строки это название и описание праздника, получаем их и выводим
  13. $holiday_descr=$arr[$i+2];
  14. }

Как видно из кода, сначала мы получаем дату и месяц, потом приводим их в вид четырехзначного числа. Далее считываем файл в массив, после чего запускаем цикл поиска "id" праздника в массиве. В случае совпадения считываем последующие две строки массива $arr[$i+1] и $arr[$i+2].

Небольшое отступление:
Изначально строки никак не хотели совпадать, даже если я был уверен что искомая комбинация цифр точно присутствует в файле. Позже проблема была обнаружена, при сохранении текстового файла в конце каждой строки добавляется символ перевода строки. Этот символ также считывается и в массив, и при сравнении получается что данные не совпадают. При помощи str_replace() это быстро решилось.
В итоге, получилось так:

Отдельно следует отметить что на странице использован опенсорсный веб-шрифт Alexander, подключенный в css таким образом:


  1. @font-face {
  2. font-family: 'Alexander';
  3. src: url('http://64424.selcdn.ru/webfont/alexander/alexander.eot');
  4. src: local('Alexander'), local('Alexander Regular'), url('http://64424.selcdn.ru/webfont/alexander/alexander.woff') format('woff'),
  5. url('http://64424.selcdn.ru/webfont/alexander/alexander.ttf') format('truetype');
  6. font-weight: normal;
  7. font-style: normal;
  8. }

Напоследок в правый нижний угол экрана был прикреплен блок, сообщающий что информация взята с викии The Elder Scrolls, и что эта страница использует лицензию CreativeCommons (чего требует сайт wikia).

На данный момент сайт еще не закончен, все из-за проблемы с датой и часовыми поясами, планирую добавить JavaScript, который бы узнавал дату на компьютере посетителя, и делился этой информацией с php.

Спасибо за внимание, буду рад комментариям и оценкам кода, может где-то есть критические ошибки, я не программист и учусь не по этой специальности :)

 
Zetoris
5 января 2014, 20:05
2534

Loading...

Комментарии

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

«До какой же еще степени унижения должен дойти народ?!»

«До какой же еще степени унижения должен дойти народ?!»

Министерство труда и соцзащиты провело через парламент очередной крайне неоднозначный закон, который может вызвать всплеск недовольства в стране.
openqazaqstan
15 нояб. 2017 / 11:17
  • 27783
  • 19
Самый большой мошенник в стране: об эффективной схеме развода «Казахтелеком»

Самый большой мошенник в стране: об эффективной схеме развода «Казахтелеком»

История о том, как Народный провайдер наваривается на своих клиентах, намерено не отключая услуги, и беря лишние деньги за ненужные и не оказываемые услуги.
ligaspravedlivosti
17 нояб. 2017 / 19:12
  • 20922
  • 168
«Почему я не хочу встречаться с мужчинами-казахами»

«Почему я не хочу встречаться с мужчинами-казахами»

Заранее отпишусь, данный пост не является попыткой оскорбить собственную нацию) Как говорится о вкусах не спорят, каждому свое.
Bonittta
16 нояб. 2017 / 14:28
  • 14814
  • 371
Почему катастрофический отток интеллектуальной элиты не тревожит Астану?

Почему катастрофический отток интеллектуальной элиты не тревожит Астану?

Как сообщает телеканал КТК, только за последние девять месяцев Казахстан покинули 28200 человек, из них почти пять тысяч инженеров, около 2700 экономистов и 1700 учителей.
openqazaqstan
17 нояб. 2017 / 11:00
  • 10489
  • 53
Задержан казахстанец, продававший детей в сексуальное рабство в ОАЭ и Бахрейн

Задержан казахстанец, продававший детей в сексуальное рабство в ОАЭ и Бахрейн

Подтверждаются худшие предположения, циркулирующие в соцсетях. Периодические исчезновения детей в разных регионах Казахстана объясняются не только семейными проблемами и «синими китами».
openqazaqstan
16 нояб. 2017 / 15:46
  • 7446
  • 54
О «топ-30», «топ-50» и прочих понтах можно пока забыть

О «топ-30», «топ-50» и прочих понтах можно пока забыть

В объективности выводов швейцарского банка Credit Suisse усомниться трудно – его экономические рейтинги относятся к самым авторитетным и их явно трудно упрекнуть в предвзятости
openqazaqstan
18 нояб. 2017 / 17:21
  • 5903
  • 82
«Думай как британец»: 8 вещей, которым я научилась в Великобритании

«Думай как британец»: 8 вещей, которым я научилась в Великобритании

Как два года в Великобритании изменили мою жизнь. Несколько простых вещей, которые могли бы сделать нашу жизнь лучше.
goribaldi
13 нояб. 2017 / 16:51
  • 4422
  • 28
Российским женщинам нужны казахстанские мужчины?

Российским женщинам нужны казахстанские мужчины?

Отдельные инициативы некоторых российских чиновников вызывают в Казнете приступы просто-таки гомерического ржача. Женщин в регионе – пруд пруди, а вот мужчин, с которыми они могли бы создать семьи, не хватает.
openqazaqstan
14 нояб. 2017 / 15:55
  • 2922
  • 18
«Men in black» по-казахски: «сотрудники» плевать хотели на Закон о СМИ

«Men in black» по-казахски: «сотрудники» плевать хотели на Закон о СМИ

Бесцеремонные попытки силовиков помешать работе журналистов демонстрируют, в каком правовом государстве мы живём. Разбить телефон, угрожать, бить – всё это для «сотрудников» в порядке вещей.
openqazaqstan
13 нояб. 2017 / 19:02
  • 2570
  • 33