| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- {{--
- Вьюха: Ссылки для парсера — динамический список URL-адресов
- Создана: 2026-06-06
- Контроллер: Admin\ParserLinkController::index() / update()
- Переменные: $links (коллекция ParserLink, отсортированная по sort_order)
- Логика: POST сохраняет весь список целиком (truncate + insert).
- JS позволяет добавлять/удалять строки без перезагрузки страницы.
- --}}
- @extends('admin.layout')
- @section('title', 'Ссылки для парсера')
- @section('content_header')
- <div class="d-flex justify-content-between align-items-center">
- <h1 class="m-0">Ссылки для парсера</h1>
- </div>
- @stop
- @section('breadcrumb')
- <li class="breadcrumb-item"><a href="{{ route('admin.dashboard') }}">Главная</a></li>
- <li class="breadcrumb-item active">Ссылки для парсера</li>
- @stop
- @section('content')
- @if(session('success'))
- <div class="alert alert-success alert-dismissible">
- <button type="button" class="close" data-dismiss="alert">×</button>
- {{ session('success') }}
- </div>
- @endif
- @if($errors->any())
- <div class="alert alert-danger alert-dismissible">
- <button type="button" class="close" data-dismiss="alert">×</button>
- <ul class="mb-0">
- @foreach($errors->all() as $e)<li>{{ $e }}</li>@endforeach
- </ul>
- </div>
- @endif
- <div class="row justify-content-center">
- <div class="col-md-8">
- <div class="card card-primary card-outline">
- <div class="card-header">
- <h3 class="card-title">URL-адреса для обхода парсером</h3>
- </div>
- <div class="card-body">
- <form action="{{ route('admin.parser-links.update') }}" method="POST" id="parser-links-form">
- @csrf
- <div id="links-container">
- @forelse($links as $link)
- <div class="link-row input-group mb-2">
- <input type="text" name="urls[]"
- class="form-control"
- value="{{ $link->url }}"
- placeholder="https://example.com/catalog">
- <div class="input-group-append">
- <button type="button" class="btn btn-danger btn-remove-link" title="Удалить">
- <i class="fas fa-times"></i>
- </button>
- </div>
- </div>
- @empty
- <div class="link-row input-group mb-2">
- <input type="text" name="urls[]"
- class="form-control"
- placeholder="https://example.com/catalog">
- <div class="input-group-append">
- <button type="button" class="btn btn-danger btn-remove-link" title="Удалить">
- <i class="fas fa-times"></i>
- </button>
- </div>
- </div>
- @endforelse
- </div>
- <div class="mb-3">
- <button type="button" id="btn-add-link" class="btn btn-outline-primary btn-sm">
- <i class="fas fa-plus"></i> Добавить ссылку
- </button>
- </div>
- <div class="d-flex">
- <button type="submit" class="btn btn-primary">
- <i class="fas fa-save"></i> Сохранить
- </button>
- </div>
- </form>
- </div>
- <div class="card-footer text-muted small">
- Каждая строка — отдельный URL. Пустые строки игнорируются при сохранении.
- </div>
- </div>
- </div>
- </div>
- @stop
- @push('js')
- <script>
- (function () {
- var container = document.getElementById('links-container');
- function makeRow(value) {
- var row = document.createElement('div');
- row.className = 'link-row input-group mb-2';
- row.innerHTML =
- '<input type="text" name="urls[]" class="form-control" value="' + (value || '') + '" placeholder="https://example.com/catalog">' +
- '<div class="input-group-append">' +
- '<button type="button" class="btn btn-danger btn-remove-link" title="Удалить">' +
- '<i class="fas fa-times"></i>' +
- '</button>' +
- '</div>';
- return row;
- }
- // Добавить строку
- document.getElementById('btn-add-link').addEventListener('click', function () {
- var row = makeRow('');
- container.appendChild(row);
- row.querySelector('input').focus();
- });
- // Удалить строку (делегирование на контейнер)
- container.addEventListener('click', function (e) {
- var btn = e.target.closest('.btn-remove-link');
- if (!btn) return;
- var rows = container.querySelectorAll('.link-row');
- if (rows.length === 1) {
- // Если последняя строка — просто очищаем её
- rows[0].querySelector('input').value = '';
- } else {
- btn.closest('.link-row').remove();
- }
- });
- })();
- </script>
- @endpush
|