new component button and edit style

This commit is contained in:
Aleksandr Avdeev 2025-04-09 17:22:44 +03:00
parent f6606796e8
commit c0b43a28ba
16 changed files with 503 additions and 26 deletions

4
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,4 @@
{
"WillLuke.nextjs.addTypesOnSave": true,
"WillLuke.nextjs.hasPrompted": true
}

View File

@ -16,6 +16,9 @@ const userData: Prisma.UserCreateInput[] = [
"Admin - один, я, Reload (минимально захожу в игру с этого аккаунта, а так сижу на пользователе Test, если вдруг кому нужно будет обратиться в игре).",
"Guru - пока присвоен игроку Karabas (думаю вполне заслуженно).",
"SpawnMasson - создан по инициативе и просьбе активных игроков сервера, помогающим приводить спавн в порядок и развивать его, а также оказывать всяческую поддержку новичкам (что и будет являться в дальнейшем задачей этого класса). Прошу учесть, что классы на данный момент не наделены дополнительными правами(да и в ближайшем будущем не планируется этого делать).Задача этой классификации как - то отметить по заслугам активность и заинтересованность отдельных игроков в нашем сервере."
],
listLinks: [
"https://vk.com/club202785668",
]
},
published: true,
@ -32,7 +35,261 @@ const userData: Prisma.UserCreateInput[] = [
]
},
published: true,
}
},
{
date: '10.08.2023',
title: 'Хранение всех игровых данных переведо на новый сервер управления базами данных, добавлен мод новостного мода (написан администрацией проекта)',
content: {
listNews: [
"Игровой сервер minetest пересобран с поддержкой клиента PostgreSQL, теперь всеми базами данных игры управляет (хранит, читает и записывает) PostgreSQL. Это лучшее решение на сегодняшний день в плане скорости и надежности для игрового сервера.",
"Добавлен мод Newscaster, который добавляет новостного бота, пишущего периодически в чате информационные сообщения. Имя нашего бота MTSR, выделено цветом cyan."
]
},
published: true,
},
{
date: '11.08.2023',
title: 'Введена должность модератора и создана соответствующая группа',
content: {
listNews: [
"Для поддержания порядка на сервере среди игроков был добавлен новый класс Moderator и даны дополнительные права её пользователям (да, я не собирался этого делать, но обстоятельcтва немного вынуждают).",
"Я очень миролюбив и лоялен, как администратора сервера меня интересуют в проекте совсем другие вещи, ими и буду заниматься, а порядок теперь на плечах следующих игроков (просьба уважать их и слушаться): Preservoir, cubonist.",
],
},
published: true,
},
{
date: '12.08.2023',
title: 'Изменен один из модов привата территории, улучшен серверный новостной мод',
content: {
listNews: [
"Имевшийся мод для привата территории simple_protection был отключен (им никто не пользовался), все пользовались блоками защиты.",
"Вместо отключенного выше добавлен мод привата территории areas, он сразу позволяет пользователям приватить территорию, используя немного иной механизм.",
"Мод нашего новостного бота newscaster обновлен",
],
},
published: true,
},
{
date: '14.08.2023',
title: 'Два мода удалены, два - добавлены, один руссифицирован',
content: {
listNews: [
"Отключен мод Locked Travelnet, он не работал. И как выяснилось вчера, он дополняет мод travelnet 2019 года, а не тот (свежий и актуальный), который установлен у нас сейчас (по этой причине и были все проблемы).",
"Вслед за Locked Travelnet решено отключить и мод Locks (ранее анонсированный), как аналогичный древний и не столь обходимый.",
"Возможно эти удаления скрасит добавление мод-пака с автомобилями (Automobiles Pack) и топливом (Biofuel).",
"Добавлен файл локализации на мод привата Area (могут быть неточности).",
],
},
published: true,
},
{
date: '19.08.2023',
title: 'Изменения на обшественной ферме и в моде на приват Areas',
content: {
listNews: [
"Общественная ферма немного преобразилась, разделившись на две части: SpawnUserFarm и SpawnSharedFarm",
"Увеличен лимит привата мода Areas до размера 64х64х64 блоков (это более чем достаточно, к тому же таких приватов на данный момент можно иметь 3 штуки).",
"Возможно эти удаления скрасит добавление мод-пака с автомобилями (Automobiles Pack) и топливом (Biofuel).",
"Добавлен файл локализации на мод привата Area (могут быть неточности).",
],
},
published: true,
},
{
date: '24.08.2023',
title: 'Из нового и старого (еще неанонсированного)',
content: {
listNews: [
"Всё же благополучно добавлен мод X-Decor, который добавляет в игру массу различных вещей для декорации. Теперь он перестал давать ошибку на стороне клиента на нашем сервере. Пользуйтесь, украшайте и стилизуете свои строения.",
"Добавлен крупный мод Advanced Trains. Поезда, железные дороги, системы организации движения. Этот мод скорее на перспективу развития игрового мира.",
"Все иные транспортные моды (авто, мото, вело) считаем успешно опробованными. Кроме дополнительного веселья + сопутствующей сильной нагрузки на сервер ценности большой для сервера в них не вижу. Удалено.",
"Начат процесс русификации основного технического мода сервера TA и его дополнений. Всю сложность долгого процесса перевода возложил на себя Preservoir (возможно не совсем осознавая глубину пропасти :) ). Уже переведена и добавлена на сервер часть дополнений к TA. Для основного документа по TA (доски с инструкциями) я дополнил мод TA новой русской доской с флагом (также приделан флаг для германии, английская же доска оставлена без изменений) с упрощенным крафтом из бумаги и палки (либо перекрафт из английской доски). Частично инструкция уже переведена (общие описания, блок TA1, часть TA2), остальные части будем дополнять по мере готовности.",
],
},
published: true,
},
{
date: '30.08.2023',
title: 'Новый отдельный интернет канал сервера, новый Guru, админ в отпуске',
content: {
listNews: [
"Вчера (29.09) под сервер был организован отдельный канал интернета, временно были проблемы из-за переназначения домена на новый сетевой адрес. Теперь соединение должно стать еще более стабильным, поскольку ничто другое серверу мешать уже не будет.",
"Игроку GRAFF присвоен класс Guru, он очень активно постигает мод Techage, дойдя до 5 эры. Текущие постройки обладают масштабностью и сложностью. Так что заслужил. Надеюсь азарт у него не пропадет)",
"С 1 сентября я отправляюсь в двухнедельный отпуск, предстоит длинный путь и очень много мест для посещения. В силу этого порой мне будет не до наблюдения за сервером (чтоб меня не ждали и не искали в игре). Если что-то там с сервером вдруг произойдет (зависания, отключение и т.д.), то пишите в телеграмм, я постараюсь оперативно глянуть с телефона и по-возможности решить."
],
},
published: true,
},
{
date: '15.09.2023',
title: 'Конец отпуска, мобы в nether, новые цветные блоки',
content: {
listNews: [
"Админ вернулся из отпуска, теперь снова почаще и оперативнее буду в жизни сервера.",
"Еще в отпуске был добавлен мод с nether миром, который располагается на глубине от -20к.",
"Добавлены мобы для этого мира, сегодня по наводке игрока UFOshnik этим мобам прописаны корректные настройки для спавна (они теперь стали нормально появляться в nether мире).",
"Добавлен мод на цветные блоки: стекло, обсидиан, камень, кирпич и дерево. Цвета не яркие, что на мой взгляд даже лучше (поиск в инвентаре по слову colored).",
],
},
published: true,
},
{
date: '17.09.2023',
title: 'Upgrade cерверной двухпроцессорной рабочей станции Lenovo ThinkStation D30',
content: {
listNews: [
"CPU - 2x Intel® Xeon® E5-2667 v2 @ 3.30GHz (до 4.00GHz на одно ядро в Turbo Boost), 16 ядер/32 потока суммарно.",
"Memory - 512GB 1866 MHz DDR3.",
"Storage - mSata SSD 128Gb + mirror HDD 1TB.",
],
},
published: true,
},
{
date: '21.09.2023',
title: 'Рецепты для artdeco, админ - грифер',
content: {
listNews: [
"Для мода artdeco были добавлены рецепты. После добавления мода на сервер игрок H743 отметил, что для него нет никаких рецептов (видимо использовали его везде для креатив режима, который у нас на сервере не используется). После этого[Vitสliץ] OVV(он же VinAdmin) вызвался этот недочет устранить, что успешно и довольно оперативно исполнил.Так что строители сервера - можете начинать крафтить и использовать красивость, свои замечания и пожелания по рецептам просьба адресовать VinAdmin(текущие рецепты - это полностью его видение и реализация).",
"Еще один игрок, GRAFF, указал мне на причину появления проблем с новыми ящиками, а также мельницами, которые периодически ломались на сервере. Все обвиняли гриферов (и я в том числе). Но, как выяснилось, грифером был я сам))), когда запускал команду очистки мира от мусора. Это она так отрабатывает, ломая мельницы. Главное, что теперь это известно, впредь будем использовать другие методы чистки при необходимости.",
],
},
published: true,
},
{
date: '28.09.2023',
title: 'Есть что почитать, во что одеться и будет что посмотреть',
content: {
listNews: [
"На сервер добавлен чат лог (ChatLogger), который может быть вызван и просмотрен любым игрок командой /chatlog. Он хранит последние 1000 сообщений чата, по ним возможен поиск с соответствующей фильтрацией списка сообщений.",
"Нас становится чуть больше (что приятно), поэтому на сервер были добавлены новые скины, можете выбирать и менять свой образ на какой-нибудь новый.",
"Открыт канал сервера на платформе YouTube Со временем постепенно начнем его наполнять полезным и интересным контентом (надеюсь совместными усилиями игроков сервера).",
],
},
published: true,
},
{
date: '02.10.2023',
title: 'Технические дополнения, скинов больше, а телепорты легче, узаконенное PvP, "властная" malika143, творческий и созидающий H743, весёлый бот MTSR и летописное древо сервера',
content: {
listNews: [
"Добавлены дополнения для технического мода mesecons (digilines, digistuff и led Marquee).",
"Незначительно дополнена база скинов по высказанным пожеланиям игроков сервера.",
"Добавлен мод телепортации teleport request, позволяющий отправлять и принимать запросы игрокам для телепорта друг другу. Привилегия на использование по умолчанию не выдаётся, а добавляется вручную тем, кому данная возможность действительно нужна (игроки, играющие совместно).",
"Добавлено новое правило по PvP, пока он отключен на всей территории мира, кроме специальной Арены. Наша первая Арена уже построена и действует (телепорт-кабинка расположена на спавне, Арена - рядом).",
"Добавлен новый модератор - игрок malika143.",
"Добавлена новая группа Builder, наделенная особыми правами и задачами на сервере. Первый и на ближайшее будущее точно единственный пользователь в ней - наш уникальный игрок H743.",
"Чат бот сервера был обновлён и ему добавилась новая рубрика Шутка часа (по предложению игрока UFOshinik), свои шутки для добавления в ленту можно присылать мне через сообщения в телеграмм.",
"По предложению игрока VinAdmin начали летопись нашего mtsr сервера (важные события и вехи прошлого, настоящего и скорого будущего). Летописное древо начало формироваться на спавне, идею и концепцию его заполнения следует совместно обсудить и начать придерживаться в будущем."
],
},
published: true,
},
{
date: '05.10.2023',
title: 'Совместный опыт в "модостроительстве", в Guru всё теснее, посольства "тут и там", прощай лаги',
content: {
listNews: [
"Добавлен мод tech_additions, добавляющий на сервер 4 новых блока (железо TA1, вольфрам, цинк и бабориум), а также рецепт для силикона из мода basic_materials. Блоки нужны прежде всего для компактности при хранении, продаже. Также необходимо отметить, что данный мод является нашим совместным творением (VinAdmin, UFOshnik и Reload), можно найти в git, он пока прост, но будет дополняться по мере необходимости согласно основному назначению.",
"В группе Guru на сервере прибыло, поздравляем игрока CHITER!",
"Наши товарищи с сервера НашиТУТ приступили к строительству своего посольства на нашем сервере. Посольство расположено вдоль ж/д линии, противоположной от спавна (есть ж/д остановка). Это очень интересная и полезная задумка, ведь какими бы ни были разногласия между политиками серверов, но нас всех при этом многое объединяет - minetest и его популяризация, развитие русского сегмента игры, организация игрового разнообразия русских серверов и т.д. Нам тоже предстоит постройка своего посольства у них (обращаюсь прежде всего к опытным строителям нашего сервера). Всем игрокам просьба по-возможности оказывать помощь (в материалах) строителям от НашихТУТ и проявлять уважение.",
"Несколько дней немного лагало, тому было несколько причин: 1) отказывающий hdd в зеркале(временно сервер переведен на резервный быстрый hdd, чуть позже вернется на новое зеркало(hdd или ssd); 2) игровой lua код(змейка) пользователя someone, написанный в одном из блоков недавно добавленного мода digilines(пока выясняли эту причину, успели ликвидировать часть ветки ж/ д, которую потом пришлось восстанавливать).",
],
},
published: true,
},
{
date: '11.10.2023',
title: 'От сумы да тюрьмы не зарекайся. Водку пить себя губить. (Не) стыдно, когда видно',
content: {
listNews: [
"Запущен интересный и оригинальный проект Тюрьма, для чего был написан соответствующий мод jail и построено тюремное здание Пустынка (со всеми сопутствующими удобствами). Первыми заключенными на добровольной основе стали три игрока: arbyzuk, xek130 и signelplayer. Все подробности изложены в соответствующей теме ТГ - канала, там будет и дальнейшее обсуждение проекта(его развитие).",
"Как раз под проект Тюрьма добавили мод wine (особенно актуально настоящим и будущим осужденным), который добавляет в игру много различных питейных жидкостей, преимущественно алкогольных.",
"Немного поковырявшись всё же добавил на сервер интерактивную карту, собрав mapserver из исходников под нашу freebsd систему. Теперь новая и живая карта сервера будет всегда доступна по понятному адресу https://map.minetestserver.ru. Думаю, что игроки заслужили эту возможность - следить в реальном времени за жизнью наших игроков и изменением ими огромного игрового мира.Ведь у нас же есть на что смотреть, не правда ли ?",
],
},
published: true,
},
{
date: '21.10.2023',
title: 'Развлечения, ютубер (его ролики, советы и друзья), сервер всё мощнее, летаем и плаваем по-настоящему, делаем игровой мир красивее',
content: {
listNews: [
"В игровом мире стали появляться развлекательные места, первым таким местом стал Океанариум, построенный игроком VinAdmin (вход платный). Подробнее о нём предлагаю ознакомиться в теме ТГ-группы Проекты(постройки) игроков. О том как добраться можно прочитать на спавне на стойке Развлечения. На подходе завершение следующего проекта (Зоопарк). Ну и разогнались же мы...)",
"На игровой сервер пришел и основательно поселился игрок n0m, приведя с собой целое мини-сообщество из игроков-разработчиков и просто активных людей) Стал требовать разное - то, другое, третье (мы за его желаниями не успеваем:) ). Но самое главное, он стал снимать видео ролики о нашем сервере, которые на мой взгляд очень органичны и придутся по душе большинству играющих.",
"По советам n0m-а добавили мод строительные леса (scaffolding), а еще увеличили территорию под приват мода areas, размер территории теперь составляет 64х128х64 блоков, всего таких территорий доступно 6 штук.",
"Улучшены характеристики дисковой системы сервера. А именно: 1) игровая база данных, папка minetest и динамическая карта перемещены на быстрый NVME диск 512 Гб, 2) добавлен дисковый массив raid10, состоящий из 4-ёх hdd емкостью по 3 Тб, который будет использоваться под журнальный раздел базы данных и для бэкапов NVME диска, 3) системный диск без изменений - 128 Гб mSata.",
"В тестовом режиме добавлен мод на анимацию полета и плавания игроков (возможно останется, если не будет нагружать сервер и клиент).",
"Один из приведенных на сервер n0m-ом игроков (bazrov) создает свой пакет текстур (nice_realistic). Создана соответствующая тема в ТГ-группе по текстурам, там же можно ознакомиться подробнее, как установить и к тому же задать вопросы разработчику пака nice_realistic. Мы поддерживаем отечественных разработчиков в сфере minetest и с радостью предоставим свои возможности по организации обратной связи наших игроков с ними."
],
},
published: true,
},
{
date: '03.11.2023',
title: 'Стреляем метко, смотрим меня на youtube, новые моды, резервное питание для сервера, русская инструкция techage, обновленный сайт, наши тестеры',
content: {
listNews: [
"Вторым развлекательным местом стал Стрелковый тир, построенный игроком signelplayer (вход бесплатный). Подробнее о нём можно ознакомиться в теме ТГ-группы Проекты(постройки) игроков, а также на стойке Развлечения у спавна.",
"Долго запрягал, но всё же занялся нашим YouTube каналом и снял два ролика. Смотрим и критикуем). Снимать много не планирую, буду продолжать это делать постепенно.",
"Добавлены некоторые интересные и полезные моды: smartshop (улучшенный магазин), x_bows (лук и стрелы), filter (фильтр чата) и j_mute (отключение игроков от чата).",
"Организовано качественное резервное питание для сервера и серверного роутера.",
"Дополнен перевод инструкции мода Techage, доработку по-прежнему продолжает один единственный игрок и модератор сервера Preservoir.",
"Приятно удивил игрок UFOshnik, по своей инициативе украсив внешний вид нашей web-странички (наверное это все заметили, а теперь вы знаете, кто за этим стоит). Я результатом очень доволен)",
"На сервер пришла очень сплоченная и дружная команда тестеров, яро взявшись за поиски недочетов сервера и его багов, ничего не прося за это (что конечно радует), благодаря им: 1) - много лучше защитили территорию спавна от гриферства, 2) - нашли на карте и временно убрали несколько блоков из мультидекора, крашащих сервер(до момента исправления мода Автором), 3) - добавили штатную систему отката игрового мира по игрокам и их действиям для восстановления после атак гриферов, 4) - начали разрабатывать уникальную дополнительную защиту от гриферства на сервере силами продвинутых игроков(nikaru, littlePrettyCat), 5) - существенно пополнили игровую базу и онлайн новыми игроками.",
],
},
published: true,
},
{
date: '12.11.2023',
title: 'Всё больше красоты и техничности, новый techage и русификация, используем твердую нефть по-новому, деятель недели ksandr, апгрейд сервера, разгружаем спавн',
content: {
listNews: [
"Несколько новых модов на сервере для декора и техничности: glass_stained (красивые стекла разного размера и фактуры), digtron (тоннелепроходческие машины).",
"Обновлен наш самый основной технический пак модов techage_modpack, в нем целый ряд дополнений и улучшений. Вся имевшаяся русификация сохранена, а часть даже еще и дополнена.",
"В русификации нашего сервера пополнения - новость выше, а также часть уже имевшихся модов на сервере перевёл один из самых активных и инициативных игроков ksandr (на его чистой совести переводы аддонов techage_modpack, choppy, smartshop).",
"После столь грандиозного и масштабного обсуждения твердой нефти из multidecor (в группе ТГ-канала) добавлены два новых рецепта для её использования (игроком VinAdmin).",
"Упоминаемый ранее игрок ksandr развивает на сервере сеть заправок для джетпака, опоясав всю карту по нулевой горизонтали. Путешествуйте по карте, ищите красивые места - долой лагучий спавн!",
"Железо сервера полностью обновлено и замещено более бодрым: 1) CPU - 2x Intel® Xeon® E5 - 2697 v3 @2.60GHz(до 3.60GHz на одно ядро в Turbo Boost), 28 ядер / 56 потоков суммарно. 2) Memory - 8х16Gb(128Gb) 2133MHz DDR4. 3) Storage - SSD M2 128Gb(система) + NVME 512Gb(база) + HDD 2 Tb(бэкапы), + чуть позже организую raid10. 4) Система снова FreeBSD).",
"Очень сильно стал проседать fps у игроков на спавне (сервер не виноват, виновата перегруженная карта). Просьба по-возможности разгрузить эту территорию, перенеся свои технические постройки чуть дальше (обсудим в ТГ-канале).",
],
},
published: true,
},
{
date: '04.12.2023',
title: 'Готовим и едим, подсвечиваем и переписываемся лучше и удобнее; "зверьё моё"; на пороге восстания мобов; "кручу-верчу" - высоко сижу, далеко гляжу; больше русских модов, "ничего себе, игровой чат и там, и тут передают... до чего техника дошла!"; магниты коллайдера нас теперь не крашат; если вдруг захотелось мигрировать официально - теперь можно и есть куда)',
content: {
listNews: [
"Очередные небольшие новые моды: Your Dad's BBQ (добавляет коптильню, приготовление разной пищи и др.), morelights (добавляет более 30 предметов освещения), betterpm (улучшенные личные сообщения чата).",
"Зоопарк наконец-то открыт для посещения, свободного для всех! Делал анонс в соответствующей теме тг-канала Проекты(постройки) игроков, строитель и заведующий зоопарка - malika143 (ловитель сбегающих животных - я).",
"Отдельное хочется выделить старания игрока nikaru в создании системы модов minigames-dev-pack для организации моб-арен на сервере. Моб-арены строит наш работающий без отдыха и перерывов H743.",
"Очень интересный технический объект появился на территории до сих пор официально не анонсированного (что постараемся скоро исправить) целого города на сервере - колесо обозрения, дело рук часто упоминаемых H743 и ksandr.",
"Русифицированы моды morelights, doc, digtron, betterpm усилиями игрока ksandr (+мной).",
"В discord группе сервера по многочисленным пожеланиям добавился канал игрового чата, транслирующий онлайн все беседы в общем чате. Можно даже передать привет играющим, помочь советом и прочее, отправив сообщение прямо в канале.",
"Обновлён основной технический пак модов сервера techage_modpack, автором мода устранены некоторые серьезные ошибки (которые нас также успели коснуться) и недочёты.",
"Наши товарищи с сервера НАШИтут сообщили о конце строительства своего посольства у нас на сервере. Все могут ознакомиться с завершенным объектом) есть соответствующая остановка метро. Нам нужно держать ответ, так что кто может, умеет, хочет, обладает лишними ресурсами на том сервере - просьба отозваться)"
],
},
published: true,
},
{
date: '21.12.2023',
title: 'Добавляем, настраиваем и оптимизируем моды; новые "хозяева" discord-канала; второй игровой сервер с интересным режимом; подготовка к приближению нового года; русская энциклопедия minetest (wiki mtsr)',
content: {
listNews: [
"По предложению игрока n0m добавились два новых блока из булыжника для разнообразия ваших построек (можно найти по поиску cobble), стрелы из лука мода x_bows теперь не наносят урон игрокам, добавлен доработанный игроком Meow мод на анимацию поворота головы (headanimoptimize), добавлен мод death_compass для возможности найти свои кости после смерти.",
"Управлением и реорганизацией Dicord-канала по собственному желанию решил заняться n0m, препятствовать никто не стал. В результате discord канал сильно преобразился в лучшую сторону, присоединяйтесь и оцените.",
"Запущен второй игровой сервер с версией игры Mineclone2 (похож на выживание в minecraft) по адресу minetestserver.ru:30001. Сервер публичный, можно найти по поиску mtsr в общем списке серверов клиента-minetest. Для обсуждения в ТГ-канале создана отдельная тема.",
"Открыта отдельная новогодняя локация, построенная игроками сервера (Hohoni77, H743, malika143, VinAdmin). Подробнее можно ознакомиться в видео обзоре на нашем канале в youtube.",
"По предложению игрока RichardTry на сервер добавлена отдельная wiki-страница по адресу https://wiki.minetestserver.ru Постепенно будем её наполнять всяческой важной, полезной и интересной информацией, которая может пригодиться очень многим. Доступ к написанию, редактированию страниц пока выдан всем зарегистрированным пользователям, так что присоединяйтесь к наполнению!"
],
},
published: true,
},
],
},
},

