Правильные картинки для ссылок на ваш сайт в социальных сетях

При публикации ссылок на страницы вашего сайта в Facebook, Вконтакте, и т.д. таковые вставляются с картинками. Вы можете заранее позаботится о том, чтобы автоматически вставлялись нужные картинки, а не какие попало. Речь пойдет о том, как это делается в Drupal 7.

Картинки в сообщениях соц.сетей

Не важно, кто и каким образом публикует ссылки на страницы вашего сайта. Это может быть ваш модуль, который это делает автоматически в момент, когда вы размещаете новый контент. Также это могут быть пользователи, которые тыкают кнопки соц.сетей или тупо копируют ссылки и вставляют их по назначению.

Дело в том, что когда публикуется ссылка в соц.сети, то ее скрипт обращается на указанную страницу сайта. Он проверяет ее доступность, еще, если нужно, берет оттуда заголовок и кусок текста. Также он берет оттуда специальную картинку, ну или какую попало картинку.

Обычно, если нет специальной картинки, то на странице в тексте автоматически ищутся все доступные картинки. Далее, если ссылка в соц.сеть публикуется пользователем вручную, то, например, Facebook, предлагает пользователю выбор, какую именно картинку из найденных прикрепить к ссылке. Если ссылка публикуется автоматически или полуавтоматически, то берется первая попавшаяся картинка.

В общем, если вы хотите, чтобы ссылки на ваш сайт всегда выглядели хорошо, то лучше всего позаботится и сделать для каждой страницы специальную картинку. Для этого достаточно поместить в шапку следующие строчки:

<head ...>
...
<link rel="image_src" href="полная ссылка на картинку" />
<meta property="og:site_name" content="название сайта" />
<meta property="og:image" content="полная ссылка на картинку" />
...
</head>

Не знаю, существует ли готовый модуль для Drupal 7, я не нашел. Предлагаю свое решение.

В каталоге с вашим шаблоном находим файл template.php. Если такого нет, то создаем его. В него вписываем код следующей функции:

function perspective_preprocess_html(&$variables) {
  $imgg_url = 'https://d1mon.com/sites/all/themes/perspective/d1mon.png';
  if (arg(0) == 'node' && arg(1)) {
    $nid = arg(1);
    $node = node_load($nid);
    if (!empty($node->field_image[ru])) {
      $image_uri = $node->field_image[ru][0]['uri'];
      $imgg_url = image_style_path('thumbnail', $image_uri);
      $imgg_url = file_create_url($imgg_url);
    }
  }
  drupal_add_html_head_link(array('rel' => 'image_src', 'href' => $imgg_url));
 
  drupal_add_html_head(
    array(
      '#tag' => 'meta',
      '#attributes' => array(
        'property' => 'og:site_name',
        'content' => 'Название сайта',
        ),
      ), 'perspective:og_name_meta'
  );
 
  drupal_add_html_head(
    array(
      '#tag' => 'meta',
      '#attributes' => array(
        'property' => 'og:image',
        'content' => $imgg_url,
        ),
      ), 'perspective:og_image_meta'
  );
}

Что важно:

  • «perspective» — это название моего шаблона. Если у вас шаблон называется, например, «site», то функция будет иметь название «site_preprocess_html». Если у вас уже есть такая функция в названном файле, то добавте содержимое из моей функции в свою. Именно добавьте, а не замените. Другие упоминания «perspective» в функции тоже замените.
  • Переменной $imgg_url присваивается готовая ссылка на картинку по умолчанию. Если у какой-то страницы окажется, что нет своей специальной картинки, то будет использоваться эта. Размещать картинку можете где угодно, главное укажите здесь правильную ссылку.
  • Специальные картинки будут формироваться для страниц нод. Они берутся из поля «field_image», которое есть по умолчанию в Drupal 7. Если в это поле грузится несколько картинок, то берется первая, соответственно можете сортировать картинки при редактировании нод, если нужно.
  • Картинки берутся не в оригинальном размере, а в стиле «thumbnail». Данный стиль тоже есть по умолчанию в Drupal 7.
  • Если у вас поле для картинок «field_image» или стиль для изображений «thumbnail» имеют другие машинные названия, то поменяйте соответственно их в коде функции.
  • Еще, у меня по умолчанию у сайта русский язык и я обращаюсь, используя обозначение «ru» здесь field_image[ru] и здесь $node->field_image[ru][0][‘uri’]. Поменяйте тоже «ru» на «en», если у вас англоязычный сайт и т.д.

Вроде все. Из написанного должно быть уже ясно, что функция проверяет открытую страницу сайта. Если это страница ноды, то проверяется, есть ли для этой ноды загруженная картинка. Если есть, то она и используется. Если картинки нет, или это страница не ноды, то используется картинка по умолчанию.

Чтобы все точно работало сбросьте кеш у сайта.

3 Комментария

  1. Аноним

    Скажите а для Drupal 6 подойдет?

  2. Есть всем известный модуль metatag — в его настройках можно прописать токены для автоматической генерации изображений (в данный момент сам разбираюсь с этим)

Добавить комментарий