Блог для начинающих веб разработчиков. HTML, СSS, Jquery, Drupal и другое.

→ Добавляем кнопки социальных сетей в Drupal 7. Вариант без внешних скриптов.

Опубликовано: 24 апреля 2012

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

Размещение таких кнопок очень полезно. Ведь после нажатия кнопки «поделиться», ссылка с кратким описанием сайта и может даже картинкой появится на стене у того кто её нажал, а там её могут увидеть и перейти другие пользователи социальной сети. В этой статье рассмотрим три самые популярные соц. сети: Вконтакте, Twitter и Facebook.

Каждая из них предоставляет нужные кнопки для установки на сторонних сайтах.

Для «В Контакте» код можно найти здесь.

Для Твиттера – ссылка.

Для Facebook – здесь.

Однако, как видно, каждая такая кнопка подгружает свой js-файл со скриптом. Это замедляет время загрузки страницы в целом. Кроме того, используя готовый код, вебмастер никак не сможет оформить кнопки социальных сетей по своему желанию – всё оформление находится вне сайта.

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

Ниже представлен пример создания блока из трёх социальных кнопок, по клику на которые открывается новое окно браузера (в центре экрана), где у посетителя запрашивается подтверждение на создание закладки. После публикации, окно закрывается.

Весь этот блок, мы так же интегрируем с темой Drupal 7.

Для начала небольшая справка:

1. В контакте, «поделиться» принимает адрес вида:



http://vkontakte.ru/share.php?url=http://адресСайта.ru/адресСтраницы

При этом, в качестве заголовка берётся содержание тега <title>

А так же, берётся какая-то похожая на логотип картинка. Если нам нужно указать картинку точно, то необходимо вставить в заголовок страницы (внутрь контейнера <head></head>) такой тег:



<link rel="image_src" href="адресКартинки" />

2. Социальная кнопка от твиттера - «твиттнуть» позволяет опубликовать твитт с заранее заготовленным текстом и ссылкой. URL выглядит следующим образом:



https://twitter.com/share?text="ТекстТвитта&url=http://АдресСайта.ru/адресСтраницы

При этом текст твитта должен быть url-кодирован, иначе могут быть ошибки. При нажатии на эту ссылку будет предложено создать твитт содержащий текст и ссылку.

3. Социальная закладка Facebok похожа на В контакте и выглядит так:



http://www.facebook.com/sharer.php?u=http://адресСайта.ru/страница

Итак, пусть мы хотим оформить блок кнопок как-то так:

При этом HTML - размека довольно проста. Весь HTML состоит из трёх ссылок:



<a href="#" class="soc-icon"><img src="/images/facebook.png" width="30" height="30"></a>
<a href="#" class="soc-icon”><img src="/images/twitter.png" width="30" height="30"></a>
<a href="#" class="soc-icon"><img src="/images/vk.png" width="30" height="30"></a>

Используя несложный CSS, мы оформим эффект подведения курсора к кнопкам.



.soc-icon{
	display:block;
	float:left;
	opacity:0.8;
	margin:2px;}
.soc-icon:hover{
	opacity:1;}

Теперь займёмся функционалом.

В Drupal 7, наши кнопки можно вставить в файл node.tpl.php вашей темы в нужное место. Этот файл указывает как будет выводится именно материал сайта.

Из этого файла мы имеем доступ к переменным $node_url и $title, которые выводят url путь до статьи (от корня сайта, без домена), и заголовок статьи соответственно. Мы можем собрать из этих переменных строки для гиперссылок наших социальных кнопок. Сохраним каждую в переменной. Ниже php-код:



<?php
$urlvk = 'http://vk.com/share.php?url=' . 'http://' . $_SERVER["HTTP_HOST"] . $node_url;
$urlfb = 'http://www.facebook.com/sharer.php?u=' . 'http://' . $_SERVER["HTTP_HOST"] .$node_url;
$urltw = 'https://twitter.com/share?text=' . urlencode($title) . '&url=http://' . $_SERVER["HTTP_HOST"] . $node_url;
?>

Здесь мы используем переменную окружения $_SERVER["HTTP_HOST"], чтобы получить имя домена нашего сайта.

URL – адреса есть, HTML разметка тоже есть. Можно просто подставить адреса в атрибут href ссылок, и всё уже будет работать:



