Files
test_test/resources/views/admin/contacts/edit.blade.php
2026-04-06 18:44:02 +05:00

347 lines
19 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.admin')
@section('content')
<div class="container-fluid">
@if(session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<i class="bi bi-check-circle-fill me-2"></i> {{ session('success') }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
@endif
@if(session('error'))
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<i class="bi bi-exclamation-triangle-fill me-2"></i> {{ session('error') }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
@endif
<div class="card">
<div class="card-header">
<h5>Редактирование данных сайта</h5>
</div>
<div class="card-body">
<form action="{{ route('admin.contacts.update') }}" method="POST" enctype="multipart/form-data">
@csrf
@method('PUT')
<ul class="nav nav-tabs mb-4" id="contactTabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="basic-tab" data-bs-toggle="tab" data-bs-target="#basic" type="button" role="tab">
Основные данные
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="images-tab" data-bs-toggle="tab" data-bs-target="#images" type="button" role="tab">
Логотип и фавикон
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="contacts-tab" data-bs-toggle="tab" data-bs-target="#contacts" type="button" role="tab">
Контакты
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="social-tab" data-bs-toggle="tab" data-bs-target="#social" type="button" role="tab">
Социальные сети
</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="seo-tab" data-bs-toggle="tab" data-bs-target="#seo" type="button" role="tab">
SEO
</button>
</li>
</ul>
<div class="tab-content" id="contactTabsContent">
{{-- Основные данные --}}
<div class="tab-pane fade show active" id="basic" role="tabpanel">
<div class="mb-3">
<label class="form-label">Название сайта <span class="text-danger">*</span></label>
<input type="text"
class="form-control @error('name') is-invalid @enderror"
name="name"
value="{{ old('name', $contact->name) }}">
@error('name')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Описание сайта</label>
<textarea class="form-control @error('description') is-invalid @enderror"
name="description"
rows="3">{{ old('description', $contact->description) }}</textarea>
@error('description')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Режим работы</label>
<input type="text"
class="form-control @error('work_hours') is-invalid @enderror"
name="work_hours"
value="{{ old('work_hours', $contact->work_hours) }}"
placeholder="Например: Пн-Пт: 10:00 - 18:00, Сб-Вс: выходной">
@error('work_hours')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
{{-- Логотип и фавикон --}}
<div class="tab-pane fade" id="images" role="tabpanel">
<div class="mb-4">
<label class="form-label">Логотип</label>
<div class="row align-items-end">
<div class="col-md-6">
<input type="file"
class="form-control @error('logo') is-invalid @enderror"
name="logo"
id="logo-input"
accept="image/jpeg,image/png,image/jpg,image/gif,image/svg+xml,image/webp">
@error('logo')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
<small class="text-muted">Рекомендуемый размер: 200x200px. Максимум 2MB</small>
</div>
<div class="col-md-6">
@if($contact->logo)
<div class="current-image">
<p class="mb-2">Текущий логотип:</p>
<img src="{{ asset('assets/images/logo/' . $contact->logo) }}"
alt="Логотип"
id="logo-preview"
style="max-height: 100px; border: 1px solid #ddd; padding: 5px; border-radius: 4px;">
</div>
@else
<div class="current-image">
<p class="mb-2 text-muted">Логотип не загружен</p>
<img src=""
id="logo-preview"
style="max-height: 100px; display: none;">
</div>
@endif
</div>
</div>
</div>
<div class="mb-3">
<label class="form-label">Фавикон (иконка вкладки браузера)</label>
<div class="row align-items-end">
<div class="col-md-6">
<input type="file"
class="form-control @error('favicon') is-invalid @enderror"
name="favicon"
id="favicon-input"
accept="image/x-icon,image/png,image/svg+xml">
@error('favicon')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
<small class="text-muted">Рекомендуемый размер: 16x16px или 32x32px. Максимум 1MB</small>
</div>
<div class="col-md-6">
@if($contact->favicon)
<div class="current-image">
<p class="mb-2">Текущий фавикон:</p>
<img src="{{ asset('assets/images/logo/' . $contact->favicon) }}"
alt="Фавикон"
id="favicon-preview"
style="max-height: 32px; border: 1px solid #ddd; padding: 2px; border-radius: 4px;">
</div>
@else
<div class="current-image">
<p class="mb-2 text-muted">Фавикон не загружен</p>
<img src=""
id="favicon-preview"
style="max-height: 32px; display: none;">
</div>
@endif
</div>
</div>
</div>
</div>
{{-- Контакты --}}
<div class="tab-pane fade" id="contacts" role="tabpanel">
<div class="mb-3">
<label class="form-label">Телефон</label>
<input type="text"
class="form-control @error('phone') is-invalid @enderror"
name="phone"
value="{{ old('phone', $contact->phone) }}"
placeholder="+7(000)-000-00-00">
@error('phone')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Email</label>
<input type="email"
class="form-control @error('email') is-invalid @enderror"
name="email"
value="{{ old('email', $contact->email) }}">
@error('email')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Адрес</label>
<input type="text"
class="form-control @error('address') is-invalid @enderror"
name="address"
value="{{ old('address', $contact->address) }}">
@error('address')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
{{-- Социальные сети --}}
<div class="tab-pane fade" id="social" role="tabpanel">
<div class="mb-3">
<label class="form-label">Telegram</label>
<div class="input-group">
<span class="input-group-text">t.me/</span>
<input type="text"
class="form-control @error('telegram') is-invalid @enderror"
name="telegram"
value="{{ old('telegram', $contact->telegram) }}"
placeholder="username">
</div>
@error('telegram')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">WhatsApp</label>
<div class="input-group">
<span class="input-group-text">wa.me/</span>
<input type="text"
class="form-control @error('whatsapp') is-invalid @enderror"
name="whatsapp"
value="{{ old('whatsapp', $contact->whatsapp) }}"
placeholder="79991234567">
</div>
@error('whatsapp')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">ВКонтакте</label>
<div class="input-group">
<span class="input-group-text">vk.com/</span>
<input type="text"
class="form-control @error('vkontakte') is-invalid @enderror"
name="vkontakte"
value="{{ old('vkontakte', $contact->vkontakte) }}"
placeholder="club00000000">
</div>
@error('vkontakte')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
{{-- SEO --}}
<div class="tab-pane fade" id="seo" role="tabpanel">
<div class="mb-3">
<label class="form-label">Meta Title (заголовок страницы)</label>
<input type="text"
class="form-control @error('meta_title') is-invalid @enderror"
name="meta_title"
value="{{ old('meta_title', $contact->meta_title) }}">
<small class="text-muted">Рекомендуемая длина: 50-60 символов</small>
@error('meta_title')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Meta Description (описание страницы)</label>
<textarea class="form-control @error('meta_description') is-invalid @enderror"
name="meta_description"
rows="3">{{ old('meta_description', $contact->meta_description) }}</textarea>
<small class="text-muted">Рекомендуемая длина: 150-160 символов</small>
@error('meta_description')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Meta Keywords (ключевые слова)</label>
<input type="text"
class="form-control @error('meta_keywords') is-invalid @enderror"
name="meta_keywords"
value="{{ old('meta_keywords', $contact->meta_keywords) }}"
placeholder="магазин, зоотовары, корм, игрушки">
<small class="text-muted">Ключевые слова через запятую</small>
@error('meta_keywords')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
</div>
</div>
<div class="d-flex gap-2 mt-4">
<button type="submit" class="btn btn-dark-green p-2 d-flex gap-1 align-items-center justify-content-center">
<img src="{{ asset('assets/images/icons/edit-svgrepo-com.svg') }}" alt="Сохранить" width="20" height="20">
Сохранить изменения
</button>
</div>
</form>
</div>
</div>
</div>
@endsection
@section('script')
<script>
document.addEventListener('DOMContentLoaded', function() {
const logoInput = document.getElementById('logo-input');
const logoPreview = document.getElementById('logo-preview');
if (logoInput) {
logoInput.addEventListener('change', function(e) {
const file = e.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(event) {
logoPreview.src = event.target.result;
logoPreview.style.display = 'block';
if (logoPreview.closest('.current-image')) {
logoPreview.closest('.current-image').querySelector('.text-muted')?.remove();
}
};
reader.readAsDataURL(file);
}
});
}
const faviconInput = document.getElementById('favicon-input');
const faviconPreview = document.getElementById('favicon-preview');
if (faviconInput) {
faviconInput.addEventListener('change', function(e) {
const file = e.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(event) {
faviconPreview.src = event.target.result;
faviconPreview.style.display = 'block';
if (faviconPreview.closest('.current-image')) {
faviconPreview.closest('.current-image').querySelector('.text-muted')?.remove();
}
};
reader.readAsDataURL(file);
}
});
}
});
</script>
@endsection