Ви задумувалися, яка картинка прикріплюється до посилання, коли відвідувач поширює допис з вашого сайту в соцмережі? Іноді, звичайно ж, можна пролистати і вибрати з кількох пропонованих зображень, а іноді немає такої можливості. Іноді підвантажується перша-ліпша картинка, а це може бути і логотип, і смайлик, і картинка лічильника.
Звичайно, власника сайту такий варіант не влаштовує. Власник сайту хоче, щоб до розшарюваного допису підвантажувалось правильне зображення, формувався правильний заголовок і підтягувався правильний опис. Як це зробити? Для цього й існує протокол Open Graph.
Open Graph – протокол мікророзмітки контенту сторінки для відправки вмісту в соціальні мережі. Іншими словами, ми самі визначаємо, той контент, який буде відправлено користувачами в соціальні мережі.
Наприклад, при поширюванні цієї статті в соцмережі повинні передаватися такі дані:
og:site_name — назва сайту (наприклад, "Блог Влада Циганика") og:type — тип контенту (наприклад, article, movie, product та ін.) og:title — заголовок статті og:image — посилання на картинку до статті og:description — короткий опис (максимум 250 символів) og:url — посилання на статтю
Все це прописується в секції <head> сайту. Ось так:
<meta property="og:site_name" content="Блог Влада Циганика" /> <meta property="og:type" content="article" /> <meta property="og:title" content="Мікророзмітка Open Graph для DLE" /> <meta property="og:image" content="http://404.in.ua/wp-content/uploads/2015/03/facebook-open-graph-error.png" /> <meta property="og:description" content="Ви задумувалися, яка картинка прикріплюється до посилання, коли ..." /> <meta property="og:url" content="http://404.in.ua/2015/03/open-graph-dle/" />
Ніби все зрозуміло.
Як же тепер все це організувати для сайту, що працює на DLE (DataLife Engine)?
Не так вже й важко.
Open Graph розмітка повної новини сайту на DLE
Відкриваєм файл /index.php і шукаємо там рядок:
$tpl->set ( '{headers}', $metatags."\n".$js_array );
Міняємо його на:
$tpl->set ( '{headers}', $metatags . $opg ."\n". $js_array);
Відкриваєм файл /engine/modules/show.full.php і шукаємо там рядок:
$tpl->set( '{full-link}', $full_link );
Після нього вставляємо:
$opg = < <<HTML <meta property="fb:admins" content="адреса сторінки facebook"/> <meta property="og:type" content="article" /> <meta property="og:url" content="$full_link" /> <meta property="og:title" content="{$row['title']}" /> <meta property="og:site_name" content="Назва вашого сайту" /> HTML;
Далі, в цьому ж файлі шукаємо рядок:
if ($row['metatitle']) $metatags['header_title'] = $row['metatitle'];
Після нього вставляємо:
$opg .= "\n <meta property=\"og:description\" content=\"{$metatags['description']}\" />";
Далі, в цьому ж файлі шукаємо рядок:
$row['full_story'] = stripslashes($row['full_story']);
Після нього вставляємо:
preg_match_all('/<img [^/>]*src=["\\\']?([^"\\\' >]+\\.(jpeg|jpg|png|gif))["\\\']?\\s*[^>]*>/si', $row['full_story'], $images); foreach($images[1] as $key => $value) { $control = strstr($value, 'posts'); $control = substr($control, 0, strpos($control, '/')); if ($control == 'posts') { $opengraph .= "\r\n" . ' <meta property="og:image" content="'. $value .'" />'; $opengraph .= "\r\n" . ' <link rel="image_src" href="'. $value .'" />'; if ($key == 4) break; } } unset($images, $key, $value, $control);
В останньому коді здійснюється перевірка всіх зображень, які є на сторінці даної повної новини (лого, картинки, смайлики, банери…) і вибираються лише ті з них, які розміщені в папці “posts”, а ми ж знаємо що власне туди завантажуються зображення до новин.
Також, щоб не перевантажувати <head> зайвими тегами, якщо картинок надто багато, то тут встановлено обмеження в 5 зображень. Четвірка означає, що будуть виводитися теги з адресами перших 5 зображень (0,1,2,3,4). Навіть, якщо зображень буде 20, то все одно формуватимуться метатеги з адресами перших п’яти картинок.
Ну от і все.
Залишилося лише у файлі /templates/назва_вашого_шаблону/main.tpl замінити <head> на:
<head [aviable=showfull] prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#"[/aviable]>
щоб це все запрацювало. Ну ось, тепер все!
Влад Циганик
Дивіться також
2 Comments
Залишити відповідь Скасувати відповідь
Меню категорій
- (не) Дизайн (8)
- Business (4)
- Design (3)
- Guide (1)
- Думи мої… (53)
- Звідусіль (98)
- Інтернети (16)
- Рідна мова (19)
- Шлях до успіху (8)
Напишите, пожалуйста, на какой версии DLE было проверено. И на каких точно будет работать? 🙂
Точно перевірено і працює для версії DLE 9.8