_card_og.blade.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. {{--
  2. Partial: карточка «Open Graph» — метатеги для соцсетей
  3. Переменные из родителя: $settings (ассоциативный массив)
  4. OG-теги читают: ВКонтакте, Telegram, WhatsApp, Facebook, Twitter/X, Discord и все мессенджеры.
  5. Когда кто-то делится ссылкой — они показывают og:title, og:description, og:image.
  6. --}}
  7. <div class="card card-success card-outline">
  8. <div class="card-header">
  9. <h3 class="card-title">
  10. <i class="fas fa-share-alt mr-2"></i>Open Graph — теги для соцсетей и мессенджеров
  11. </h3>
  12. <div class="card-tools">
  13. <button type="button" class="btn btn-tool" data-card-widget="collapse">
  14. <i class="fas fa-minus"></i>
  15. </button>
  16. </div>
  17. </div>
  18. <div class="card-body">
  19. {{-- Пояснительный баннер --}}
  20. <div class="alert alert-info py-2 mb-4" style="font-size:13px">
  21. <i class="fas fa-info-circle mr-1"></i>
  22. <strong>Что такое Open Graph?</strong> Когда пользователь делится ссылкой на сайт в ВКонтакте,
  23. Telegram, WhatsApp или Discord — они показывают превью: картинку, заголовок и описание.
  24. Эти данные берутся из OG-тегов в коде страницы. Страница автомобиля подставляет свои данные автоматически;
  25. остальные страницы используют значения ниже как дефолт.
  26. </div>
  27. <div class="row">
  28. <div class="col-md-6">
  29. {{-- og:site_name --}}
  30. <div class="form-group">
  31. <label class="font-weight-bold">Название сайта <small class="text-muted font-weight-normal">(og:site_name)</small></label>
  32. <input type="text" name="og_site_name"
  33. class="form-control @error('og_site_name') is-invalid @enderror"
  34. value="{{ old('og_site_name', $settings['og_site_name'] ?? '') }}"
  35. placeholder="Точка — автоподбор и доставка авто"
  36. maxlength="100">
  37. <small class="text-muted">Название организации/бренда. Отображается как «издатель» ссылки.</small>
  38. @error('og_site_name')<div class="text-danger small mt-1">{{ $message }}</div>@enderror
  39. </div>
  40. {{-- og:description --}}
  41. <div class="form-group">
  42. <label class="font-weight-bold">Описание по умолчанию <small class="text-muted font-weight-normal">(og:description)</small></label>
  43. <textarea name="og_description"
  44. class="form-control @error('og_description') is-invalid @enderror"
  45. rows="3" maxlength="300"
  46. placeholder="Подбор и доставка автомобилей из Японии, Кореи, Европы и США под ключ. Прозрачные условия, фиксированная цена.">{{ old('og_description', $settings['og_description'] ?? '') }}</textarea>
  47. <small class="text-muted">
  48. Дефолтное описание для главной и других страниц. Рекомендуемая длина: 100–200 символов.
  49. <span id="og-desc-count" class="text-{{ mb_strlen($settings['og_description'] ?? '') > 200 ? 'danger' : 'muted' }}">
  50. {{ mb_strlen($settings['og_description'] ?? '') }}/300
  51. </span>
  52. </small>
  53. @error('og_description')<div class="text-danger small mt-1">{{ $message }}</div>@enderror
  54. </div>
  55. {{-- og:locale --}}
  56. <div class="form-group mb-0">
  57. <label class="font-weight-bold">Локаль <small class="text-muted font-weight-normal">(og:locale)</small></label>
  58. <select name="og_locale" class="form-control @error('og_locale') is-invalid @enderror">
  59. @foreach([
  60. 'ru_RU' => 'ru_RU — Русский (Россия)',
  61. 'en_US' => 'en_US — English (US)',
  62. 'kk_KZ' => 'kk_KZ — Қазақ (Казахстан)',
  63. ] as $val => $lbl)
  64. <option value="{{ $val }}" @selected(($settings['og_locale'] ?? 'ru_RU') === $val)>{{ $lbl }}</option>
  65. @endforeach
  66. </select>
  67. <small class="text-muted">Язык сайта в формате ISO 639-1_ISO 3166-1. Влияет на отображение в Facebook.</small>
  68. @error('og_locale')<div class="text-danger small mt-1">{{ $message }}</div>@enderror
  69. </div>
  70. </div>
  71. <div class="col-md-6">
  72. {{-- og:image --}}
  73. <div class="form-group">
  74. <label class="font-weight-bold">Дефолтное OG-изображение <small class="text-muted font-weight-normal">(og:image)</small></label>
  75. @if(!empty($settings['og_image']))
  76. <div class="mb-2">
  77. <img src="{{ asset($settings['og_image']) }}" alt="OG image"
  78. style="max-width:100%;border-radius:6px;border:1px solid #dee2e6">
  79. <div class="text-muted" style="font-size:11px;margin-top:3px">Текущее изображение</div>
  80. </div>
  81. @endif
  82. <div class="custom-file">
  83. <input type="file" class="custom-file-input @error('og_image') is-invalid @enderror"
  84. id="og_image" name="og_image" accept="image/jpeg,image/png,image/webp">
  85. <label class="custom-file-label" for="og_image">
  86. {{ !empty($settings['og_image']) ? 'Заменить изображение' : 'Выбрать изображение' }}
  87. </label>
  88. </div>
  89. <small class="text-muted">
  90. <i class="fas fa-ruler-combined fa-xs"></i> <strong>Обязательный размер: 1200 × 630 px</strong> (соотношение 1.91:1).<br>
  91. Форматы: JPG, PNG, WebP. Максимум 2 МБ.<br>
  92. Это изображение показывается когда страницей делятся в соцсетях.
  93. Страницы автомобилей используют фото самого авто автоматически.
  94. </small>
  95. @error('og_image')<div class="text-danger small mt-1">{{ $message }}</div>@enderror
  96. </div>
  97. {{-- Шпаргалка по тегам --}}
  98. <div class="card card-body bg-light p-3" style="font-size:12px;line-height:1.8">
  99. <div class="font-weight-bold mb-1 text-muted text-uppercase" style="font-size:11px;letter-spacing:.04em">Что куда идёт</div>
  100. <div><code>og:title</code> — заголовок страницы (<code>&lt;title&gt;</code>)</div>
  101. <div><code>og:description</code> — поле «Описание по умолчанию» выше</div>
  102. <div><code>og:image</code> — OG-изображение (авто → фото авто, иначе выше)</div>
  103. <div><code>og:url</code> — текущий адрес страницы (авто)</div>
  104. <div><code>og:site_name</code> — «Название сайта» выше</div>
  105. <div><code>og:type</code> — <code>website</code> (авто → <code>product</code>)</div>
  106. <div><code>og:locale</code> — «Локаль» выше</div>
  107. <hr class="my-2">
  108. <div><i class="fab fa-twitter mr-1"></i><code>twitter:card</code> — <code>summary_large_image</code></div>
  109. <div class="text-muted mt-1">Twitter/X читает те же OG-теги.</div>
  110. </div>
  111. </div>
  112. </div>
  113. </div>
  114. </div>