Главная > Soft > Drupal 8: Как сделать кнопки для социальных сетей

Drupal 8: Как сделать кнопки для социальных сетей

Для одного из проектов захотелось использовать Drupal. «Система уже взрослая, хорошо себя зарекомендовавшая, много готовых модулей», — думал я. Но технологии меняются. Drupal 7 уже устаревает. На смену ему приходит Drupal 8, и  многие модули тоже становятся неактуальными. Да и попытка найти толковый и простой модуль для добавления закладок для социальных сетей завершилась неудачей. Есть варианты, но они не включаются главную сеть в СНГ — vk.com. Поэтому и возникает задача написать свой модуль.

Drupal 8: Как сделать кнопки для социальных сетей

Модуль будет предельно простым, минимальная конфигурация в админке. Все необходимые изменения можно делать сразу в шаблонах.

1. В <SITE_PATH>/modules сайта создайте папке sharebuttons — это будет наш модуль

2. В папке <SITE_PATH>/modules/sharebuttons создайте файл sharebuttons.info.yml со следующим содержимым. Это будет описание модуля: имя, зависимости, тип.

name: Share buttons for a page
description: Share buttons
core: 8.x
package: Custom
dependencies:
- node
- block
type: module

3. В папке <SITE_PATH>/modules/sharebuttons создайте файл sharebuttons.module со следующим содержимым. Здесь мы указываем, какие шаблону  и переменные в них будут использоваться (функция sharebuttons_theme), как и что отображать (функция sharebuttons_node_view) и добавление поля в админку для контроля места отображения (функция sharebuttons_entity_extra_field_info)

<?php 
use Drupal\Core\Entity\EntityInterface; 
use Drupal\Core\Entity\Display\EntityViewDisplayInterface; 
use Drupal\Core\Url; 
use Drupal\Component\Utility\Html; 
use Drupal\Component\Utility\UrlHelper; 
use Drupal\node\Entity\NodeType; 
use Drupal\node\Entity\Node; 

function sharebuttons_theme() { 	
return array ( 		'sharebuttons' => array(
			'variables' => array("pageUrl"=>""),
			'template' => 'sharebuttons',
		)			
	);
} 

function sharebuttons_entity_extra_field_info() {
  $extra = array();

  /** @var \Drupal\node\NodeTypeInterface $bundle */
  foreach (NodeType::loadMultiple() as $bundle) {
    $extra['node'][$bundle->id()]['display']['sharebuttons'] = array(
      'label' => t('LegoClub share'),
      'description' => t('Share buttons by LegoClub'),
      'weight' => 5,
      'visible' => TRUE,
    );
  }

  return $extra;
}

function sharebuttons_node_view(array &$build, EntityInterface $node, EntityViewDisplayInterface $display, $view_mode) {
  if ($display->getComponent('sharebuttons') && $node->isPublished()) {
	$url = isset($node) ? $node->url('canonical', array('absolute' => true)) : "nothing";
	if (!isset($url)) {
		$url = ($is_front) ? Url::fromRoute('<front>')->setAbsolute()->toString() : Url::fromRoute('<current>')->setAbsolute()->toString();
	} else {
	}
	$url = urlencode($url);

	$build['sharebuttons'] = array(
      '#pageUrl' => $url,
      '#theme' => 'sharebuttons',
    );
  }
}

4. Теперь можно подготовить сам шаблон. Для этого создайте папке templates в <SITE_PATH>/modules/sharebuttons. И в ней файл sharebuttons.html.twig с содержимым:

<a href="http://www.facebook.com/sharer.php?u={{ pageUrl|raw }} " target="_blank" rel="nofollow">
	<img src="/sites/default/files/facebook.gif" alt="facebook" style="border:0px;margin:2px;padding:0px;" width="88px" height="25px">
</a>
<a href="http://vk.com/share.php?url={{ pageUrl|raw }} " target="_blank" rel="nofollow">
	<img src="/sites/default/files/vkontakte.gif" alt="vk" style="border:0px;margin:2px;padding:0px;" width="88px" height="25px">
</a>
<a href="https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&service=odnoklassniki&st.shareUrl={{ pageUrl|raw }} " target="_blank" rel="nofollow">
	<img src="/sites/default/files/ok.gif" alt="ok" style="border:0px;margin:2px;padding:0px;" width="88px" height="25px">
</a>

Модуль готов. Осталось только подложить картинки и добавить его в Drupal 8.

Categories: Soft Tags: ,
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.