<a href="<?=$urlvk?>" class="soc-icon"><img src="/sites/all/themes/heavenweb/images/vk.png" width="20" height="20"></a>
<a href="<?=$urltw?>" class="soc-icon"><img src="/sites/all/themes/heavenweb/images/twitter.png" width="20" height="20"></a>
<a href="<?=$urlfb?>" class="soc-icon"><img src="/sites/all/themes/heavenweb/images/facebook.png" width="20" height="20"></a>

Но есть одна проблема: нам нужно, чтобы посетитель остался на сайте, а не перешёл сайт социальной сети.

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

Так как Drupal поддерживает jQuery, напишем обработчик клика по ссылке с CSS-классом «soc-icon». Нажатие вызовет функцию socialopen, которая откроет новое окно и загрузит туда адрес из атрибута «href» ссылки. Весь JavaScript код ниже:


function socialopen(url){
var winpar='width=500,height=400,left=' + ((window.innerWidth - 500)/2) + ',top=' + ((window.innerHeight - 400)/2) ;
window.open(url,'tvkw',winpar);
}
(function ($) {	
	$(document).ready(function(e) {
		$('a.soc-icon').click(function(){
		var url = $(this).attr('href');	
			socialopen(url);
		return false;
		})
	});
})(jQuery);

Функция socialopen вызывает JavaScript метод window.open(), который и открывает новое окно. В этот метод мы передаём параметры этого окна. Обратите внимание, как мы здесь высчитали положение окна (параметры left и top). Благодаря такому методу, новое окно появляется посередине экрана.

При интеграции социальных кнопок в тему Drupal 7, JavaScript код лучше поместить в js файл, и подключить его к теме (в крайнем случае можно вставить код в html.tpl.php, page.tpl.php или node.tpl.php, с помощью тега <script>). CSS код тоже удобно вставить в файл стилей с расширением css, подключённый к теме. Ну а HTML код вставляется в node.tpl.php в нужное место.

Вы можете посмотреть как работает этот метод на этом блоге, А исходники скачать по ссылке ниже.

Скачать исходник

Поделиться:
Комментарии

Спасибо, красивое решение. Можно узнать, как скрыть кнопки в анонсе статей?

вс, 2012-09-16 18:03

Максим, добрый день, рад что вам понравилось.

В файле node.tpl.php есть переменная $page, которая равна True только если статья открывается полностью. Соответственно, используя условный оператор:

<?php if ($page): ?>
     <!-- Код здесь виден только в полной версии ноды -->
<?php endif; ?>

Как-то так :)

Faraday
вс, 2012-09-16 23:39

Спасибо, помогло)

вс, 2012-09-16 23:53

Что же насчет drupal 6?? Я сделал все как описано тут, только java script не подбирает ссылки, можно как то это исправить?

Петр
пт, 2012-10-12 17:18

Поменял в скрипте класс с add-social a на soc-icon, заработало. Спасибо. =)

Слава
чт, 2013-01-31 20:01

Вы правы, здесь действительно ошибка. Для блога, я делал обёртку с классом add-social, а здесь забыл поменять данные. Сейчас исправил, должно работать. Спасибо за помощь :)

Faraday
пт, 2013-02-01 20:00

Извиняюсь, а использовать target=_blank нельзя? Обязательно JS юзать?

Андрей
вс, 2013-06-30 18:04

А что нужно сделать еще, чтобы показывалось количество поделившихся, как например на новостях мэйл ру?

пт, 2013-07-05 14:27

Огромное спасибо все заработало как часики. Побольше бы таких толковых статей. Молодец.

Jaan Pajusalu
сб, 2013-07-06 13:17

Снимаю свой вопрос по JS.
Более того, добавлю, что код типа:
<?php
$urlfb = 'http://www.facebook.com/sharer.php?u=http://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
$urlvk = 'http://vk.com/share.php?url=http://'.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
echo 'Поделись с друзьями: 
';?>
Можно вставлять просто в блок и размещать, например, в зоне хидера без правки node.tpl.php

Благодарю автора за статью!
А есть виды ссылок "поделиться" на одноклассники и мой мир?

Андрей
пн, 2013-07-15 23:04

Вопрос по ссылкам тоже снят. Если кого интересует полный код:



