Написать пост

Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных

Аватар Типичный программист

Рассказ разработчика о собственном Drupal-модуле для шеринга веб-страниц в социальные медиа.

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

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

Предыстория

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

Так выглядит обычный URL шеринга страницы в Twitter:

Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 1

А вот тот же шеринг той же страницы, но выполненный через AddToAny:

Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 2

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

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

  • переработан кастомный тип плагина, который отвечает за социальные медиа;
  • переработано поле и его составляющие — виджет и форматтер. Теперь URL шеринга динамический, и его можно менять для каждой ноды;
  • добавлен тип блока с социальными медиа;
  • добавлен extrafield со своими настройками (для каких сущностей будет использоваться и какие сервисы доступны);
  • добавлен views-field;
  • добавлена поддержка токенов для URL шеринга, что теперь позволяет шерить контент из любого филда ноды;
  • добавлено 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. Для него есть отдельная страница конфигурации, где пользователь может настроить:

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

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

Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 3
Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 4
Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 5

Entity field configuration

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

Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 6
Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 7

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

Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 8

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

Block Configuration

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

Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 9

Displaying the links (Block and entity field)

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

Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 10

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

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

Модуль social sharing для CMS Drupal. Возможности и отличия от себе подобных 11

Заключение

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

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

Следите за новыми постами
Следите за новыми постами по любимым темам
888 открытий894 показов