Основные настройки личного кабинета в Drupal 7. Drupal 7 личные сообщения


Джентельменский набор модулей для Drupal 7 / Хабр

Доброго всем времени суток!

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

Администрирование
Посещаемость и аналитика сайта
Общение
Регистрация пользователей
Представления и внешний вид
Ноды
Разработка
Перевод
В принципе, можно ещё с десяток перечислить, но думаю, что обзор и так большой получился.

habr.com

Основные настройки личного кабинета в Drupal 7

Настройки личного кабинета

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

Но перед началом работы с учётными записями ознакомимся с настройками, которыми мы можем оперировать, а начнём мы с «Основных настроек».

Для того что бы открыть окно с настройками нам необходимо зайти в раздел «Конфигурации», который находится на административной панели, в выплывающем списке находим подраздел «Пользователи», а в нём переходим в «Настройки учётной записи».

Окно настройки

Перед нами откроется страница с настройками. Также перейдя по ссылкам мы можем попасть на страницы «Управления полями» и «Управление отображением».

Настройки

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

Настройки

Анонимные пользователи

Первый раздел называется «Анонимные пользователи» и единственное что мы можем изменить в этом поле – это имя для анонимного посетителя. Имя, которое мы зададим, выводиться для незарегистрированных пользователей, допустим если он оставим комментарий. По умолчанию поле называется «Гость», что нам и подходит, по этому оставляем это поле без изменений и переходим дальше.

Анонимные пользователи

Роль администратора

Следующий раздел «Роль Администратора». В этом разделе есть единственная настройка. В выплывающем списке мы можем выбрать название роли, которую друпал будет расценивать как «Администратора». Роли очень обширная тема, поэтому под неё будет выделен отдельный урок.

Роль администратора

Далее идёт раздел под названием «Регистрация и Удаление».

Регистрация

Начнём с первого подпункта, который, как следует из названия, называется «Регистрация». В нём у нас на выбор есть три типа регистрации, из которых мы можем выбрать один вариант который нам больше подходит. Рассмотрим каждую немного подробней

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

Следующая модель называется «Посетитель». Она даёт возможность любому пользователю создать аккаунт на сайте и сразу получить доступ к своей учётной записи.

Третья модель называется «Регистрация разрешена, но требуется одобрение администратора». Представляет из себя дополненную модель «Посетитель». При выборе этой модели, на свою учётную запись можно будет попасть, как только администратор сайта подтвердит регистрацию, что даёт дополнительную защиту от роботов.

Модель регистрации

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

Подтверждение регистрации

Удаление

Второй подпункт называется «Удаление». В нём у нас есть выбор одного из четырёх вариантов, что произойдёт с материалом опубликованным пользователем, если он по какой либо причине удалит свою учётную запись. Также можно настроить, что привилегированные пользователи смогут сами выбирать дальнейшую судьбу своих материалов при удалении своего аккаунта с сайта.

Удаление

Персонализация

В этом разделе мы отмечаем, будет ли у пользователей подпись и аватар.

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

Персонализация, подпись

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

Персонализация аватар и его дополнительные настройки

Папка- мы задаём имя папке в которой будут находится все изображения загруженные в качестве аватарок. Саму же папку система создаст сама в системном разделе сайта.

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

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

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

Последнее поле «Пояснение к отправке изображений»- в этом поле мы можем написать подсказку к полю изображения.

Дополнительные настройки аватара

Настройки оповещения

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

Разберём шаблоны чуть более подробно.

Шаблоны с префиксом site:

Шаблоны с префиксом user:

Уведомления

Не забываем сохранять настройки, если мы внесли какие-то изменения.

Оценок: 10 (средняя 5 из 5)

vaden-pro.ru

«СМС подтверждение регистрации для Drupal 7» – Блог – SMSFox

«СМС подтверждение регистрации для Drupal 7»

Еще одним модулем пополнена наша коллекция скриптов СМС-подтверждения. Новый модуль «СМС подтверждение регистрации для Drupal 7» позволяет организовать на вашем сайте СМС регистрацию. Чтобы зарегистрироваться на вашем сайте пользователю нужно будет подтвердить свой номер мобильного телефона.Кроме регистрации по номеру телефона модуль предоставляет дополнительные опции:

«Номер телефона как имя пользователя» — номер телефона пользователя будет его логином.«Авторизация по номеру телефона» — для авторизации на вашем сайте пользователь может использовать свой логин или номер телефона, с которого он прошел регистрацию.«Восстановление пароля по СМС» — восстановить свой пароль пользователь может как по email так и по СМС.

После установки модуля регистрационная форма на вашем сайте будет состоять из одного обязательного поля — «Номер телефона»

СМС подтверждение регистрации для Drupal 7 Дальше пользователь вводит свой номер телефона в международном формате. Система проверяет его и если он корректен, высылает на указанный номер СМС с кодом подтверждения. Пример сообщения — «Ваш код: 5049780 / Your code: 5049780». Поле «Номер телефона» меняется на «Код подтверждения». СМС подтверждение регистрации для Drupal 7 Если пользователь не получил СМС-сообщение с кодом, у него есть возможность запросить повторную отправку сообщения. Для этого пользователю нужно перейти по ссылке «Не получили СМС?». Мы установили ограничение на отправку СМС с кодом не больше 3 на один и тот же номер. Также с одного IP-адреса невозможно запросить больше 3 СМС-сообщений.

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

СМС подтверждение регистрации для Drupal 7
«Номер телефона как имя пользователя»
Опция работает следующим образом — после подтверждения номера телефона система вставляет его в форме регистрации в поле «Имя пользователя» и запрещает его менять пользователю. СМС подтверждение регистрации для Drupal 7
«Авторизация по номеру телефона»
Опция работает следующим образом — в форме регистрации имя поля «Логин» заменяется на «Логин или телефон». Пользователь может авторизоваться на вашем сайте по своему логину или по номеру телефона, с которого прошел регистрацию. СМС подтверждение регистрации для Drupal 7
«Восстановление пароля по СМС»
Опция работает следующим образом — в форме восстановления пароля поле «логин или адрес почты» заменяется «логин, адрес почты или телефон». СМС подтверждение регистрации для Drupal 7 Дальше пользователь вводит свой номер телефона, с которого регистрировался на сайте. Система проверяет введенный номер и если он в правильном формате, а также зарегистрирован в системе, новый пароль высылается по СМС на указанный номер. Поле «логин, адрес почты или телефон» заменяется на «Пароль в СМС». СМС подтверждение регистрации для Drupal 7 Если пользователь не получил СМС-сообщение с новым паролем, у него есть возможность запросить повторную отправку сообщения. Запрос нового СМС может быть не раньше, чем через 5 минут после последней отправки сообщения на указанный номер.

Дальше пользователь вводит свой новый пароль, который получил в СМС-сообщении. Система проверяет введенный пароль и если он верный то перенаправляет пользователя на форму авторизации. После подтверждения пароля пользователь уже может использовать его для авторизации на вашем сайте.

СМС подтверждение регистрации для Drupal 7

Установка

Установка данного модуля такая же как и установка стандартных модулей для Drupal и займет не больше 5 минут.

1) Скачайте модуль «Подтверждение регистрации через СМС для Drupal 7».

2) Распакуйте архив «smsfox_drupal7_register.zip». Загрузите папку «smsfox» в директорию с модулями «/sites/all/modules/» на вашем сайте. В архиве также есть файл с русификацией модуля «smsfox_register.ru.po», загрузите его модулем Translation в вашем Drupal.

3) Зайдите в админ-панель вашего сайта в раздел «Модули(Modules)». Отметьте в списке модуль «SMSFox - Registration» и сохраните изменения кнопкой «Сохранить конфигурацию(Save configuration)».

СМС подтверждение регистрации для Drupal 7Модуль установлен!

Настройка

Зайдите в админ-панель вашего сайта «Конфигурация(Configuration) -> СМС подтверждение(SMS confirmation) -> Настройки(Settings)». СМС подтверждение регистрации для Drupal 7 СМС подтверждение регистрации для Drupal 7 Настройте модуль: Сохраните настройки кнопкой «Сохранить конфигурацию(Save configuration)».

Модуль настроен!

Все ошибки при отправке СМС вы можете увидеть в админ-панели вашего сайта «Конфигурация(Configuration) -> СМС подтверждение(SMS confirmation) -> Логи(Logs)».

СМС подтверждение регистрации для Drupal 7 Чтобы удалить модуль перейдите в раздел «Модули(Modules)», снимите галку напротив модуля «SMSFox - Registration» и сохраните изменения. Внимание, после удаления модуля через раздел «Модули(Modules) -> Удаление(Uninstall)» удаляется и таблица в базе данных со всеми номерами телефонов зарегистрированных пользователей через данный модуль.

Если нужна индивидуальная установка/настройка модуля — пишите нам на E-mail [email protected].

Модуль протестирован на версиях Drupal 7.x.

Скачать модуль «СМС подтверждение регистрации для Drupal 7»

Для версии Drupal 6.x см. модуль СМС подтверждение регистрации для Drupal 6.
    Комментарии:

Melloun:

Установил ваш модуль, но в Конфигурации SMS confirmation не появилось, как и нет слов настройка или права напротив имени модуля(в списках модулей соответственно). В журнале значиться запись об успешной установке модуля. Ошибок ни каких не выдает. Что делать?

Melloun:

Удалял и переустанавливал несколько раз, не помогло. меню "СМС подтверждение(SMS confirmation)" в разделе "Пользователи(People)" в конфигурации НЕТ

Melloun:

Прежде чем я продолжу. хочу сказать. СПАСИБО БОЛЬШОЕ ЗА КАЧЕСТВЕННУЮ ДОКУМЕНТАЦИЮ. Проблема решена. Решение: Добавить в вашу документацию, что ВАШ модуль работает только с пользователем "Admin" c id этого пользователя "номер 1(первый)". Я так понимаю что ваши разработчики считают, что на сайте может быть только один пользователь с правами админа.

Вывод: меню "СМС подтверждение(SMS confirmation)" в разделе "Пользователи(People)" в конфигурации появляется только если у пользователя имя "Admin" и id ="1". (то есть тот что был зарегестрирован при установке drupala).

Melloun:

Далее укажите пожалуйста, что если в настройках модуля меняешь подпись со стандартной SMSFox на свою, то это же надо сделать и у вас на сайте. Иначе при отправке будет выдавать 6 ошибку.

zaharovrd:

Не работает.Чистый друпал http://youradman.comпосмотрите пожалуйста

goldsheva:

Имя отправителя в настройках модуля должно содержать только латинские буквы, цифры,пробел и символы: -.&Максимальная длина - 11 символов или 15 цифр. Также, если у вас не включено динамическое имя отправителя, вам нужно предварительно его добавить http://smsfox.ru/ru/sign/

Alexandro:

Попробовал этот модуль у себя на сайте. Все работает.

mamba:

Работает, но как поменять номер телефона пользователю? Нет такого в профиле.

Alexandro:

Интересно, а будут ли модули для биллинга. Например СМС-замок и прочие.

Alexandro:

Поменять номер телефона в одностороннем порядке у пользователя не получится. Но есть 2 пути:-повторная регистрация, правда с другим ником;-по договоренности с владельцем сайта ликвидируется регистрация пользователя и очищается кеш. Затем пользователь вновь регистрируется с тем же ником, но с другим номером телефона.По другому никак.

moonfan:

А нельзя ли номер телефона пользователя править хотя бы напрямую в базе данных, через PHPMyAdmin?

174:

Не работает на D7, в логах пишет: /Номер телефона: 7********** SMSFox API: Ошибка подключения к SMSFox API Ваш код: 7737781 / Your code: 7737781/ Писал на [email protected], тишина, молчок. Закрадываются сомнения в реальности этого сервиса((((

174:

P.S. При ведение номера телефона, выдает: /СМС не отправлено. Повторите через 5 минут./

goldsheva:

Исправлено. Если ошибка все еще проявляется, скачайте и переустановите модуль.

174:

Спасибо! Да, все работает. Имя отправителя как изменить? На почту писать? Я так понимаю, это имя будет прописано в SMS, от кого?

sfulybin:

Установил модуль в Drupal 7, на сайте все работает, появляется форма для ввода кода подтверждение, в личном кабинете показывает, что СМС отправлено, но на телефон не приходит.Если отправлять на тот же номер из личного кабинета, работает все нормально.В чем дело?

goldsheva:

Имя отправителя нужно сначала добавить в аккаунте на smsfox.ru (раздел подписи), а затем в настройках модуля.

datse:

Установил модуль и все работало. Потом перестало. Статус - Доставлено, но к абоненту письмо не дошло. Что делать?

godson:

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

mamba:

Здравствуйте!Будет ли этот модуль на drupal 8? Очень не хватает уже на 1 проект. Сейчас активно начнут делать новые сайта на 8 версии.

Avtorinok23:

А можно сделать так что бы пользователь выбирал сам как ему регистрироваться ? Через телефон или электронную почту ?И как поменять надпись smsfox. Она пишется в смс от кого: smsFox. Просто человек который регистрируется на сайте его это введет в сомнение. А если бы была надпись сайта на котором он регистрируется то было бы круто.

Я думаю если вы исключите эти не достатки то модуль хороший будет. А с тем что сейчас этот вариант не куда не пойдет не в какие рамки.

Avtorinok23:

Поменять надпись smsfox нашел все круто.Но вот как дать пользователю право выбора регистрации только по номеру или только по электронной почте.И еще заметил номер храниться только в базе и его поменять не как пользователю ?

izhig:

Я так поняла, что без пополнения баланса на этом сайте модуль работать не будет... А как пополнять баланс - ?

Alon:

Здравствуйте, обращаюсь к разработчикам. Можете сделать мне такую регистрацию на другом движке?Оплату гарантирую. Пишите в скайп i-alon (Москва) или в телеграмм i_alon

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

www.smsfox.ru

Создание социальной сети на Drupal / DruIT.ru

Рассмотрим из каких модулей и с помощью каких приемов мы можем сделать социальную сеть на друпале. Некоторые вещи потребуют создания своего модуля, поэтому сразу скачайте заготовку mymodule.zip куда будете писать код.

Содержание статьи

Список используемых модулей

Профиль

Самый лучший модуль для профиля по моему мнению это - Content Profile.Вместе с дополнительными модулями для CCK вы сможете создать профиль любого вида.

Cоздание профиля

После установки Content Profile появится новый тип нод profile, его и будем использовать.В настройках типа: оставляем пустым поле Body field label, чтобы скрыть стандартное поле body; ставим галочку Use this content type as a content profile for users. Не забудьте установить права доступа к create profile content и edit own profile content для зарегистрированных пользователей.Теперь добавим поля:

После создания полей, добавьте 4 группы:

Примерно то, что должно получиться:Неиспользуемое поле title мы скрываем и при сохранении будем менять значение на имя пользователя используя код в модуле:

function mymodule_form_alter(&$form, $form_state, $form_id) {   if ('profile_node_form' == $form_id) {     $form['title']['#type'] = 'value';     $form['title']['#required'] = FALSE;   }}

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {  if ($node->type == 'profile' && $op == 'presave') {    $node->title = $node->name;  }}

Темизация профиля

Темизировать будем в 2 этапа:

  1. Перекрытие стандартного шаблона пользователя.В mymodule.module пишем код:

    // перекрываем callback функциюfunction mymodule_menu_alter(&$items) {  $items['user/%user_uid_optional']['page callback'] = 'mymodule_user_view';}// в отличии от стандартной, здесь нет загрузки стандартного профиляfunction mymodule_user_view($account) {  drupal_set_title(check_plain($account->name));  return theme('user_profile', $account);}// убераем стандартные preprocess функции профиляfunction mymodule_theme_registry_alter(&$theme_registry) {  $theme_registry['user_profile']['preprocess functions'] = array('mymodule_preprocess_user_profile');}

    Первые 2 функции влияют на работоспособность других модулей, если вы не уверены в их целесообразности можете их удалить.
  2. Теперь займемся темизацией. В mymodule.module добавляем preproсess функцию:function mymodule_preprocess_user_profile(&$variables) {   global $user;

      $account = $variables['account'];  // загружаем профиль пользователя из content_profile  $profile = content_profile_load('profile', $account->uid);  $profile = node_build_content($profile);  $variables['profile'] = $profile;  // создаем переменные для простых полей  $variables['profile_name'] = $profile->field_profile_name[0]['safe'];  $variables['profile_surname'] = $profile->field_profile_surname[0]['safe'];  $variables['profile_sex'] = $profile->field_profile_sex[0]['safe'];  // день рождения  if ($profile->field_profile_birthday[0]['value']) {    $date = date_convert($profile->field_profile_birthday[0]['value'], 'datetime', 'datestamp');    $variables['profile_birthday'] = format_date($date, 'custom', 'j F Y');  }

      $variables['profile_phone'] = $profile->field_profile_phone[0]['safe'];  // ссылка на сайт  if ($profile->field_profile_site[0]['url']) {    $variables['profile_site'] = l($profile->field_profile_site[0]['display_title'], $profile->field_profile_site[0]['display_url'], array('attributes' => $profile->field_profile_site[0]['attributes']));  }

      $variables['profile_about'] = $profile->field_profile_about[0]['safe'];  $variables['profile_interests'] = $profile->field_profile_interests[0]['safe'];  // местоположение  if ($profile->field_profile_location[0]['value']) {    $parents = taxonomy_get_parents_all($profile->field_profile_location[0]['value']);    foreach (array_reverse($parents) as $parent) {      $location[] = l($parent->name, taxonomy_term_path($parent));    }    if (!empty($location)) $loc = implode(', ', $location);    $variables['profile_location'] = $loc;  }  // переменная для отображаемого имени пользователя  if ($variables['profile_name'] && $variables['profile_surname']) {    $variables['display_name'] = $variables['profile_name'] .' '. $variables['profile_surname'];  }  elseif ($variables['profile_name']) {    $variables['display_name'] = $variables['profile_name'];  }  else {    $variables['display_name'] = $account->name;  }  // меняем заголовок страницы  drupal_set_title($variables['display_name']);

      if ($profile->field_profile_photo[0]['filepath']) {    $variables['profile_photo'] = theme('image', $profile->field_profile_photo[0]['filepath']);  }  else {    // если пользователь не загрузил фотографию, покажем стандартную    $variables['profile_photo'] = theme('image', 'sites/default/files/profile_photos/default.png');  }  // переменная для региона профиля  $variables['profile_region'] = theme('blocks', 'profile_region');

      $user_actions = array();

      if ($user->uid == $account->uid) {    // Редактировать страницу    $user_actions[] = l('Редактировать страницу', "user/$account->uid/profile/profile", array('query' => drupal_get_destination()));        // Редактировать страницу    if ($profile->field_profile_photo[0]['filepath']) {      $user_actions[] = l('Изменить фотографию', "user/$account->uid/profile/profile", array('query' => drupal_get_destination(), 'fragment' => 'tabset-tab-5'));    }    else {      $user_actions[] = l('Загрузить фотографию', "user/$account->uid/profile/profile", array('query' => drupal_get_destination(), 'fragment' => 'tabset-tab-5'));    }  }   //в этот массив позже добавим ссылки: Отправить сообщение, добавить в друзья и тд.  if (!empty($user_actions)) {    $variables['user_actions'] = theme('item_list', $user_actions);  }}

    Скопируйте в папку sites/default/files/profile_photos картинку default.png для показа на месте фотографии если пользователь её не загрузил.В профиле мы будем выводить регион под фотографией для блоков, таких как: друзья, видео, фото, заметки.В prepocess функцию мы уже добавили соответствующий код, теперь в файле темы *.info нужно добавить регион. Так как я использую garland мне пришлось вдобавок прописать там и стандартные регионы:

    regions[profile_region] = Profile Regionregions[left] = Left sidebarregions[right] = Right sidebarregions[content] = Contentregions[header] = Headerregions[footer] = Footer

    Создайте файл user-profile.tpl.php в папке с вашей темой и поместите туда код:   <?php print $profile_photo; ?><?php print $user_actions; ?><?php print $profile_region; ?>       <?php if ($profile_sex || $profile_birthday || $profile_location): ?>           <?php print $variables['display_name']; ?><?php if (node_access('update', $profile)) print l('Редактировать', "user/$account->uid/profile/profile", array('fragment' => 'tabset-tab-2')); ?>                         <?php if ($profile_sex): ?>Пол<?php print $profile_sex; ?><?php endif; ?>           <?php if ($profile_birthday): ?>День рождения<?php print $profile_birthday; ?><?php endif; ?>           <?php if ($profile_location): ?>Местоположение<?php print $profile_location; ?><?php endif; ?>                       <?php endif; ?>

        <?php if ($profile_phone || $profile_site): ?>    <div>      <div>Контактные данные<?php if (node_access('update', $profile)) print l('Редактировать', "user/$account->uid/profile/profile", array('fragment' => 'tabset-tab-4')); ?></div>      <div>        <table>          <?php if ($profile_phone): ?><tr><td>Телефон</td><td><?php print $profile_phone; ?></td></tr><?php endif; ?>          <?php if ($profile_site): ?><td>Сайт</td><td><?php print $profile_site; ?></td></tr><?php endif; ?>        </table>      </div>    </div>    <?php endif; ?>

        <?php if ($profile_about || $profile_interests): ?>    <div>      <div>Личная информация<?php if (node_access('update', $profile)) print l('Редактировать', "user/$account->uid/profile/profile", array('fragment' => 'tabset-tab-3')); ?></div>      <div>        <table>          <?php if ($profile_interests): ?><tr><td>Интересы</td><td><?php print $profile_interests; ?></td></tr><?php endif; ?>          <?php if ($profile_about): ?><td>О себе</td><td><?php print $profile_about; ?></td></tr><?php endif; ?>        </table>      </div>    </div>    <?php endif; ?>  </div></div>

    Добавим немного css в нашу тему:

    .profile-group-label {  font-weight:bold;  font-size:14px;  font-family: Arial;}.profile-group-label a {  font-size:12px;  float:right;  font-size: 10px;}.profile-group .field-label {  width:200px;  color:#777777;}.profile-left {  float:left;  width:200px;}.profile-right {  margin-left:220px;  overflow: hidden;}

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

Замена логина пользователя на Имя Фамилия

Для этого понадобиться модуль Realname. Установите его. Затем на странице admin/user/realname/module выбирете Content Profile.После на старнице admin/user/realname/fields выделите поля Имя и Фамилия, Name Pattern: %1 %2. Желательно сделать поле Фамилия обязательным для заполнение, чтобы не было конфликтов.

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

  1. Добавте такой код в mymodule.module:/** * Implementation of hook_menu(). */function mymodule_menu() {   $items = array();

      $items['mymodule_frontpage'] = array(    'page callback' => 'mymodule_page',    'access callback' => TRUE,    'type' => MENU_CALLBACK,  );

      return $items;}

    function mymodule_page() {  global $user;  module_load_include('inc', 'user', 'user.pages');

      if ($user && user_access('user_view_access')) {    drupal_set_title(user_page_title($user));    return user_view($user);  }  else {    //Если хотите сделать как вконтакте, то пишите ниже return 'тектст приветствия.';    //Затем поместите блок логина в левый регион и сделайте её видимой только анонимам.    return drupal_get_form('user_login');  }}// эта функция нужна для замены ссылок на главную страницуfunction custom_url_rewrite_outbound(&$path, &$options, $original_path) {  global $user;

      if ($user) {    if ($path == '' || $path == 'mymodule_frontpage') {      $path = 'user/' . $user->uid;    }  }}// редирект пользователя с ноды профиля на сам профиль пользователяfunction mymodule_init() {  if ($node = menu_get_object()) {    if ($node->type == 'profile') {      drupal_goto('user/'. $node->uid);    }  }}

  2. В настройках admin/settings/site-information за главную страницу установить mymodule_frontpage.

Друзья

User Relationships - модуль хорошо интегрирован с views и позволит создавать различные списки друзей.Включим модули UR-API, UR-UI, UR-Views. Установим права доступа для зарегистрированных пользователей: can have relationships, maintain own relationships.На странице admin/user/relationships/add создадим тип отношений для друзей Name: Friend.На странице admin/user/relationships/settings уберем галочку Allow multiple relationshipsДрузей мы будем показывать в списках с маленькими аватарами, поэтому создадим 2 imagecache правила:

После настройки модуля создадим представление для списков друзей.

Настройка views

  1. Создаем новое представление View name: friends, View type: User relationship.
  2. Добавляем отображение типа page.
    • Basic settings:
      • Name: Друзья
      • Title: Друзья
      • Use pager: Yes
      • Items to display: 25
    • Page settings:
    • Relationships:
      • Добавляем отношение User relationships: Requestee user
      • Добавляем отношение User relationships: Requester user
      • Добавляем отношение Node: Content Profile и настраиваем его:
        • Relationship: requestee
        • Content type: profile
    • Arguments:
      • Добавляем аргумент User relationships: Requester user и настраиваем его:
        • Validator options:
          • Validator: User
          • Type of user argument to allow:: Only allow numeric UIDs
        • Action to take if argument is not present: Provide default argument
          • Default argument type: User ID from logged in user
    • Filters:
      • Добавляем фильтр User: Active и настраиваем его:
        • Relationship: requestee
        • Active: Yes
      • Добавляем фильтр User relationships: Relationship status и настраиваем его:
      • Добавляем фильтр User relationships: Relationship type и настраиваем его:
        • Relationship types: Friend
    • Fields:
      • Добавляем поле Content: Фотография (field_profile_photo) и настраиваем его:
        • Relationship: Content Profile
        • Label: None
        • Format: photo-100x100 image
      • Добавляем поле Content: Имя (field_profile_name) и настраиваем его:
        • Relationship: Content Profile
        • HTML element: - None -
        • Wrapper HTML element: - None -
        • Label: None
        • Format: Default
      • Добавляем поле Content: Фамилия (field_profile_surname) и настраиваем его:
        • Relationship: Content Profile
        • HTML element: - None -
        • Wrapper HTML element: - None -
        • Label: None
        • Format: Default
      • Добавляем поле User: Name и настраиваем его:
        • Relationship: requestee
        • Label: пустое поле
  3. Добавляем отображение типа page.
    • Basic settings:
    • Page settings:
      • Path: friends/list
      • Menu:
        • Type: Default menu tab
        • Title: Все друзья
        • Weight: 1
        • Parent menu item: Already exists
  4. Добавляем отображение типа block.
    • Basic settings:
      • Name: Друзья (блок)
      • Style:Жмем кнопку Override,
        • Style: Grid
        • Number of columns: 3
      • Use pager:Жмем кнопку Override, No
      • Items to display: 6
    • Arguments:
      • Изменяем аргумент User relationships: Requester user:Жмем кнопку Override
        • Action to take if argument is not present: Provide default argument
          • Default argument type: User ID from URL
    • Fields:
      • Изменим поле Content: Фотография (field_profile_photo):Жмем кнопку Override,
        • Format: photo-50x50 image
    • Sort criteria:Жмем кнопку Override,
      • Добавляем сортировку Global: Random
  5. Добавляем отображение типа page.
    • Basic settings:
      • Name: Друзья онлайн
    • Page settings:
      • Path: friends/online
      • Menu:
        • Type: Menu tab
        • Title: Друзья онлайн
        • Weight: 2
        • Parent menu item: Already exists
    • Filters:Жмем кнопку Override,
      • Добавляем еще один фильтр User: Last access и настраиваем его:
        • Relationship: Content Profile
        • Operator: Is greater than or equal to
        • Value type: An offset from the current time such as....
  6. Добавляем отображение типа block.
    • Basic settings:
      • Name: Друзья онлайн (блок)
      • Title:Жмем кнопку Override, Друзья онлайн
      • Style:Жмем кнопку Override,
        • Style: Grid
        • Number of columns: 3
      • Use pager:Жмем кнопку Override, No
      • Items to display: 6
    • Arguments:
      • Изменяем аргумент User relationships: Requester user:Жмем кнопку Override
        • Action to take if argument is not present: Provide default argument
          • Default argument type: User ID from URL
    • Fields:
      • Изменим поле Content: Фотография (field_profile_photo):Жмем кнопку Override,
        • Format: photo-50x50 image
    • Sort criteria:Жмем кнопку Override,
      • Добавляем сортировку Global: Random
  7. Добавляем отображение типа page.
    • Basic settings:
    • Page settings:
      • Path: friends/request
      • Menu:
        • Type: Menu tab
        • Title: Заявки
        • Weight: 3
        • Parent menu item: Already exists
    • Relationships:Жмем кнопку Override,
      • Изменяем отношение Node: Content Profile:
    • Arguments:Жмем кнопку Override,
      • Удаляем аргумент User relationships: Requester user
      • Добавляем аргумент User relationships: Requestee user и настраиваем его:
        • Validator options:
          • Validator: User
          • Type of user argument to allow:: Only allow numeric UIDs
        • Action to take if argument is not present: Provide default argument
          • Default argument type: User ID from logged in user
    • Filters:Жмем кнопку Override,
      • Изменяем фильтр User: Active:
      • Изменяем фильтр User relationships: Relationship status:
    • Fields:Жмем кнопку Override,
      • Изменяем поле User: Name:

Темизация views

Темизировать мы надо 2 шаблона, где будем выводить поля "руками".

Теперь сделаем заголовок блока в виде ссылки на соответствующую страницу, для этого создадим два шаблона в папке темы: block-views-friends-block_1.tpl.php и block-views-friends-block_2.tpl.php. Код у них идентичный, кроме url, во втором блоке пишите friends/online.

<?php print $block->module .'-'. $block->delta; ?>">

<?php if (!empty($block->subject)): ?>  <h3>    <?php    global $user;    if ((arg(0) == 'user' && is_numeric(arg(1))) && $user->uid != arg(1)) {      $uid = arg(1);      print l($block->subject, 'friends/'. $uid);    }    else {      print l($block->subject, 'friends');    }    ?>  </h3><?php endif;?>

  <div><?php print $block->content ?></div></div>

CSS в тему:

#block-views-friends-block_1 h3.title,#block-views-friends-block_2 h3.title {  font-family: Arial;  font-size: 14px;  font-weight: bold;}#block-views-friends-block_1 h3.title a,#block-views-friends-block_2 h3.title a {  color:#494949;}#block-views-friends-block_1 table,#block-views-friends-block_2 table {  margin:0;}

Должно получиться нечто вроде этого.

Вывод ссылок на действия добавить в друзья на странице пользователя

Добавим ссылки Добавить в друзья и Удалить из друзей. В функцию mymodule_preprocess_user_profile добавим код, сразу после $user_actions = array();. Не забудьте в коде $ur_id = 1; изменить на id своего relationship.

  $ur_id = 1; // id relationship    // ссылки на добавление/удаление друзей  if (module_exists('user_relationships_api')) {    if (!user_access('can have relationships') || $user->uid != $account->uid) {      $existing_relationships = user_relationships_load(array('between' => array($user->uid, $account->uid)), array('sort' => 'rtid'));      if (!isset($existing_relationships[$ur_id])) {        $user_actions[] = l('Добавить в друзья', "relationship/{$account->uid}/request/$ur_id", array('query' => drupal_get_destination(), 'html'  => TRUE, 'attributes' => array('class' => 'user_relationships_popup_link')));      }      elseif ($existing_relationships[$ur_id][0]->approved) {        $user_actions[] = l('Удалить из друзей', "user/{$account->uid}/relationships/{$existing_relationships[$ur_id][0]->rid}/remove", array('query' => drupal_get_destination(), 'attributes' => array('class' => 'user_relationships_popup_link')));      }    }  }

Личные сообщения

Privatemsg - модуль для личный сообщений. Установите 6.x-2.x-dev версию и включите права доступа для зарегистрированных пользователей read privatemsg, write privatemsg и delete privatemsg.Модуль практически не нуждается в особых настройках, поэтому сразу приступим к темизации.

Темизация Privatemsg

Сначала удалим с помощью хука список участников беседы:

function mymodule_privatemsg_view_messages_alter(&$content) {  unset($content['participants']);}

В свою тему в template.php:

function ИМЯТЕМЫ_privatemsg_list_field__last_updated($thread) {  $field = array();  $field['data'] = format_date($thread['last_updated'], 'custom', 'j F Y в H:i');  $field['class'] = 'privatemsg-list-date';  return $field;}

Здесь немного поправили формат даты в колонке на странице messages. Теперь будем темизировать сами сообщения, для этого в mymodule.module создадим функцию mymodule_preprocess_privatemsg_view:function mymodule_preprocess_privatemsg_view(&$vars) {   $message = $vars['message'];   // загружаем профиль   $profile = content_profile_load('profile', $message['author']->uid);

  // выводим фото пользователя  if ($profile->field_profile_photo[0]['fid']) {    $photo = theme('imagecache', 'photo-50x50', $profile->field_profile_photo[0]['filepath']);  }  else {    $photo = theme('imagecache', 'photo-50x50', 'sites/default/files/profile_photos/default.png');  }  // добавляем для неё переменную в шаблон privatemsg-view.tpl.php  $vars['author_picture'] = l($photo, 'user/'. $message['author']->uid, array('html' => TRUE));}

Также добавим шаблон privatemsg-view.tpl.php в папку с темой.

<?php  //each file loads it's own styles because we cant predict which file will be loaded  drupal_add_css(drupal_get_path('module', 'privatemsg').'/styles/privatemsg-view.css');?><div>  <div>    <div>      <?php print $author_picture; ?>    </div>  </div>  <div>    <div>      <?php print $author_name_link; ?>    </div>    <div>      <?php print format_date($message['timestamp'], 'custom', 'j M Y в H:i'); ?>    </div>  </div>  <div>    <div>      <?php print $message_body; ?>    </div>    <?php if ( isset($message_actions) ) : ?>      <div>        <?php print $message_actions; ?>      </div>    <?php endif ?>  </div>  <div></div></div>

и CSS в тему:

.privatemsg-view-pager {    margin: 20px 0 20px 200px;}.privatemsg-box-fb {    text-align: left;}.privatemsg-box-fb .avatar-fb {    margin: 5px;    text-align: center;}.privatemsg-box-fb .picture {    float: none;    padding: 0;}.left-column {  width:auto;  float: left;}.middle-column {    float: left;    text-align:left;    width: 150px;}.right-column {  margin:0 0 0 210px;}.bottom-border {  border-bottom:1px solid #E9EFF3;  margin:10px 0;}.message-actions ul {  padding:0;  font-size:11px;}.date {  font-size:10px;  margin:0;  color: #777777;}.name {  font-size:12px;  font-weight:bold;  margin:5px 0 0;}.message-body {  font-size:14px;}

Темизированная страница сообщений:

Вывод ссылки "Отправить сообщение" на странице пользователя

Добавим в профиль ссылку "Отправить сообщение", для этого в функцию mymodule_preprocess_user_profile добавим код, сразу после $user_actions = array();.

// выводим ссылку для отправки сообщений  if (module_exists('privatemsg')) {    if ($user->uid != $account->uid) {      if ($url = privatemsg_get_link(array($account))) {        $user_actions[] = l('Отправить сообщение', $url, array('query' => drupal_get_destination()));      }    }  }

Следующие 2 раздела описывать подробно описывать не буду, там всё достаточно понятно.

Рейтинги

Уведомления

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

Меню пользователя

В меню добавим ссылки:

Нужно определить в модуле блок, копируем код:

function mymodule_block($op = 'list', $delta = 0, $edit = array()) {   if ('list' == $op) {     $blocks['user-menu'] = array(       'info' => t('User menu'),       'cache' => BLOCK_NO_CACHE,     );

    return $blocks;  }  elseif ('view' == $op) {    $block = array();    switch ($delta) {      case 'user-menu':        $block = mymodule_block_user_menu();        break;    }    return $block;  }}

function mymodule_block_user_menu() {  global $user;  $links = array();

  $links[] = l('Моя Страница', 'user/'. $user->uid) . l('ред.', 'user/'. $user->uid .'/profile/profile', array('attributes' => array('class' => 'user-edit-link')));  // Мои друзья  if (module_exists('user_relationships_api')) {    if (user_access('can have relationships') && user_access('maintain own relationships')) {      $ur_id = 1; // id relationship

      $title = 'Мои Друзья';      $count = db_result(db_query("SELECT COUNT(rid) FROM {user_relationships} WHERE requestee_id = %d AND approved = 0 AND rtid = %d", $user->uid, $ur_id));      if ($count) {       $title .= " (<b>$count</b>)";       $links[] = l($title, 'friends/request', array('html' => TRUE));      }      else {        $links[] = l($title, 'friends');      }    }  }  // Мои сообщения  if (module_exists('privatemsg')) {    if (privatemsg_user_access('read privatemsg') || privatemsg_user_access('read all private messages') ) {      $title = 'Мои Сообщения';      if ($count = privatemsg_unread_count()) {       $title .= " (<b>$count</b>)";      }      $links[] = l($title, privatemsg_get_dynamic_url_prefix($user->uid), array('html' => TRUE));    }  }

  $links[] = l('Настройки аккаунта', 'user/'. $user->uid .'/edit');

  if (!empty($links)) {    $block['content'] = theme('item_list', $links);  }

  return $block;}

Добавим css в тему:

a.user-edit-link {  color:#777777;  float:right;}

Поместите блок в левый регион и в его настройках сделайте видимым только для зарегистрированных пользователей.

Стена

Стену сделаем из комментариев к ноде профиля пользователя. Для того чтобы добавить комментарии на страницу с профилем добавим в функцию mymodule_preprocess_user_profile код:

if (function_exists('comment_bonus_api_comment_render')) {  $variables['wall'] = comment_bonus_api_comment_render($profile);}elseif (function_exists('comment_render')) {  $variables['wall'] = comment_render($profile);}

и в шаблоне user-profile.tpl.php выведем эту переменную:

<div><h4>Стена</h4><?php print $wall; ?></div>

Настройка комментариев

В настройках типа profile:

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

Настройка AJAX Comments

Далее установите dev версии модулей AJAX Comments и Comments bonus API.На странице admin/settings/ajax_comments Form always expanded: поставить галочку, Default row count: 3, Content types: Profile.

Темизация вывода

Для начала скроем фразу "Сomments", для этого скопируйте файл comment-wrapper.tpl.php из папки модуля Comments bonus API в папку с вашей темой и удалите строку:

<?php if ($node->type != 'forum'): ?>  <h3><?php print t('Comments'); ?></h3><?php endif; ?>

Следующим шагом темизируем вывод комментариев, для этого в mymodule.module добавим:function mymodule_preprocess_comment(&$vars) {   if (isset($vars['node'])) {     $vars['template_files'][] = 'comment-'. $vars['node']->type;   }

  if ($vars['node']->type == 'profile') {    $comment = $vars['comment'];    $profile = content_profile_load('profile', $comment->uid);

    // выводим фото пользователя    if ($profile->field_profile_photo[0]['fid']) {      $photo = theme('imagecache', 'photo-50x50', $profile->field_profile_photo[0]['filepath']);    }    else {      $photo = theme('imagecache', 'photo-50x50', 'sites/default/files/profile_photos/default.png');    }    // добавляем для неё переменную в шаблон privatemsg-view.tpl.php    $vars['author_picture'] = l($photo, 'user/'. $comment->uid, array('html' => TRUE));  }}

Теперь мы можем добавить шаблон комментария только для типа profile, в папке с темой comment-profile.tpl.php:

<div>  <div>    <div><?php print $author_picture ?></div>  </div>  <div>    <div><?php print $author ?></div>    <div>      <?php print $content ?>    </div>    <div>      <div><?php print format_date($comment->timestamp, 'custom', 'j M Y в H:i') ?></div>      <?php if ($links): ?>        <div><?php print $links ?></div>      <?php endif; ?>    </div>    <div></div>  </div></div>

CSS в тему:

.wall h4 {  font-family: Arial;  font-size: 14px;  font-weight: bold;}.wall #comments,.wall #comments .comment {  margin:0;  padding:0;  border:none;}.wall #comments {  border-top: 1px solid #CCCCCC;}.wall #comments .comment {  padding:10px 0;  border-bottom: 1px solid #CCCCCC;}.wall .comment-left {  float:left;}.wall .comment-right {  margin-left:60px;}.wall .meta .date,.wall .meta div.links {  float:left;  font-size: 10px;}.wall .meta .date {  margin-right:10px;}.wall .user {  font-weight:bold;  font-size:11px;}.wall .box h3,.wall h3.title {  display:none;}

Удалим лишнее на форме. В mymodule_form_alter:

if ($form_id == 'comment_form') {  $form['comment_filter']['comment']['#title'] = '';  $form['comment_filter']['comment']['#rows'] = 3;  unset($form['_author'], $form['preview']);}

В следующей части рассмотрим контент в социальных сетях.

druit.ru

Drupal 7 — Модуль подписки на новые материалы по email / Хабр

ПредисловиеЯ знаю о существовании модулей SimpleNews, Notifications и т.д. Есть даже инструкции как это можно сделать с помощью существующих модулей. Мне кажется, слишком очень много нужно сделать, чтобы на сайте заработала простейшая рассылка по email. Решил немного исправить эту ситуацию. Модуль не претендует на оригинальность и гениальность. Хотелось сделать модуль простой в настройке и использовании.
Модуль Email Subscribe
Страница с настройками модуля:
Здесь можно настроить следующие параметры:
Страница со списком подписанных пользователей:
Алгоритм работы модуля
Есть таблица:CREATE TABLE IF NOT EXISTS `email_subscribe_readed_nodes` ( `rn_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Field ID', `rn_nid` int(10) unsigned DEFAULT NULL COMMENT 'Node ID', `rn_sid` int(10) unsigned DEFAULT NULL COMMENT 'Subscribe user id', `rn_status` smallint(6) NOT NULL DEFAULT '0' COMMENT '0-email don’t send, 1-email has been sented.', `datechange` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Date of change', PRIMARY KEY (`rn_id`), KEY `rn_nid` (`rn_nid`), KEY `rn_sid` (`rn_sid`), KEY `rn_status` (`rn_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Интерфейс пользователя
Есть блок и страница с формой подписки. Ссылку в меню можно отключить потому, что, мне кажется, блок удобней. Блок по умолчанию отключен. Пользователь вводит адрес электронной почты и дальше есть несколько сценариев: Во всех случаях пользователю отправляется письмо с ссылкой на подтверждение выбранных действий.

Жду замечаний и предложений.

Модуль находится под лицензий BSD. Исходный код на Github и в песочнице на drupal.org.

UPD: Исправил небольшой баг: для зарегистрированных пользователей в форме подписки по умолчанию был их email, для анонимов выскакивала ошибка, что у объекта $user нет свойства mail.UPD 2: Исправил баг: в форме подписки $form["#action"] был относительный, а не абсолютный(слеш потерялся).UPD 3: Немного поменял алгоритм заполнения таблицы «email_subscribe_readed_nodes». Раньше попадали только опубликованные материалы, сейчас попадают также не опубликованные со статусом «Не прочитано».UPD 4 от 20.03.2015: Обновил до версии 1.0.3.2.UPD 5 от 26.03.2015:Обновил до версии 1.0.3.3.UPD 5 от 24.12.2015:Обновил до версии 1.0.4.UPD 6 от 12.12.2016:Обновил до версии 1.0.5.UPD 7 от 18.01.2017:Обновил до версии 1.0.5.1.

habr.com


Prostoy-Site | Все права защищены © 2018 | Карта сайта