<?php
  $curr_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
  $urlfb = 'http://www.facebook.com/sharer.php?u='.$curr_url;
  $urlvk = 'http://vk.com/share.php?url='.$curr_url;
  $urlmm = 'http://connect.mail.ru/share?share_url='.$curr_url;
  $urlok = 'http://www.odnoklassniki.ru/dk?st.cmd=addShare&st.s=1&st._surl='.$curr_url;
  echo '<span class="soc-icon">Поделись с друзьями: </span>
<a href="'.$urlfb.'" class="soc-icon"><img src="/sites/default/files/images/facebook.png" width="20" height="20"></a>
<a href="'.$urlvk.'" class="soc-icon"><img src="/sites/default/files/images/vk.png" width="20" height="20"></a>
<a href="'.$urlmm.'" class="soc-icon"><img src="/sites/default/files/images/mm.png" width="20" height="20"></a>
<a href="'.$urlok.'" class="soc-icon"><img src="/sites/default/files/images/ok.png" width="20" height="20"></a>';
?>
Андрей
вт, 2013-07-16 00:09

Не знаю почему, но код ссылок обрезается.
В принципе, он мало отличается от приведенного в статье, только выводится через echo.

Андрей
вт, 2013-07-16 00:11

Подредактировал, теперь всё в норме. Спасибо за дополнение :)

Faraday
вт, 2013-08-06 23:45

В ссылки можно добавлять картинки, из которых будет предложен выбор при нажатии кнопки. А вот как сделать, чтобы не вываливались все доступные на странице картинки, а отфильтровать ненужные (типа служебных картинок)?

Андрей
ср, 2013-07-31 14:03

Огромное спасибо! Хотелось бы только узнать еще одну вещь - каким образом можно выяснить, какой url добавлять для других сетей? Откуда бралась инфа, что для одноклассников, например, http://www.odnoklassniki.ru/dk?st.cmd=addShare&st.s=1&st._surl=, а для фейсбука http://www.facebook.com/sharer.php?u= Хотелось бы самостоятельно настроить еще несколько кнопок, но на сайтах сетей инфа только о том, как добавить кнопки через их JS.

Terris
чт, 2013-08-22 11:44

Ну это надо смотреть отдельно, сам, к сожалению, с другими соц. сетями не работал.

Faraday
вс, 2013-08-25 15:59

