Files
moonwell-web/resources/views/admin/login-screen-news/index.blade.php
T

166 lines
8.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@extends('layouts.portal')
@section('portal-content')
<section class="section">
<div class="section-heading">
<span class="eyebrow">Админка</span>
<h2>Новости логин-экрана WoW</h2>
<p>Публикуй raw-текст с WoW-разметкой, а сайт сам отдаст готовый `SERVERALERT`-фид по открытой ссылке для клиента 3.3.5a.</p>
</div>
<div class="portal-grid">
<article class="content-card">
<h3>Публичная ссылка для клиента</h3>
<p>Эту ссылку можно вставить в логин-скрин клиента. Ответ возвращается как plain text и доступен без авторизации.</p>
<div class="action-stack">
<a class="button button--gold" href="{{ $feedUrl }}" target="_blank" rel="noreferrer">Открыть фид</a>
<code class="code-block">{{ $feedUrl }}</code>
</div>
<dl class="stats-list stats-list--compact">
<div>
<dt>Всего записей</dt>
<dd>{{ $newsStats['total'] }}</dd>
</div>
<div>
<dt>Опубликовано</dt>
<dd>{{ $newsStats['published'] }}</dd>
</div>
<div>
<dt>Черновиков</dt>
<dd>{{ $newsStats['draft'] }}</dd>
</div>
</dl>
</article>
<article class="content-card">
<h3>Итоговый ответ сервера</h3>
<p>Это превью полного ответа, который получит клиент по публичному URL.</p>
<pre class="feed-preview">{{ $feedPreview }}</pre>
</article>
</div>
</section>
<section class="section section--split">
<article class="content-card">
<span class="eyebrow">Новая запись</span>
<h2>Добавить новость</h2>
<p>Каждая запись становится отдельным блоком в общем фиде. Префикс `SERVERALERT:` добавляется автоматически.</p>
<form class="stack-form" method="POST" action="{{ route('admin.login-screen-news.store') }}">
@csrf
<label class="form-field">
<span>Название в админке</span>
<input class="form-control @error('title') is-invalid @enderror" type="text" name="title" value="{{ old('title') }}" maxlength="120" required>
@error('title')<span class="form-error">{{ $message }}</span>@enderror
</label>
<label class="form-field">
<span>Порядок вывода</span>
<input class="form-control @error('sort_order') is-invalid @enderror" type="number" name="sort_order" value="{{ old('sort_order', 0) }}" min="0" max="9999" required>
@error('sort_order')<span class="form-error">{{ $message }}</span>@enderror
</label>
<label class="checkbox-inline">
<input type="checkbox" name="is_published" value="1" @checked(old('is_published', true))>
<span>Сразу публиковать эту запись</span>
</label>
<label class="form-field">
<span>Текст для клиента</span>
<textarea class="form-control form-control--textarea @error('body') is-invalid @enderror" name="body" required>{{ old('body') }}</textarea>
<small>Поддерживаются WoW-коды цветов `|cFF...|r`, иконки `|T...|t`, переносы строк и обычный текст.</small>
@error('body')<span class="form-error">{{ $message }}</span>@enderror
</label>
<button class="button button--gold" type="submit">Добавить запись</button>
</form>
</article>
<article class="content-card">
<span class="eyebrow">Шаблон</span>
<h2>Пример WoW-блока</h2>
<p>Если нужно, можно вставлять уже готовые строки почти в том же виде, как у тебя в примере с GitHub raw.</p>
<pre class="feed-preview feed-preview--compact">|TInterface\ICONS\achievement_boss_lichking:25:25:0:-5|t |cFF00D1FFWrath of the Lich King|r
|TInterface\ICONS\achievement_zone_icecrown_01:18:18:0:-8|t |cFFA6D8FF- Артас пробуждается как Король-лич|r
|TInterface\ICONS\spell_deathknight_iceboundfortitude:18:18:0:-8|t |cFFA6D8FF- Рыцари смерти вторгаются в Азерот|r</pre>
</article>
</section>
<section class="section">
<div class="section-heading">
<span class="eyebrow">Текущие записи</span>
<h2>Редактирование и публикация</h2>
<p>Опубликованные записи попадают в фид по порядку `sort_order`. Черновики остаются только в админке.</p>
</div>
<div class="account-list">
@forelse ($newsItems as $newsItem)
<article class="content-card news-card">
<div class="account-card__header">
<div>
<h3>{{ $newsItem->title }}</h3>
<p>
Порядок: {{ $newsItem->sort_order }}
@if ($newsItem->updated_by_username)
· Обновил: {{ $newsItem->updated_by_username }}
@endif
@if ($newsItem->updated_at)
· {{ $newsItem->updated_at->format('d.m.Y H:i') }}
@endif
</p>
</div>
<span class="tag">{{ $newsItem->is_published ? 'Опубликовано' : 'Черновик' }}</span>
</div>
<form class="stack-form" method="POST" action="{{ route('admin.login-screen-news.update', $newsItem) }}">
@csrf
@method('PATCH')
<label class="form-field">
<span>Название</span>
<input class="form-control" type="text" name="title" value="{{ $newsItem->title }}" maxlength="120" required>
</label>
<label class="form-field">
<span>Порядок вывода</span>
<input class="form-control" type="number" name="sort_order" value="{{ $newsItem->sort_order }}" min="0" max="9999" required>
</label>
<label class="checkbox-inline">
<input type="checkbox" name="is_published" value="1" @checked($newsItem->is_published)>
<span>Показывать в публичном фиде</span>
</label>
<label class="form-field">
<span>Текст блока</span>
<textarea class="form-control form-control--textarea" name="body" required>{{ $newsItem->body }}</textarea>
</label>
<div class="form-actions">
<button class="button button--gold" type="submit">Сохранить</button>
</div>
</form>
<form method="POST" action="{{ route('admin.login-screen-news.destroy', $newsItem) }}">
@csrf
@method('DELETE')
<button class="button button--ghost" type="submit" onclick="return confirm('Удалить эту запись из фида?')">Удалить запись</button>
</form>
</article>
@empty
<article class="content-card empty-state">
<h3>Записей пока нет</h3>
<p>Добавь первую новость, и публичный фид сразу начнёт отдавать её клиенту.</p>
</article>
@endforelse
</div>
</section>
@endsection