View File

@ -1,7 +1,7 @@
const Footer = () => {
return (
<footer>
<p>Game server version 5.11.1 on ArchLinux OS | 2025, Saint Petersburg, Russia</p>
<i>Game server version 5.11.0 on ArchLinux OS | 2025, Saint Petersburg, Russia</i>
</footer>
)
}

View File

@ -4,8 +4,7 @@ import Link from "next/link"
const Header = () => {
return (
<header>
<Image src="/logo.png" alt="Баннер сайта" width={800} height={205} />
<h1>Добро пожаловать на LuantiServer.Ru!</h1>
<Image src="/logo.png" alt="Баннер сайта" width={800} height={205} priority={true} />
</header>
)
}

View File

@ -0,0 +1,17 @@
interface ListNewsProps {
news: string[]
}
const ListNews = ({ news }: ListNewsProps) => {
news.map((oneNews: string, i) => {
return (
<div key={oneNews}>
<b>{i + 1}</b> {news[i]}
</div>
)
}
)
}
export default ListNews

View File

@ -1,14 +1,13 @@
import Link from "next/link"
import Image from "next/link"
const MenuBar = () => {
return (
<div className="menuBar">
<nav>
<Link href="/">Главная</ Link>
<Link href="https://t.me/MinetestServerRu">Telegram</ Link>
<Link href="https://t.me/LuantiServerRu">Telegram</ Link>
<Link href="https://discord.gg/RKkjNbXGv3">Discord</ Link>
<Link href="https://www.youtube.com/@MineTestServerRu">YouTube</ Link>
<Link href="https://www.youtube.com/@LuantiServerRu">YouTube</ Link>
<Link href="https://peertube.minetestserver.ru/">Peertube</ Link>
<Link href="https://wiki.luanti.ru/">Вики</ Link>
<Link href="https://mastodon.luanti.ru/public/local/">Mastodon</ Link>

View File

@ -1,4 +1,7 @@
const OneNews = ({ oneNews }) => {
import ListNews from "@/app/components/ListNews";
const OneNews = ({ oneNews }: any) => {
const listNews = oneNews.content.listNews;
return (
<div>
<div className="newsTopic">
@ -6,6 +9,7 @@ const OneNews = ({ oneNews }) => {
<div className="newsTitle">{oneNews.title}</div>
</div>
<div className="newsContent">
{
Object.keys(oneNews.content.listNews as { listNews: string[] }).map((nubmerNews, i) => {
@ -14,12 +18,10 @@ const OneNews = ({ oneNews }) => {
) {
return (
<div key={nubmerNews}>
<b>{i + 1}</b> {oneNews.content.listNews[nubmerNews]}
</div>
)
}
})
}
</div>

View File

@ -0,0 +1,36 @@
import Link from "next/link"
type Props = {
idPage: number
allNewsPage: number
}
const ListLinks = ({ idPage, allNewsPage }: Props) => {
if (idPage == 0) {
return (
<div className="menuNewsPage">
<Link href={`/news/${+idPage + 1}`}>Следующие</ Link>
</div>
)
} else {
if (idPage > 0 && idPage < allNewsPage) {
return (
<div className="menuNewsPage">
<Link href={`/news/${idPage - 1}`}>Предыдущие</Link>
<Link href={`/news/${+idPage + 1}`}>Следующие</ Link>
</div>
)
} else {
if (idPage == allNewsPage) {
return (
<div className="menuNewsPage">
<Link href={`/news/${idPage - 1}`}>Предыдущие</Link>
</div>
)
}
}
}
}
export default ListLinks

View File

@ -1,32 +1,49 @@
body {
padding: 10px 10px 10px;
margin: 0 auto;
text-align: center;
width: 800px;
background: #778179;
background: linear-gradient(0deg, green 4%, #508dac 8%, #fff 88%);
background: linear-gradient(0deg, #4180a0 4%, #508dac 8%, #fff 88%);
color: rgb(32, 32, 32);
}
header {}
header {
margin-bottom: 20px;
}
.menuBar {
background-color: green;
display: flex;
justify-content: center;
list-style: none;
padding: 0;
margin: 0;
margin-bottom: 20px;
/*
margin-top: 0px;
margin-bottom: 0px;
height: 30px;
align-content: center;
*/
}
.menuBar a {
padding: 5px;
color: dimgray;
text-decoration: none;
color: antiquewhite;
transition: background-color 0.3s ease;
padding-top: 8px;
padding-bottom: 8px;
padding-left: 4px;
padding-right: 4px;
}
.menuBar a:hover {
background-color: #7cc0ff;
}
.news {
margin-bottom: 10px;
padding: 19px;
border: 2px solid #608631;
border: 2px solid #7cc0ff;
background: #fff;
display: flex;
flex-direction: column;
@ -43,11 +60,12 @@ header {}
.newsDate {
font-weight: bold;
font-style: italic;
color: #608631;
color: darkcyan;
margin-right: 5px;
}
.newsTitle {
color: dimgray;
font-weight: bold;
margin-left: 5px;
}
@ -57,7 +75,16 @@ header {}
margin-top: 10px;
}
/* .menuNewsPage {
width: 100%;
display: flex;
justify-content: center;
} */
footer {
align-content: center;
color: antiquewhite;
margin-top: 20px;
text-align: center;
color: white;
}

View File

@ -1,15 +1,21 @@
import { Tektur } from 'next/font/google'
import './global.css'
import Header from './components/Header'
import Footer from './components/Footer'
import MenuBar from './components/MenuBar'
const oswald = Tektur({
subsets: ['latin'],
weight: ['500'],
})
export default function DashboardLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<html lang="en" className={oswald.className}>
<body>
{/* Layout UI */}
{/* Place children where you want to render a page or nested layout */}

View File

@ -0,0 +1,23 @@
'use client'
import { useRouter } from "next/navigation";
type ButtonProps = {
text: string,
url: string
}
export const MenuNewsPage010 = ({ text, url }: ButtonProps) => {
const router = useRouter();
return (
<div className="menuNewsPage">
{<button onClick={() => {
console.log(text);
router.push(url)
}}>{text}</button>}
{/* <Link href="/news/?page=1">Все новости</ Link> */}
</div>
)
}

View File

@ -0,0 +1,21 @@
.menuNewsPage {
width: 100%;
display: flex;
justify-content: center;
}
.menuNewsPage button {
font-size: 14px;
padding: 10px 16px;
color: #fff;
background-color: #508dac;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s ease;
margin-left: 10px;
}
.menuNewsPage button:hover {
background-color: #7cc0ff;
}

View File

@ -0,0 +1,42 @@
'use client'
import { useRouter } from "next/navigation"
import styles from './NavMenuBar.module.css'
import { MenuNewsPage010 } from "./NavButton"
type Props = {
allNewsPage: number
page: number
}
const NavMenuBar = ({ allNewsPage, page }: Props) => {
const router = useRouter()
console.log('page', page)
if (page == 1) {
return (
<div className="NewsPage">
<MenuNewsPage010 text='Следующие' url={'/news/?page=' + (+page + 1)} />
</div>
)
} else {
if (page > 1 && page < allNewsPage) {
return (
<div className="menuNewsPage">
<MenuNewsPage010 text='Предыдущие' url={'/news/?page=' + (+page - 1)} />
<MenuNewsPage010 text='Следующие' url={'/news/?page=' + (+page + 1)} />
</div>
)
} else {
if (page >= allNewsPage) {
return (
<div className={styles.menuNewsPage}>
<MenuNewsPage010 text='Предыдущие' url={'/news/?page=' + (+page - 1)} />
</div>
)
}
}
}
}
export default NavMenuBar

40
src/app/news/page.tsx Normal file
View File

@ -0,0 +1,40 @@
import OneNews from "@/app/components/OneNews";
import NavMenuBar from "@/app/news/components/NavMenuBar";
import prisma from "@/lib/prisma";
export default async function Page({ searchParams }: {
searchParams: Promise<{ [key: string]: string | string[] | undefined }>
}) {
console.log("news1")
const NumberNewsOnPage = 5;
const search = await searchParams
const page = +(search?.page || 1)
const newsBase = await prisma.news.findMany({
// skip: id * NumberNewsOnPage,
skip: (page - 1) * NumberNewsOnPage,
take: NumberNewsOnPage,
orderBy: {
id: 'desc'
}
});
const allNews = await prisma.news.count()
const allNewsPage = Math.floor(allNews / NumberNewsOnPage)
console.log("Новостей всего: " + allNews)
console.log("Страниц новостей всего: " + allNewsPage)
return (
<div>
{newsBase.map((oneNews) => {
console.log(oneNews)
return (
<div key={oneNews.id} className='news'>
<OneNews oneNews={oneNews} />
</div>
)
})}
<div className="menuNewsPage">
<NavMenuBar allNewsPage={allNewsPage} page={page} />
</div>
</div >
);
}

View File

@ -1,19 +1,20 @@
import prisma from '@/lib/prisma'
import OneNews from './components/OneNews';
import { useRouter } from 'next/navigation'
import { MenuNewsPage010 } from './news/components/NavButton';
export default async function Home() {
// const router = useRouter()
const newsBase = await prisma.news.findMany({
take: 10,
orderBy: {
id: 'desc'
}
});
return (
<div className="min-h-screen bg-gray-50 flex flex-col items-center justify-center -mt-16">
<h2 className="text-4xl font-bold mb-8 font-[family-name:var(--font-geist-sans)] text-[#333333]">
Последние новости:
</h2>
<div>
{newsBase.map((oneNews) => {
console.log(oneNews)
return (
@ -22,6 +23,9 @@ export default async function Home() {
</div>
)
})}
<div className="menuNewsPage">
<MenuNewsPage010 text='Все новости' url='/news' />
</div>
</div >
);
}