А где примеры кнопок то тут на сайте? Не нашла (((

сб, 2014-10-25 15:19

Пример именно на сайте в конце каждой статьи, по правому краю блок "Поделиться:" и три кнопки, вк, твиттер и фейсбук.

Faraday
сб, 2014-11-01 13:40

Большое спасибо

Вася
вт, 2017-05-02 18:59

empire city online casino pala casino online jackpot party casino facebook vegas casino online | https://online-casino.fun/ - casino games https://online-casino.fun/ - online gambling casino

пн, 2018-08-13 01:38

fortune bay casino gsn casino slots foxwoods casino choctaw casino durant oklahoma | https://online-casino.fun/ - slots for real money https://online-casino.fun/ - gsn casino on facebook

пн, 2018-08-13 20:18

online gambling casino casino slots casino bonus online gambling | https://onlinecasinobiggs.com/ - slots for real money https://onlinecasinobiggs.com/ - casino play

вт, 2018-08-14 12:41

free online casino slots real money casino casino real money online gambling casino | https://onlinecasinobiggs.com/ - free online casino slots https://onlinecasinobiggs.com/ - casino real money

вт, 2018-08-14 16:15

casino online casino play free online casino best online casino | https://onlinecasinobiggs.com/ - online casino gambling https://onlinecasinobiggs.com/ - online gambling

вт, 2018-08-14 16:49

zone online casino play online casino free online casino online casino slots | https://onlinecasinobiggs.com/ - casino online slots https://onlinecasinobiggs.com/ - casino play

вт, 2018-08-14 17:23

online gambling casino free online casino free online casino slots online gambling casino | https://onlinecasinobiggs.com/ - play casino https://onlinecasinobiggs.com/ - casino games

вт, 2018-08-14 19:50

online casino casino bonus zone online casino play casino | https://onlinecasinodd.com/ - slots for real money https://onlinecasinodd.com/ - free online casino slots

вт, 2018-08-14 19:57

zone online casino mgm online casino real casino zone online casino | https://onlinecasinodd.com/ - real casino https://onlinecasinodd.com/ - real money casino

вт, 2018-08-14 21:47

casino blackjack play casino casino blackjack mgm online casino | https://onlinecasinodd.com/ - online gambling https://onlinecasinodd.com/ - online casino bonus

вт, 2018-08-14 22:26

casino bonus best online casino zone online casino best online casino | https://onlinecasinodd.com/ - online casino real money https://onlinecasinodd.com/ - online casino games

ср, 2018-08-15 01:02

casino slots zone online casino free online casino play casino | https://onlinecasinodd.com/ - online casino https://onlinecasinodd.com/ - casino bonus

ср, 2018-08-15 01:36

online casino gambling best online casinos slots for real money play online casino | https://onlinecasinodd.com/ - play online casino https://onlinecasinodd.com/ - casino slots

ср, 2018-08-15 02:07

online casino free online casino slots real money casino casino slots | https://onlinecasinoflow.com/ - play casino https://onlinecasinoflow.com/ - mgm online casino

ср, 2018-08-15 12:54

online gambling casino online casinos online casino sites online casino bonus | https://onlinecasinoflow.com/ - play casino https://onlinecasinoflow.com/ - real casino

ср, 2018-08-15 13:27

casino games online casino bonus casino online slots online casino slots | https://onlinecasinoflow.com/ - zone online casino https://onlinecasinoflow.com/ - online casino real money

ср, 2018-08-15 14:00

casino games best online casinos online casino borgata online casino | http://casinorealmoney888bit.com/ - gsn casino http://casinorealmoney888bit.com/ - virgin online casino

ср, 2018-08-15 15:19

online casinos for us players free online casino online casinos for us players empire city online casino | http://casinorealmoney888bit.com/ - casino online http://casinorealmoney888bit.com/ - best online casino

ср, 2018-08-15 15:55

bovada casino play online casino best online casinos parx online casino | http://casinorealmoney888bit.com/ - betfair online casino http://casinorealmoney888bit.com/ - free online casino

ср, 2018-08-15 16:34

online casinos for us players zone online casino online gambling casino play casino | http://casinorealmoney888bit.com/ - virgin online casino http://casinorealmoney888bit.com/ - best online casinos

ср, 2018-08-15 17:43

online casino sites casino online slots online casino gambling betfair online casino | http://casinorealmoney888bit.com/ - slots for real money http://casinorealmoney888bit.com/ - gsn casino

ср, 2018-08-15 18:20

play casino best online casinos bovada casino zone online casino | http://casinorealmoney888bit.com/ - casino blackjack http://casinorealmoney888bit.com/ - parx online casino

ср, 2018-08-15 18:56

casino online online casino sites foxwoods online casino online casino | http://casinorealmoney888bit.com/ - online casino slots http://casinorealmoney888bit.com/ - online casino gambling

ср, 2018-08-15 19:28

casino online slots real casino casino games online casino sites | http://onlinecasinoleo.com/ - casino blackjack http://onlinecasinoleo.com/ - empire city online casino

ср, 2018-08-15 20:02

free online casino slots casino play online casino games online casino slots | https://onlinecasinospark.com/ - casino blackjack https://onlinecasinospark.com/ - casino bonus

ср, 2018-08-15 20:07

casino play online casino sites tropicana online casino casino online slots | http://onlinecasinoleo.com/ - online casino http://onlinecasinoleo.com/ - real casino

ср, 2018-08-15 20:41

casino online play online casino online gambling casino play online casino | https://onlinecasinospark.com/ - casino play https://onlinecasinospark.com/ - casino real money

ср, 2018-08-15 21:51

casino online real casino online casinos for us players play casino | http://onlinecasinoleo.com/ - caesars online casino http://onlinecasinoleo.com/ - casino online

ср, 2018-08-15 21:54

online casinos for us players free online casino best online casino casino bonus | http://onlinecasinoleo.com/ - online casino sites http://onlinecasinoleo.com/ - real money casino

ср, 2018-08-15 22:28

online casino real money online gambling casino play casino slots | https://onlinecasinospark.com/ - online casino slots https://onlinecasinospark.com/ - casino online

ср, 2018-08-15 22:45

casino real money free online casino caesars online casino online casino gambling | https://onlinecasinoxplay.us.org/ - casino real money https://onlinecasinoxplay.us.org/ - tropicana online casino

ср, 2018-08-15 22:53

Страницы

Комментировать