Social Sharing: новый модуль для шеринга в соцсети

Аватар пользователя ADCI_Solutions ADCI_Solutions 9 ноября в 8:56

Рассказывает автор модуля Александр Левицкий, backend-разработчик студии ADCI Solutions.

Большинство модулей для шеринга веб-страниц в социальные медиа, которые лежат на drupal.org — это друпальные блоки, в которых эти соцмедиа предопределённы заранее. И никакие другие добавить в эти модули нельзя, разве что хакнув их.

На одном из проектов я разработал принципиально другой модуль для этих целей. Название у него — понятнее некуда: Social Sharing.

Предыстория

В работе широко известного сервиса для шеринга веб-страниц в соцсети AddToAny есть момент, ставший принципиальным для нашего клиента.

Так выглядит обычный URL шеринга страницы в Twitter:
https://twitter.com/intent/tweet?text=Hello%20world

А вот тот же шеринг той же страницы, но выполненный через AddToAny:
https://www.addtoany.com/add_to/twitter?linkurl=https%3A%2F%2Fwww.addtoa...

Мы видим, что сначала запрос проходит через AddToAny, там обрабатывается и уже потом расшаривается в Twitter. Хотя контент, который шерится, подразумевается как публичный, клиент не хотел, чтобы трафик шёл где-то ещё. Ну, потому что.

Нужно было что-то гибкое и кастомное. MVP такого модуля я сделал для клиента, а доработанную версию, которой и является Social Sharing, выкатил на drupal.org. От модуля, который использовался на проекте осталось примерно 20%, буквально одна лишь основная идея.

Что изменилось:

  1. переработан кастомный тип плагина, который отвечает за социальные медиа;
  2. переработано поле и его составляющие — виджет и форматтер. Теперь URL шеринга динамический, и его можно менять для каждой ноды;
  3. добавлен тип блока с социальными медиа;
  4. добавлен extrafield со своими настройками (для каких сущностей будет использоваться и какие сервисы доступны);
  5. добавлен views-field;
  6. добавлена поддержка токенов для URL шеринга, что теперь позволяет шерить контент из любого филда ноды;
  7. добавлено 25 новых сервисов для шеринга: Blogger, Diaspora, Douban, Evernote, Flipboard, Getpocket, Gmail, Google Bookmarks, Hacker News, InstaPaper, LineMe, LiveJournal, Одноклассники, Pinterest, QZone, Reddit, RenRen, Skype, Telegram, Tumblr, Vk, Weibo, WhatsApp, Xing, Yahoo.

Теперь подробно и по порядку.

Почему стоит выбирать Social Sharing

  1. Он гибкий. В основе модуля лежит система плагинов Drupal, на которых вся восьмая версия CMS и построена. Это значит, что любой разработчик, не залезая в функциональность модуля, сможет добавить свою соцсеть для шеринга, если её нет в текущей версии.
  2. Он реализует стабильно работающую функциональность. Другие модули этого не делают - я ковырял те, которые находил. Был всего один, который по рисерчу кода был сделан так же, с плагинами, но он не практичный и я не смог заставить его нормально работать. Идея, видать, была похожая, но не доведённая до конца.
  3. У Social Sharing динамический URL для шеринга и поддержка токенов. Много модулей позволяют использовать шеринг не как блок на странице, а как филд в контенте. Для этого нужно добавить к любому типу контента этот филд. Наш модуль может так же, но с гораздо большими возможностями. Для каждой страницы можно индивидуально задать именно ту информацию, которую пользователь хочет расшарить: не только тайтл страницы с URL-адресом, а вообще любой контент c этой страницы.

Настройка и работа модуля Social Sharing

Теперь поговорим подробнее о конфигурации различных фич.

Extrafield configuration
Если для разных сущностей на сайте нужны одинаковые ссылки шеринга с одинаковым контентом, который будет шериться, то можно воспользоваться Extrafield. Для него есть отдельная страница конфигурации, где пользователь может настроить:

  • типы сущностей, для которых это поле будет доступно;
  • соцсети, которые будут доступны;
  • контент, который будет шериться.



Минусом данного способа является то, что эти настройки — глобальные для всех сущностей, и при необходимости поменять их для одного типа сущности (например, список соцсетей) они поменяются везде, где используются. Это поле удобно использовать, если не требуется гибкости, и список ссылок останется неизменным на всём сайте.

Entity field configuration
Ниже приведены примеры конфигурации нового типа поля. В отличии от extrafield это поле может быть настроено для каждой сущности отдельно. Можно задать общие настройки по умолчанию и при необходимости переопределить эти настройки для каждой единицы этой сущности.


Рассмотрим на примере. У нас есть тип сущности Node. У этой сущности могут быть различные бандлы (Article, Basic page, Blogpost и т. д.). Для каждого бандла мы можем добавить поле типа Social sharing и задать индивидуальные настройки по умолчанию для каждого из бандлов. Далее мы будет создавать контент на нашем сайте — добавлять ноды для этих бандлов. В каждой отдельной ноде пользователь может выбрать, оставить настройки для шеринга, заданные по умолчанию, или переопределить их для текущей ноды (см. скриншот ниже).

Ещё одной ключевой особенностью этого способа является то, что есть возможность использовать токены. С поддержкой токенов появилась возможность шерить любой контент, который может присутствовать в ноде.

Block Configuration
С блоком все так же довольно просто. Пользователь может добавить блок в любой регион на сайте, выбрать сервисы для шеринга и задать URL для шеринга, либо оставить предложенный по умолчанию.

Displaying the links (Block and entity field)
Ниже приведён пример отображения ссылок на шеринг в блоке и в качестве поля для текущей ноды. Может возникнуть резонный вопрос: «А почему же нет иконок?». За весь мой опыт работы мне не встретился ни один проект, где были бы использованы стандартные иконки с какого-то сервиса (например, Fontawesome). Всегда есть дизайн и всегда в дизайне есть эти иконки, которые добавляются фронтенд-разработчиком во время темизации. Но в планах дальнейшего развития модуля есть пункт о добавлении различных пресетов иконок.

Добавление соцсети, которой нет в модуле

Если в модуле отсутствует необходимая для вас соцсеть, то добавить ее не составит большого труда, если с навыками программирования у вас всё хорошо. Для этого нужно создать свой кастомный модуль и добавить в этом модуле новый плагин. Плагин будет автоматически интегрирован в функциональность, предоставляемую модулем, и вы сможете использовать свою соцсеть наравне с остальными. Как работают плагины, в Drupal, можно почитать тут.

Пример файла path-to-custom-modules/mymodule/src/Plugin/ShareService.php

Заключение

У каких-то известных до сих пор модулей есть только блок, у каких-то только филд, где-то есть и филд, и блок, но поменять или добавить сервисы нельзя, и почти нигде с модулем не интегрирован views и нет поддержки токенов, что ограничивает выбор контента при шеринге. Модуль Social Sharing собирает разрозненную функциональность большинства модулей и в ключевых местах значительно её улучшает, что делает его лидером среди всех остальных.

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

Комментарии

Аватар пользователя zvse zvse 9 ноября в 13:13

Действительно, зачем контрибьютить во что-то чужое, когда можно сделать своё
Ну и работает только в контексте нод Sad

Аватар пользователя zvse zvse 9 ноября в 14:09

я бегло посмотрел код и кажется, что там только токены нод подставляются
а мож и нет и я просто невнимательный

Аватар пользователя ivnish ivnish 9 ноября в 14:40
1

Спасибо! Попробую заменить яндексовый кастомный блок шеринга на этот модуль