новости в админке для логин скрина
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
@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
|
||||
Reference in New Issue
Block a user