Шаблон:День в истории: различия между версиями

Материал из IFВики
Перейти к навигации Перейти к поиску
(Адаптация к датам дней рождения без явного указания года)
м
 
(не показано 14 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
<noinclude>
 
<noinclude>
 
Шаблон, отображающий информацию о различных исторических событиях на конкретную дату. Показывает первые релизы проектов (свойство "Дата первого релиза"), релизы игр (свойство "Дата") и дни рождения (свойство "День рождения"), приходящиеся на заданный день года. В качестве необязательного аргумента может принимать дату в формате ДД.ММ, например, <nowiki>{{День в истории|13.09}}</nowiki>, информацию по которой надо показать. Без указания даты отображает информацию для текущего дня согласно настройкам сервера.
 
Шаблон, отображающий информацию о различных исторических событиях на конкретную дату. Показывает первые релизы проектов (свойство "Дата первого релиза"), релизы игр (свойство "Дата") и дни рождения (свойство "День рождения"), приходящиеся на заданный день года. В качестве необязательного аргумента может принимать дату в формате ДД.ММ, например, <nowiki>{{День в истории|13.09}}</nowiki>, информацию по которой надо показать. Без указания даты отображает информацию для текущего дня согласно настройкам сервера.
 
Примечание: Сейчас в [[IFВики]] {{#ask: [[Категория:Персоналии]] [[День рождения::+]] | format=count }} страниц со свойством "[[:Свойство:День рождения|День рождения]]" в категории "[[:Категория:Персоналии|Персоналии]]". Когда это число достигнет 500, реализованный в шаблоне алгоритм выявления дней рождения на конкретную дату перестанет работать корректным образом (будут теряться дни рождения за пределами первых 500) из-за лимита возвращаемого числа результатов функции встраиваемых запросов #ask. Потребуется изменение реализации.
 
 
</noinclude><div style="display: none;">
 
</noinclude><div style="display: none;">
{{#if: {{{1|}}} |{{#vardefine:sDayMonth| {{{1}}} }}
+
<!-- Проверяем, передан ли шаблону аргумент. -->
{{#arraydefine:aDate|{{{1}}}|.}}
+
{{#if: {{{1|}}} |
{{#switch: {{#arrayindex:aDate|1}} | 01 = {{#vardefine:sCurrentMonthNameGen|января}} | 02 = {{#vardefine:sCurrentMonthNameGen|февраля}} | 03 = {{#vardefine:sCurrentMonthNameGen|марта}} | 04 = {{#vardefine:sCurrentMonthNameGen|апреля}} | 05 = {{#vardefine:sCurrentMonthNameGen|мая}} | 06 = {{#vardefine:sCurrentMonthNameGen|июня}} | 07 = {{#vardefine:sCurrentMonthNameGen|июля}} | 08 = {{#vardefine:sCurrentMonthNameGen|августа}} | 09 = {{#vardefine:sCurrentMonthNameGen|сентября}} | 10 = {{#vardefine:sCurrentMonthNameGen|октября}} | 11 = {{#vardefine:sCurrentMonthNameGen|ноября}} | 12 = {{#vardefine:sCurrentMonthNameGen|декабря}} }}
+
<!-- Переданный аргумент принимаем как числовое значение даты в формате ДД.ММ -->
{{#vardefine:sDayMonthName| {{#expr: {{#arrayindex:aDate|0}} + 0}} {{#var:sCurrentMonthNameGen}} }}
+
{{#vardefine:sDayMonth| {{{1}}} }}
{{#vardefine:sDayMonthNameGL| {{#var:sCurrentMonthNameGen}} {{#expr: {{#arrayindex:aDate|0}} + 0}} GL }}
+
<!-- Разбиваем строку аргумента по знаку точки на две подстроки. -->
|{{#vardefine:sDayMonth| {{CURRENTDAY2}}.{{CURRENTMONTH}} }}
+
{{#arraydefine:aDate|{{{1}}}|.}}
{{#vardefine:sCurrentMonthNameGen| {{CURRENTMONTHNAMEGEN}} }}
+
<!-- В зависимости от номера месяца определяем его словесное название в родительном падеже. -->
{{#vardefine:sDayMonthName| {{CURRENTDAY}} {{#var:sCurrentMonthNameGen}} }}
+
{{#switch: {{#arrayindex:aDate|1}} | 01 = {{#vardefine:sCurrentMonthNameGen|января}} | 02 = {{#vardefine:sCurrentMonthNameGen|февраля}} | 03 = {{#vardefine:sCurrentMonthNameGen|марта}} | 04 = {{#vardefine:sCurrentMonthNameGen|апреля}} | 05 = {{#vardefine:sCurrentMonthNameGen|мая}} | 06 = {{#vardefine:sCurrentMonthNameGen|июня}} | 07 = {{#vardefine:sCurrentMonthNameGen|июля}} | 08 = {{#vardefine:sCurrentMonthNameGen|августа}} | 09 = {{#vardefine:sCurrentMonthNameGen|сентября}} | 10 = {{#vardefine:sCurrentMonthNameGen|октября}} | 11 = {{#vardefine:sCurrentMonthNameGen|ноября}} | 12 = {{#vardefine:sCurrentMonthNameGen|декабря}} }}
{{#vardefine:sDayMonthNameGL| {{#var:sCurrentMonthNameGen}} {{CURRENTDAY}} GL }}
+
<!-- Определяем название даты в виде строки с номером дня (без нуля в начале) и словесного названия месяца в родительном падеже. -->
 +
{{#vardefine:sDayMonthName| {{#expr: {{#arrayindex:aDate|0}} + 0}} {{#var:sCurrentMonthNameGen}} }}
 +
|
 +
<!-- Если шаблон вызван без аргумента, то за числовую дату в формате ДД.ММ принимаем текущую дату с сервера. -->
 +
{{#vardefine:sDayMonth| {{CURRENTDAY2}}.{{CURRENTMONTH}} }}
 +
<!-- Определяем словесное название месяца в родительном падеже. -->
 +
{{#vardefine:sCurrentMonthNameGen| {{CURRENTMONTHNAMEGEN}} }}
 +
<!-- Определяем название даты в виде строки с номером дня (без нуля в начале) и словесного названия месяца в родительном падеже. -->
 +
{{#vardefine:sDayMonthName| {{CURRENTDAY}} {{#var:sCurrentMonthNameGen}} }}
 
}}
 
}}
 +
<!-- Определяем массив годов, актуальных для контента вики. -->
 
{{#arraydefine:aYears}}
 
{{#arraydefine:aYears}}
{{#arraydefine:aCategories| {{#ask: [[Категория:+]] | limit=500 | link=none | sep=SUPERMEGADELIMITER }} |SUPERMEGADELIMITER }}
+
<!-- Нижеследующий запрос обрабатывает только 500 первых по алфавиту категорий, но числовые названия идут как раз впереди, так что этого неполного среза хватит на несколько ближайших веков. -->
 +
{{#arraydefine:aCategories| {{#ask: [[Категория:+]] | limit=500 | link=none | searchlabel= | sep=SUPERMEGADELIMITER }} |SUPERMEGADELIMITER }}
 +
<!-- Отбираем только категории, чьи названия состоят из четырёх цифр. -->
 
{{#arraysearcharray:aCategories|aCategories|/^Категория:\d{4}$/}}
 
{{#arraysearcharray:aCategories|aCategories|/^Категория:\d{4}$/}}
{{#arrayprint:aCategories| |@@@@| {{#arraydefine:aTemp|@@@@|:}} {{#vardefine:sTemp| {{#arrayindex:aTemp|1}} }} {{#ifeq: {{#var:sTemp}} | {{CURRENTYEAR}} | | {{#arraydefine:aTemp| {{#var:sTemp}} }} {{#arraymerge:aYears|aYears|aTemp}} }} }}
+
<!-- Перебираем массив категорий, выполняя ряд проверок и наполняя массив годов. -->
 +
{{#arrayprint:aCategories| |@@@@|
 +
<!-- Определяем номер года, вырезая его из названия категории. -->
 +
{{#arraydefine:aTemp|@@@@|:}}
 +
{{#vardefine:iYear| {{#arrayindex:aTemp|1}} }}
 +
<!-- Определяем переменную-флаг, по значению которой год в итоге будет или не будет включаться в массив. -->
 +
{{#vardefine:bYear|1}}
 +
<!-- Отбрасываем год, если он является текущим. -->
 +
{{#ifeq: {{#var:iYear}} | {{CURRENTYEAR}} | {{#vardefine:bYear|0}} |
 +
<!-- Для даты 29.02 берём только високосные годы. -->
 +
{{#ifeq: {{#var:sDayMonth}} | 29.02 |
 +
{{#ifeq: {{#time: L | {{#var:iYear}} }} | 0 | {{#vardefine:bYear|0}} | }}
 +
| }}
 +
}}
 +
<!-- Если после всех проверок значение флага не изменилось, то включаем год в массив. -->
 +
{{#ifeq: {{#var:bYear}} | 1 |
 +
{{#arraydefine:aTemp| {{#var:iYear}} }}
 +
{{#arraymerge:aYears|aYears|aTemp}}
 +
| }}
 +
}}
 +
<!-- Определяем массив продуктов с первым релизом в заданную дату. -->
 
{{#arraydefine:aReleases}}
 
{{#arraydefine:aReleases}}
{{#arrayprint:aYears| |@@@@| {{#arraydefine:aTemp| {{#ask: [[Дата первого релиза::{{#var:sDayMonth}}.@@@@]] [[Дата первого релиза::!@@@@]] | limit=500 | link=none | sep=SUPERMEGADELIMITER }} |SUPERMEGADELIMITER}} {{#arraymerge:aReleases|aReleases|aTemp}} }}
+
<!-- Перебираем все года из массива, проверяя в каждом наличие первых релизов в заданную дату. -->
 +
{{#arrayprint:aYears| |@@@@|
 +
<!-- Здесь и далее в запросе явно отбрасываем даты в виде просто года, потому что иначе они будут подходить к любому текущему дню года. -->
 +
{{#arraydefine:aTemp| {{#ask: [[Дата первого релиза::{{#var:sDayMonth}}.@@@@]] [[Дата первого релиза::!@@@@]] | limit=500 | link=none | searchlabel= | sep=SUPERMEGADELIMITER }} |SUPERMEGADELIMITER}}
 +
{{#arraymerge:aReleases|aReleases|aTemp}}
 +
}}
 +
<!-- Определяем массив игр с релизом в заданную дату. -->
 
{{#arraydefine:aGames}}
 
{{#arraydefine:aGames}}
{{#arrayprint:aYears| |@@@@| {{#arraydefine:aTemp| {{#ask: [[Категория:Игры]] [[Дата::{{#var:sDayMonth}}.@@@@]] [[Дата::!@@@@]] | limit=500 | link=none | sep=SUPERMEGADELIMITER }} |SUPERMEGADELIMITER}} {{#arraymerge:aGames|aGames|aTemp}} }}
+
<!-- Перебираем все года из массива, проверяя в каждом наличие релизов игр в заданную дату. -->
 +
{{#arrayprint:aYears| |@@@@|
 +
<!-- Определяем массив всех игр с релизом в заданную дату для конкретного года. -->
 +
{{#arraydefine:aAllGames| {{#ask: [[Категория:Игры]] [[Дата::{{#var:sDayMonth}}.@@@@]] [[Дата::!@@@@]] | limit=500 | link=none | searchlabel= | sep=SUPERMEGADELIMITER }} |SUPERMEGADELIMITER}}
 +
<!-- Перебираем все игры из массива, чтобы отсеять игры с нежелательной тематикой. -->
 +
{{#arrayprint:aAllGames| |@|
 +
<!-- Добавляем в итоговый массив игр только игры без темы "18+". -->
 +
{{#arraydefine:aTemp| {{#show: @ | ?Тема | link=none }} }}
 +
{{#if: {{#arraysearch:aTemp|18+}} | |
 +
{{#arraydefine:aTemp|@|SUPERMEGADELIMITER}}
 +
{{#arraymerge:aGames|aGames|aTemp}}
 +
}}
 +
}}
 +
}}
 +
<!-- Определяем общее количество дней рождения у персоналий в вики. -->
 +
{{#vardefine:iBirthdays| {{#ask: [[Категория:Персоналии]] [[День рождения::+]] | format=count }} }}
 +
<!-- Определяем количество тактов цикла, необходимое для перебора всего набора дней рождения порциями по 500. -->
 +
{{#vardefine:iLoops| {{#expr: {{#var:iBirthdays}} / 500 + 1 round 0}} }}
 +
<!-- Определяем массив всех дней рождения в вики. -->
 +
{{#arraydefine:aAllBirthdays}}
 +
{{#loop: iLoop | 0 | {{#var:iLoops}} |
 +
{{#arraydefine:aTemp| {{#ask: [[Категория:Персоналии]] [[День рождения::+]] | limit=500 | link=none | offset={{#expr: {{#var:iLoop}}*500}} | searchlabel= | sep=SUPERMEGADELIMITER }} |SUPERMEGADELIMITER}}
 +
{{#arraymerge:aAllBirthdays|aAllBirthdays|aTemp}}
 +
}}
 +
<!-- Определяем массив дней рождения в заданную дату. -->
 
{{#arraydefine:aBirthdays}}
 
{{#arraydefine:aBirthdays}}
{{#arraydefine:aAllBirthdays| {{#ask: [[Категория:Персоналии]] [[День рождения::+]] | limit=500 | link=none | sep=SUPERMEGADELIMITER }} |SUPERMEGADELIMITER}}
+
<!-- Перебираем все дни рождения из массива, проверяя для каждого соответствие заданной дате. -->
{{#arrayprint:aAllBirthdays| |@@@@| {{#vardefine:sTemp| {{#show: @@@@ | ?День рождения }} }} {{#arraydefine:aTemp| {{#var:sTemp}} | {{#var:sDayMonthName}} }} {{#ifeq: {{#arraysize:aTemp}} | 2 | {{#if: {{#arrayindex:aTemp|0}} | | {{#arraydefine:aTemp|@@@@|SUPERMEGADELIMITER}} {{#arraymerge:aBirthdays|aBirthdays|aTemp}} }} | {{#ifeq: {{#var:sTemp}} | {{#var:sDayMonthNameGL}} | {{#arraydefine:aTemp|@@@@|SUPERMEGADELIMITER}} {{#arraymerge:aBirthdays|aBirthdays|aTemp}} | }} }} }}
+
{{#arrayprint:aAllBirthdays| |@@@@|
 +
<!-- Выполняем проверку вхождения заданных номера дня и названия месяца в строку даты дня рождения. -->
 +
{{#arraydefine:aTemp| {{#show: @@@@ | ?День рождения }} | {{#var:sDayMonthName}} }}
 +
<!-- При валидном вхождении, строка дня рождения должна разбиться на два фрагмента, причём, первый фрагмент должен быть пустым. -->
 +
{{#ifeq: {{#arraysize:aTemp}} | 2 |
 +
{{#if: {{#arrayindex:aTemp|0}} | |
 +
{{#arraydefine:aTemp|@@@@|SUPERMEGADELIMITER}}
 +
{{#arraymerge:aBirthdays|aBirthdays|aTemp}}
 +
}}
 +
| }}
 +
}}
 +
<!-- Отдельно определяем массив дней рождения в заданную дату, но без указанного года, прибавляя его к ранее полученным результатам. -->
 +
{{#arraydefine:aAllBirthdays| {{#ask: [[Категория:Персоналии]] [[День рождения::{{#var:sDayMonthName}}]] | limit=500 | link=none | searchlabel= | sep=SUPERMEGADELIMITER }} |SUPERMEGADELIMITER}}
 +
{{#arraymerge:aBirthdays|aBirthdays|aAllBirthdays}}
 +
<!-- Определяем количество памятных дат отдельно по каждому типу, а также вместе. -->
 
{{#vardefine:iReleases| {{#arraysize:aReleases}} }}
 
{{#vardefine:iReleases| {{#arraysize:aReleases}} }}
 
{{#vardefine:iGames| {{#arraysize:aGames}} }}
 
{{#vardefine:iGames| {{#arraysize:aGames}} }}
Строка 30: Строка 103:
 
{{#vardefine:iHolidays| {{#expr: {{#var:iReleases}} + {{#var:iGames}} + {{#var:iBirthdays}} }} }}
 
{{#vardefine:iHolidays| {{#expr: {{#var:iReleases}} + {{#var:iGames}} + {{#var:iBirthdays}} }} }}
 
</div>
 
</div>
 +
<!-- Вывод информации только тогда, когда есть хотя бы одна памятная дата. -->
 
{{#ifeq: {{#var:iHolidays}} | 0 | |
 
{{#ifeq: {{#var:iHolidays}} | 0 | |
 
== Этот день в истории ==
 
== Этот день в истории ==
 
{{#ifeq: {{#var:iReleases}} | 0 | |
 
{{#ifeq: {{#var:iReleases}} | 0 | |
 
=== Релизы ===
 
=== Релизы ===
{{#var:sDayMonthName}} произошёл первый релиз {{plural:{{#var:iReleases}}|{{#var:iReleases}} проекта|{{#var:iReleases}} проектов|{{#var:iReleases}} проектов}}:
+
{{#var:sDayMonthName}} произошёл первый релиз {{#var:iReleases}} {{plural:{{#var:iReleases}}|проекта|проектов|проектов}}:
 
<ul>
 
<ul>
 
{{#arrayprint:aReleases| |@@@@|
 
{{#arrayprint:aReleases| |@@@@|
 +
<!-- Разбиваем строку даты по названию месяца в родительном падеже, получая во второй подстроке число с номером года. -->
 
{{#arraydefine:aDate|{{#show: @@@@ | ?Дата первого релиза }}| {{#var:sCurrentMonthNameGen}} }}
 
{{#arraydefine:aDate|{{#show: @@@@ | ?Дата первого релиза }}| {{#var:sCurrentMonthNameGen}} }}
 +
<!-- Определяем количество лет, прошедшее от текущего года до обрабатываемой даты. -->
 
{{#vardefine:iAge| {{#expr: {{CURRENTYEAR}} - {{#arrayindex:aDate|1}} }} }}
 
{{#vardefine:iAge| {{#expr: {{CURRENTYEAR}} - {{#arrayindex:aDate|1}} }} }}
 
<li>'''{{#arrayindex:aDate|1}}''' ({{#var:iAge}} {{plural:{{#var:iAge}}|год назад|года назад|лет назад}}) [[@@@@|{{#show: @@@@ | ?Название }}]]</li>
 
<li>'''{{#arrayindex:aDate|1}}''' ({{#var:iAge}} {{plural:{{#var:iAge}}|год назад|года назад|лет назад}}) [[@@@@|{{#show: @@@@ | ?Название }}]]</li>
Строка 46: Строка 122:
 
=== Игры ===
 
=== Игры ===
 
{{#var:sDayMonthName}} {{plural:{{#var:iGames}}|вышла {{#var:iGames}} игра|вышло {{#var:iGames}} игры|вышло {{#var:iGames}} игр}}:
 
{{#var:sDayMonthName}} {{plural:{{#var:iGames}}|вышла {{#var:iGames}} игра|вышло {{#var:iGames}} игры|вышло {{#var:iGames}} игр}}:
 +
<!-- Определяем количество игр, после которого (плюс 2 игры) список игр показывается частично с сокрытием остального под спойлером. -->
 
{{#vardefine:iLimitGames|10}}
 
{{#vardefine:iLimitGames|10}}
{{#ifeq: {{#expr: {{#var:iGames}} > {{#var:iLimitGames}} + 2}} | 0 |
+
<!-- По-разному обрабатываем список игр, вписывающийся в лимит полного отображения, и не вписывающийся. -->
 +
{{#ifexpr: {{#var:iGames}} <= {{#var:iLimitGames}} + 2 |
 
<ul>
 
<ul>
 
{{#arrayprint:aGames| |@@@@|
 
{{#arrayprint:aGames| |@@@@|
 +
<!-- Разбиваем строку даты релиза игры по запятой, чтобы по-разному обработать игры с несколькими и одной датами релизов. -->
 
{{#arraydefine:aTemp|{{#show: @@@@ | ?Дата }}|,}}
 
{{#arraydefine:aTemp|{{#show: @@@@ | ?Дата }}|,}}
{{#ifeq: {{#expr: {{#arraysize:aTemp}} > 1}} | 1
+
{{#ifexpr: {{#arraysize:aTemp}} > 1
 
|<li>1 из {{#arraysize:aTemp}} {{plural:{{#arraysize:aTemp}}|релиза|релизов|релизов}} [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
 
|<li>1 из {{#arraysize:aTemp}} {{plural:{{#arraysize:aTemp}}|релиза|релизов|релизов}} [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
|{{#arraydefine:aDate|{{#show: @@@@ | ?Дата }}| {{#var:sCurrentMonthNameGen}} }}
+
|<!-- Разбиваем строку даты по названию месяца в родительном падеже, получая во второй подстроке число с номером года. -->
 +
{{#arraydefine:aDate|{{#show: @@@@ | ?Дата }}| {{#var:sCurrentMonthNameGen}} }}
 +
<!-- Определяем количество лет, прошедшее от текущего года до обрабатываемой даты. -->
 
{{#vardefine:iAge| {{#expr: {{CURRENTYEAR}} - {{#arrayindex:aDate|1}} }} }}
 
{{#vardefine:iAge| {{#expr: {{CURRENTYEAR}} - {{#arrayindex:aDate|1}} }} }}
 
<li>'''{{#arrayindex:aDate|1}}''' ({{#var:iAge}} {{plural:{{#var:iAge}}|год назад|года назад|лет назад}}) [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
 
<li>'''{{#arrayindex:aDate|1}}''' ({{#var:iAge}} {{plural:{{#var:iAge}}|год назад|года назад|лет назад}}) [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
Строка 59: Строка 140:
 
}}
 
}}
 
</ul>
 
</ul>
|{{#vardefine:iCounterGames|0}} {{#vardefine:iOtherGames| {{#expr: {{#var:iGames}} - {{#var:iLimitGames}} }} }}
+
|<!-- Определяем переменную-счётчик для контроля числа выводимых игр, после которого нужно вставлять спойлер. -->
 +
{{#vardefine:iCounterGames|0}}
 +
<!-- Определяем количество прочих игр, убираемых под спойлер. -->
 +
{{#vardefine:iOtherGames| {{#expr: {{#var:iGames}} - {{#var:iLimitGames}} }} }}
 
<ul>
 
<ul>
{{#arrayprint:aGames| |@@@@|{{#vardefine:iCounterGames| {{#expr: {{#var:iCounterGames}} + 1}} }}
+
{{#arrayprint:aGames| |@@@@|
{{#ifeq: {{#expr: {{#var:iCounterGames}} <= {{#var:iLimitGames}} }} | 1 |
+
<!-- Инкрементируем счётчик. -->
{{#arraydefine:aTemp|{{#show: @@@@ | ?Дата }}|,}}
+
{{#vardefine:iCounterGames| {{#expr: {{#var:iCounterGames}} + 1}} }}
{{#ifeq: {{#expr: {{#arraysize:aTemp}} > 1}} | 1
+
<!-- Как только достигли лимита, прячем прочие игры под спойлер. -->
|<li>1 из {{#arraysize:aTemp}} {{plural:{{#arraysize:aTemp}}|релиза|релизов|релизов}} [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
+
{{#ifexpr: {{#var:iCounterGames}} = {{#var:iLimitGames}} + 1 |
|{{#arraydefine:aDate|{{#show: @@@@ | ?Дата }}| {{#var:sCurrentMonthNameGen}} }}
 
{{#vardefine:iAge| {{#expr: {{CURRENTYEAR}} - {{#arrayindex:aDate|1}} }} }}
 
<li>'''{{#arrayindex:aDate|1}}''' ({{#var:iAge}} {{plural:{{#var:iAge}}|год назад|года назад|лет назад}}) [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
 
}}
 
| }}
 
}}
 
 
</ul>
 
</ul>
 
<div data-expandtext="Показать {{plural:{{#var:iOtherGames}}|остальную {{#var:iOtherGames}} игру|остальные {{#var:iOtherGames}} игры|остальные {{#var:iOtherGames}} игр}}" data-collapsetext="Спрятать {{plural:{{#var:iOtherGames}}|остальную {{#var:iOtherGames}} игру|остальные {{#var:iOtherGames}} игры|остальные {{#var:iOtherGames}} игр}}" class="toccolours mw-collapsible mw-collapsed" style="margin: auto 1em; overflow:auto;">
 
<div data-expandtext="Показать {{plural:{{#var:iOtherGames}}|остальную {{#var:iOtherGames}} игру|остальные {{#var:iOtherGames}} игры|остальные {{#var:iOtherGames}} игр}}" data-collapsetext="Спрятать {{plural:{{#var:iOtherGames}}|остальную {{#var:iOtherGames}} игру|остальные {{#var:iOtherGames}} игры|остальные {{#var:iOtherGames}} игр}}" class="toccolours mw-collapsible mw-collapsed" style="margin: auto 1em; overflow:auto;">
 
<div class="mw-collapsible-content">
 
<div class="mw-collapsible-content">
{{#vardefine:iCounterGames|0}}
 
 
<ul>
 
<ul>
{{#arrayprint:aGames| |@@@@|{{#vardefine:iCounterGames| {{#expr: {{#var:iCounterGames}} + 1}} }}
+
| }}
{{#ifeq: {{#expr: {{#var:iCounterGames}} > {{#var:iLimitGames}} }} | 1 |
+
<!-- Разбиваем строку даты релиза игры по запятой, чтобы по-разному обработать игры с несколькими и одной датами релизов. -->
 
{{#arraydefine:aTemp|{{#show: @@@@ | ?Дата }}|,}}
 
{{#arraydefine:aTemp|{{#show: @@@@ | ?Дата }}|,}}
{{#ifeq: {{#expr: {{#arraysize:aTemp}} > 1}} | 1
+
{{#ifexpr: {{#arraysize:aTemp}} > 1
 
|<li>1 из {{#arraysize:aTemp}} {{plural:{{#arraysize:aTemp}}|релиза|релизов|релизов}} [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
 
|<li>1 из {{#arraysize:aTemp}} {{plural:{{#arraysize:aTemp}}|релиза|релизов|релизов}} [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
|{{#arraydefine:aDate|{{#show: @@@@ | ?Дата }}| {{#var:sCurrentMonthNameGen}} }}
+
|<!-- Разбиваем строку даты по названию месяца в родительном падеже, получая во второй подстроке число с номером года. -->
 +
{{#arraydefine:aDate|{{#show: @@@@ | ?Дата }}| {{#var:sCurrentMonthNameGen}} }}
 +
<!-- Определяем количество лет, прошедшее от текущего года до обрабатываемой даты. -->
 
{{#vardefine:iAge| {{#expr: {{CURRENTYEAR}} - {{#arrayindex:aDate|1}} }} }}
 
{{#vardefine:iAge| {{#expr: {{CURRENTYEAR}} - {{#arrayindex:aDate|1}} }} }}
 
<li>'''{{#arrayindex:aDate|1}}''' ({{#var:iAge}} {{plural:{{#var:iAge}}|год назад|года назад|лет назад}}) [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
 
<li>'''{{#arrayindex:aDate|1}}''' ({{#var:iAge}} {{plural:{{#var:iAge}}|год назад|года назад|лет назад}}) [[@@@@|{{#show: @@@@ | ?Название }}]] ({{#show: @@@@ | ?Автор | link=none }} — {{#show: @@@@ | ?Платформа | link=none }})</li>
 
}}
 
}}
| }}
 
 
}}
 
}}
 
</ul>
 
</ul>
Строка 97: Строка 175:
 
<ul>
 
<ul>
 
{{#arrayprint:aBirthdays| |@@@@|
 
{{#arrayprint:aBirthdays| |@@@@|
 +
<!-- Разбиваем строку даты по названию месяца в родительном падеже, получая во второй подстроке число с номером года. -->
 
{{#arraydefine:aDate|{{#show: @@@@ | ?День рождения }}| {{#var:sCurrentMonthNameGen}} }}
 
{{#arraydefine:aDate|{{#show: @@@@ | ?День рождения }}| {{#var:sCurrentMonthNameGen}} }}
{{#ifeq: {{#arraysize:aDate}} | 2 | {{#vardefine:iAge| {{#expr: {{CURRENTYEAR}} - {{#arrayindex:aDate|1}} }} }} | }}
+
<!-- Если удалось получить из даты год, то определяем количество лет, прошедшее от текущего года до обрабатываемой даты. -->
<li>'''{{#ifeq: {{#arraysize:aDate}} | 1 | Сколько-то лет назад | {{#var:iAge}} {{plural:{{#var:iAge}}|год назад|года назад|лет назад}} }}''' [[@@@@]]</li>
+
{{#if: {{#arrayindex:aDate|0}} | {{#vardefine:iAge| {{#expr: {{CURRENTYEAR}} - {{#arrayindex:aDate|1}} }} }} | }}
 +
<li>'''{{#if: {{#arrayindex:aDate|0}} | {{#var:iAge}} {{plural:{{#var:iAge}}|год назад|года назад|лет назад}} | Сколько-то лет назад }}''' [[@@@@]]</li>
 
}}
 
}}
 
</ul>
 
</ul>
 
}}
 
}}
 
}}
 
}}
<noinclude>[[Категория:Шаблоны]]</noinclude>
+
<noinclude>[[Категория:Шаблоны главной]]</noinclude>

Текущая версия на 15:31, 1 марта 2020

Шаблон, отображающий информацию о различных исторических событиях на конкретную дату. Показывает первые релизы проектов (свойство "Дата первого релиза"), релизы игр (свойство "Дата") и дни рождения (свойство "День рождения"), приходящиеся на заданный день года. В качестве необязательного аргумента может принимать дату в формате ДД.ММ, например, {{День в истории|13.09}}, информацию по которой надо показать. Без указания даты отображает информацию для текущего дня согласно настройкам сервера.











Этот день в истории

Игры

21 ноября вышло 16 игр: