Drupal 7. Модуль Подписки «Сделай Сам»



Вместо предисловия Функционал подписки на любой контент – один из самых популярных в веб-индустрии.

Многие сайты могут этим похвастаться.

И наш проект не стал исключением.

Дано: сайт на Друпал 7 .

Что требуется: найти или написать модуль, реализующий все необходимые функции.

Ниже вы можете прочитать, какой вариант был выбран и что из этого получилось.



Drupal 7. Модуль подписки «Сделай сам»



Поиск подходящих модулей

Самый очевидный и угадываемый вариант — модуль Подписки .

Этот модуль позволяет пользователям подписываться на изменения узлов и таксономии (включая новые комментарии к контенту).

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

Другой вариант — модуль Уведомления .

В принципе, его расширяемость и масштабируемость нас устроили (для создания своих типов подписок), но отсутствие стабильной версии для 7.х не позволило нам его использовать.

Итак, оставалось одно решение — написать модуль самостоятельно.



Начальная настройка

Полностью описывать весь модуль нет смысла (это точно выйдет за рамки статьи), поэтому опишу основной функционал и начну с основных моментов: настройки админ-панели.

Во-первых, вам нужно создать тип контента (в моем примере это Элемент ) с определенным количеством полей.

Здесь и далее основное внимание будет уделено полям Заголовок , Тело , Изображение .



Drupal 7. Модуль подписки «Сделай сам»

Во-вторых, следующий этап – создание Взгляды для отображения узлов этого типа.

Например, как на следующем рисунке:

Drupal 7. Модуль подписки «Сделай сам»

В дополнение к ранее описанным полям в этом Взгляды также отображается Нид .

Почему это необходимо? Тематизируя это поле (к которому позже будет привязано событие подписки), мы можем настроить его вывод по своему усмотрению.



Файлы модулей и их описания

Чтобы начать разработку модуля, давайте создадим сайты/все/модули папка custom_subscriptions .

Нам понадобится 4 файла: custom_subscriptions.info (основная информация о модуле), custom_subscriptions.install (настройки установки), custom_subscriptions.module (фактически сам файл модуля) и custom_subscriptions.js (скрипт реализует механизм подписки без перезагрузки страницы).

Теперь о каждом из них более подробно.



Информационный файл
Содержимое файла custom_subscriptions.info :
  
  
  
  
  
  
   

name = "Custom Subscriptions" description = "Allows users to follow content" core = 7.x version = 7.x-1.0 php = 5.1 scripts[] = custom_subscriptions.js

Как видите, сюда был включен файл сценария.



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

жидкость (идентификатор пользователя) и нид (ID узла, на который подписан пользователь).

Содержимое файла custom_subscriptions.install :

<Эphp /** * Implements hook_schema() */ function custom_subscriptions_schema() { $schema['custom_subscriptions'] = array( 'description' => t('The base table for subscriptions'), 'fields' => array( 'sid' => array( 'type' => 'serial', 'unsigned' => TRUE, 'not null' => TRUE, ), 'uid' => array( 'type' => 'int', 'length' => 10, 'not null' => TRUE, ), 'nid' => array( 'type' => 'int', 'length' => 10, 'not null' => TRUE, ), ), 'primary key' => array('sid'), ); return $schema; }

После установки таблица будет иметь следующую структуру:

Drupal 7. Модуль подписки «Сделай сам»



Настройка темы
Прежде всего, вам следует создать шаблон для вывода Нид в Взгляды .

В нашем случае это имя views-view-field--items--page--nid.tpl.php (название для шаблона можно получить в разделе Продвигать д/ Тема в настройках Вид с).

Файл шаблона помещается в тему (использовалась подтема Дзен уполномоченный СТАРТОВЫЙ НАБОР ), в папке шаблоны .

Содержимое файла views-view-field--items--page--nid.tpl.php :

<Эphp global $user; ?> <Эphp if ($user->uid != 0): ?> <Эphp $following = db_select('custom_subscriptions', 'cs') ->fields('cs') ->condition('uid', $user->uid) ->condition('nid', $output) ->execute() ->rowCount(); ?> <Эphp if ($following == 0):?> <Эphp print('<a href="follow/' .

$output .

'" class="follow">FOLLOW</a>'); ?> <Эphp else:?> <Эphp print('<a href="unfollow/' .

$output .

'" class="following">FOLLOWING</a>'); ?> <Эphp endif; ?> <Эphp endif; ?>

Как видно из представленного кода, поле «подписки» доступно только авторизованным пользователям.

Кроме того, в зависимости от наличия записи в таблице custom_subscriptions , заголовок поля изменится с СЛЕДОВАТЬ (если пользователь еще не подписался на узел) СЛЕДУЮЩИЙ (если у вас уже есть подписка).

Информация о выполняемом действии ( подписаться/отписаться ) и идентификатор узла нет d будет храниться в атрибуте href .



Разработка механизма подписки
Поскольку функциональные возможности файла модуля и скрипта взаимосвязаны, они будут рассматриваться вместе.

Начнем с визуальных эффектов: в файл скрипта добавим появление поля подписки при наведении на контент, а также изменим текст надписи с СЛЕДУЮЩИЙ на ОТПИСАТЬСЯ при наведении курсора на это поле (так же, как и в Твиттер ).

Содержимое файла custom_subscriptions.j с:

(function ($) { Drupal.behaviors.collectiveMove = { attach: function(context, settings) { // show buttons on hover $('.

view-items .

views-row').

hover(function() { $(this).

find('.

views-field-nid a').

css('display', 'block'); }); // hide buttons on mouseleave $('.

view-items .

views-row').

mouseleave(function() { $(this).

find('.

views-field-nid a.follow, .

views-field-nid a.unfollow').

css('display', 'none'); }); // show 'unfollow' when user has already had a subscription $('.

view-items .

views-row .

views-field-nid .

following').

live('mouseover', function() { $(this).

text('UNFOLLOW'); $(this).

addClass('unfollow'); }); // hide 'unfollow' when user has already had a subscription $('.

view-items .

views-row .

views-field-nid .

following').

live('mouseout', function() { $(this).

text('FOLLOWING'); $(this).

removeClass('unfollow'); }); } }; })(jQuery);

Теперь начинается самое интересное — передача данных между файлом модуля и скриптом.

Основная идея такова: когда вы нажимаете на СЛЕДОВАТЬ почта - запрос передает данные о действии ( 'следовать' ) и идентификатор узла в модуль, где полученные данные записываются в базу данных.

Для ОТПИСАТЬСЯ механизм аналогичный, но действие будет разное( 'отписаться '), и полученные данные будут удалены из таблицы базы данных.

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

Содержимое файла custom_subscriptions.module :

<Эphp /* Implements hook_menu() */ function custom_subscriptions_menu() { $items = array(); $items['custom_subscriptions_ajax'] = array( 'title' => 'Ajax callback', 'page callback' => 'custom_subscriptions_ajax', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $items; }

Напомню, что по правилам форматирования кода модуля для Drupal размещается только открывающий тег php .

Страница готова — давайте добавим функционал.

Содержимое файла custom_subscriptions.module :

<Эphp /* Implements hook_menu() */ function custom_subscriptions_menu() { .

} /** * Implements ajax callback function */ function custom_subscriptions_ajax() { global $user; if($_POST['type'] == 'follow') { if ($_POST['nid']) { db_insert('custom_subscriptions') ->fields(array( 'uid' => $user->uid, 'nid' => $_POST['nid'], )) ->execute(); print(1); } } else if($_POST['type'] == 'unfollow') { if ($_POST['nid']) { db_delete('custom_subscriptions') ->condition('uid', $user->uid) ->condition('nid', $_POST['nid']) ->execute(); print(1); } } else { print(0); } }

В зависимости от того, что получается почта - запрос на действие ( подписаться/отписаться ), добавить или удалить запись из таблицы.

Каждая запись идентифицируется жидкость (возьмем глобальный идентификатор пользователя) и нид .

В случае успеха выведите «1».

Теперь осталось самое главное – перенести данные, нажав на поле.

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

Содержимое файла custom_subscriptions.js :

(function ($) { Drupal.behaviors.collectiveMove = { attach: function(context, settings) { .

// click on follow/unfollow buttons $('.

view-items .

views-row .

views-field-nid a').

bind('click', function(e) { e.preventDefault(); var href = $(this).

attr('href'); var strs = href.split('/'); var item = $(this); $.

post( Drupal.settings.basePath + 'custom_subscriptions_ajax', { type: strs[0], nid: strs[1], }, function (data) { if (data == 1) { if (strs[0] == 'follow') { item.text('UNFOLLOW'); item.removeClass('follow'); item.addClass('following unfollow'); item.attr('href', 'unfollow/' + strs[1]); } if (strs[0] == 'unfollow') { item.text('FOLLOW'); item.removeClass('following'); item.removeClass('unfollow'); item.addClass('follow'); item.attr('href', 'follow/' + strs[1]); } } } ); }); } }; })(jQuery);

Когда вы нажимаете на ссылку в поле нид Мы проходим следующие шаги:

  • запрет действия по умолчанию (для предотвращения перезагрузки страницы);
  • получение действия и нид из атрибута href , в котором они были прописаны в шаблоне;
  • перенос полученных данных на подготовленную в модуле страницу;
  • После получения успешного результата меняем имя и некоторые атрибуты отображаемой ссылки.



Вместо послесловия

В этой статье описан процесс создания простого модуля подписки на узел в Друпал 7 .

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

Посмотреть готовый модуль можно здесь: github.com/Sacret/custom_subscriptions Теги: #drupal 7 #модули #подписки #drupal

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.