Files
dockersyshome/resources/views/admin/pages/edit.blade.php
T
marco 38295e7e88 feat(cms): implement complete SysSiteCMS content management system
Initial implementation of the HomeSysPanel CMS built with Laravel 13.0.
Includes complete admin panel, content management, user authentication,
modular architecture for products/services/chatbot, and marketing tools.

Key features:
- User authentication with email verification and password reset
- Role-based access control (Admin/User with granular permissions)
- Content management (pages, news, FAQ, downloads, galleries, banners)
- Contact management system with subjects and responses
- Marketing tools (email campaigns, visitor analytics, social sharing)
- Modular architecture (Products, Services, Chatbot modules)
- AI Chatbot integration with OpenRouter.ai and LlamaCpp support
- Visitor tracking with geolocation
- SEO optimization with meta tags and Open Graph
- Responsive design with Bootstrap 5
- Dark mode support
- Maintenance mode
- Feature request system
2026-09-07 19:06:53 -03:00

177 lines
9.3 KiB
PHP
Executable File

@extends('layouts.admin')
@section('title', 'Editar Página')
@section('content')
@php
$managedPages = [
'contato' => ['label' => 'Contato', 'route' => route('admin.contacts.index'), 'section' => 'Mensagens de Contato'],
'faq' => ['label' => 'FAQ', 'route' => route('admin.faqs.index'), 'section' => 'Gerenciamento de FAQ'],
'downloads' => ['label' => 'Downloads', 'route' => route('admin.downloads.index'), 'section' => 'Gerenciamento de Downloads'],
'produtos' => ['label' => 'Produtos', 'route' => '#', 'section' => 'Módulo de Produtos'],
'servicos' => ['label' => 'Serviços', 'route' => '#', 'section' => 'Módulo de Serviços'],
];
$isManaged = isset($managedPages[$page->slug]);
@endphp
<div class="d-sm-flex align-items-center justify-content-between mb-4">
<h1 class="h3 mb-0 text-gray-800">Editar Página: {{ $page->title }}</h1>
<a href="{{ route('admin.pages.index') }}" class="btn btn-sm btn-secondary shadow-sm">
<i class="bi bi-arrow-left text-white-50"></i> Voltar
</a>
</div>
@if($isManaged)
<div class="alert alert-warning border-0 shadow-sm mb-4">
<div class="d-flex align-items-start">
<i class="bi bi-exclamation-triangle me-3 mt-1"></i>
<div>
<h5 class="alert-heading mb-1">Página com conteúdo dinâmico</h5>
<p class="mb-2">
O conteúdo desta página (<strong>{{ $managedPages[$page->slug]['label'] }}</strong>) é gerado dinamicamente pelo sistema e <strong>não deve ser editado manualmente</strong> por aqui. As informações exibidas nela são controladas pela seção <strong>{{ $managedPages[$page->slug]['section'] }}</strong> no painel administrativo.
</p>
@if($managedPages[$page->slug]['route'] !== '#')
<a href="{{ $managedPages[$page->slug]['route'] }}" class="btn btn-sm btn-warning">
<i class="bi bi-box-arrow-up-right me-1"></i> Ir para {{ $managedPages[$page->slug]['section'] }}
</a>
@endif
<p class="small text-muted mt-2 mb-0">
<i class="bi bi-info-circle me-1"></i> Você ainda pode ajustar o título, slug, SEO e o status da página abaixo, mas o conteúdo principal será sobrescrito pelo módulo correspondente.
</p>
</div>
</div>
</div>
@endif
<div class="card shadow mb-4">
<div class="card-header py-3 d-flex justify-content-between align-items-center">
<h6 class="m-0 font-weight-bold text-primary">Editar Conteúdo</h6>
<a href="{{ url($page->slug == 'index' ? '/' : $page->slug) }}" target="_blank" class="btn btn-sm btn-info">
<i class="bi bi-box-arrow-up-right"></i> Visualizar no Site
</a>
</div>
<div class="card-body">
<form action="{{ route('admin.pages.update', $page) }}" method="POST">
@csrf
@method('PUT')
<div class="row">
<div class="col-md-8">
<div class="form-group mb-3">
<label class="font-weight-bold">Título da Página</label>
<input type="text" name="title" class="form-control @error('title') is-invalid @enderror" value="{{ old('title', $page->title) }}" required>
@error('title') <div class="invalid-feedback">{{ $message }}</div> @enderror
</div>
<div class="form-group mb-3 {{ $isManaged ? 'opacity-50' : '' }}">
<label class="font-weight-bold">
Conteúdo (HTML)
@if($isManaged)
<span class="badge badge-warning ml-1"><i class="bi bi-lock me-1"></i>Gerenciado pelo sistema</span>
@endif
</label>
<textarea name="content" id="editor" class="form-control @error('content') is-invalid @enderror" rows="20" {{ $isManaged ? 'disabled' : '' }}>{{ old('content', $page->content) }}</textarea>
@error('content') <div class="invalid-feedback">{{ $message }}</div> @enderror
</div>
</div>
<div class="col-md-4">
<div class="form-group mb-3">
<label class="font-weight-bold">Slug (URL amigável)</label>
<input type="text" name="slug" class="form-control @error('slug') is-invalid @enderror" value="{{ old('slug', $page->slug) }}" {{ in_array($page->slug, ['index', 'about', 'produtos', 'servicos', 'downloads', 'contato', 'faq']) ? 'readonly' : 'required' }}>
<small class="text-muted">As páginas principais do sistema não podem ter o slug alterado.</small>
@error('slug') <div class="invalid-feedback">{{ $message }}</div> @enderror
</div>
<div class="form-group mb-3">
<label class="font-weight-bold">Meta Description (SEO)</label>
<textarea name="meta_description" class="form-control @error('meta_description') is-invalid @enderror" rows="3">{{ old('meta_description', $page->meta_description) }}</textarea>
@error('meta_description') <div class="invalid-feedback">{{ $message }}</div> @enderror
</div>
<div class="form-group mb-3">
<label class="font-weight-bold">Status</label>
<select name="active" class="form-control">
<option value="1" {{ old('active', $page->active) ? 'selected' : '' }}>Ativa (Visível)</option>
<option value="0" {{ old('active', $page->active) ? '' : 'selected' }}>Inativa (Oculta)</option>
</select>
</div>
<hr>
<h6 class="font-weight-bold text-primary mb-3"><i class="bi bi-search me-1"></i> Configurações Avançadas de SEO</h6>
<div class="form-group mb-3">
<label class="small font-weight-bold">Palavras-chave (Keywords)</label>
<input type="text" name="meta_keywords" class="form-control form-control-sm" value="{{ old('meta_keywords', $page->meta_keywords) }}" placeholder="computador, manutenção, vendas">
</div>
<div class="form-group mb-3">
<label class="small font-weight-bold">URL Canônica</label>
<input type="text" name="canonical_url" class="form-control form-control-sm" value="{{ old('canonical_url', $page->canonical_url) }}" placeholder="https://exemplo.com/pagina">
</div>
<div class="bg-light p-3 rounded border">
<h6 class="small font-weight-bold mb-2">Redes Sociais (Open Graph)</h6>
<div class="form-group mb-2">
<label class="x-small">Título OG</label>
<input type="text" name="og_title" class="form-control form-control-sm" value="{{ old('og_title', $page->og_title) }}">
</div>
<div class="form-group mb-2">
<label class="x-small">Descrição OG</label>
<textarea name="og_description" class="form-control form-control-sm" rows="2">{{ old('og_description', $page->og_description) }}</textarea>
</div>
<div class="form-group mb-0">
<label class="x-small">URL da Imagem OG</label>
<input type="text" name="og_image" class="form-control form-control-sm" value="{{ old('og_image', $page->og_image) }}">
</div>
</div>
</div>
</div>
<hr>
<button type="submit" class="btn btn-primary btn-block py-3 fw-bold shadow-sm">
<i class="bi bi-floppy me-1"></i> Salvar Alterações
</button>
</form>
</div>
</div>
@endsection
@push('css')
<!-- Incluindo o editor Summernote para facilitar a edição HTML -->
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-bs4.min.css" rel="stylesheet">
@endpush
@push('js')
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-bs4.min.js"></script>
<script>
$(document).ready(function() {
@if($isManaged)
// Disable editor for system-managed pages
$('#editor').summernote({
height: 400,
disabled: true,
placeholder: 'O conteúdo desta página é gerenciado automaticamente pelo sistema.',
tabsize: 2,
toolbar: []
});
@else
$('#editor').summernote({
height: 400,
placeholder: 'Escreva o conteúdo da página aqui...',
tabsize: 2,
toolbar: [
['style', ['style']],
['font', ['bold', 'underline', 'clear']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['table', ['table']],
['insert', ['link', 'picture', 'video']],
['view', ['fullscreen', 'codeview', 'help']]
]
});
@endif
});
</script>
@endpush