_fields.blade.php 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. {{--
  2. Partial: поля макета блока — итерируется по массиву $fields.
  3. Переменные:
  4. $fields — массив определений полей из BlockLayoutRegistry
  5. $prefix — префикс для атрибута name (обычно 'data')
  6. $values — текущие значения полей (массив)
  7. Сложные типы вынесены в admin/blocks/partials/:
  8. _field_image.blade.php — image
  9. _field_pickers.blade.php — cars_picker, makes_picker, reviews_picker, services_picker
  10. _field_repeater.blade.php — repeater
  11. --}}
  12. @php
  13. /* Хелпер: строит публичный URL для значения поля image */
  14. $imageUrl = fn(?string $val): string =>
  15. $val
  16. ? (str_starts_with($val, 'http') ? $val : asset('storage/' . $val))
  17. : '';
  18. @endphp
  19. @foreach($fields as $field)
  20. {{-- ── Checkbox (булев флаг) ───────────────────────────────────────── --}}
  21. @if($field['type'] === 'checkbox')
  22. <div class="form-group">
  23. <div class="custom-control custom-switch">
  24. <input type="hidden" name="{{ $prefix }}[{{ $field['name'] }}]" value="0">
  25. <input type="checkbox"
  26. class="custom-control-input"
  27. id="chk-{{ $field['name'] }}"
  28. name="{{ $prefix }}[{{ $field['name'] }}]"
  29. value="1"
  30. {{ ($values[$field['name']] ?? false) ? 'checked' : '' }}>
  31. <label class="custom-control-label" for="chk-{{ $field['name'] }}">
  32. {{ $field['label'] }}
  33. </label>
  34. </div>
  35. </div>
  36. {{-- ── Текст / URL ──────────────────────────────────────────────────── --}}
  37. @elseif($field['type'] === 'text' || $field['type'] === 'url')
  38. <div class="form-group">
  39. <label>{{ $field['label'] }}</label>
  40. <input type="text"
  41. name="{{ $prefix }}[{{ $field['name'] }}]"
  42. class="form-control"
  43. value="{{ $values[$field['name']] ?? '' }}">
  44. </div>
  45. {{-- ── Textarea ──────────────────────────────────────────────────────── --}}
  46. @elseif($field['type'] === 'textarea')
  47. <div class="form-group">
  48. <label>{{ $field['label'] }}</label>
  49. <textarea name="{{ $prefix }}[{{ $field['name'] }}]"
  50. class="form-control" rows="3">{{ $values[$field['name']] ?? '' }}</textarea>
  51. </div>
  52. {{-- ── Image — загрузка файла ─────────────────────────────────────── --}}
  53. @elseif($field['type'] === 'image')
  54. @include('admin.blocks.partials._field_image')
  55. {{-- ── Picker-поля (cars, makes, reviews, services) ──────────────── --}}
  56. @elseif(in_array($field['type'], ['cars_picker', 'makes_picker', 'reviews_picker', 'services_picker']))
  57. @include('admin.blocks.partials._field_pickers')
  58. {{-- ── Repeater ─────────────────────────────────────────────────────── --}}
  59. @elseif($field['type'] === 'repeater')
  60. @include('admin.blocks.partials._field_repeater')
  61. @endif
  62. @endforeach