Интернет магазин на Drupal без регистрации пользователей

Если в вашем интернет-магазине, после оформления заказа, от пользователя уже ничего не зависит, то регистрация пользователей не нужна, и даже вредна.

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

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

Я думаю, что такой воркфлоу, при котором не потребуется регистрации пользователей, в принципе, возможно реализовать на всех популярных фреймворках для электронной торговли на #Drupal. Я буду приводить примеры для Drupal Commerce, но для Ubercart отличия будут небольшие.

Основываясь на стандартном поведении этих двух "школ" организации интернет магазинов, в общем случае, нам потребуется произвести следующие манипуляции:

  • Дать анонимам все необходимые права;
  • Убрать формы авторизации;
  • Отключить создание пользователей;
  • Настроить информирование пользователей.

Настройка процесса оформления

В случае с #DrupalCommerce достаточно дать анонимам право оформления заказа (Access checkout):

И отключить два правила: Создание новой учётной записи для анонимного заказа (Create a new account for an anonymous order) и Связать анонимный заказ с существующим пользователем (Assign an anonymous order to a pre-existing user):

Информирование пользователей

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

  • по завершению оформления заказа, на странице подтверждения показывать покупателю уникальную секретную ссылку для отслеживания статуса заказа на сайте;
  • так же отправлять эту ссылку на e-mail или в sms;
  • при этом, доступа к просмотру заказов по обычным url'ам (вида user/*/orders/*) у анонимов быть не должно.

Как обычно в Drupal, задачу можно решить разными способами:

  • написать свой хитроумный модуль;
  • переопределить функцию генерации url или номера заказа;
  • попытаться реализовать такой функционал готовыми модулями.

И совершенно гениальную идею предложил уважаемый imarat в соответствующей ветке на d.ru:

  • сделать для заказа скрытое поле со случайным значением;
  • через токен подставить это значение в ссылку, выдаваемую пользователю;
  • сделать вьюху заказов, с контекстным фильтром по этому полю (и отключить проверку прав).

Для добавления поля в заказ потребуется включить модуль Order UI, а для самого поля я использовал модуль Computed Field. Этот модуль позволяет вычислять значение с помощью php. Я посчитал, что оптимальным балансом между надежностью и удобочитаемостью будет случайное число из 8 цифр:

if (!$entity_field[0]['value']) {
  $entity_field[0]['value'] = mt_rand(10000000, 99999999);
}

Условие нужно, чтобы значение не пересчитывалось при каждом обновлении заказа. Так же надо убедиться что отмечена опция Хранить значение в базе данных (Store value in the database), в противном случае, его нельзя будет использовать во вьюхе. Не забудьте скрыть метку и само поле во вкладке Управление отображением.

Теперь мы можем использовать токен со значением этого поля в сообщении о завершении заказа (должен быть включен модуль Token):

Your order number is [commerce-order:order-number]. You can view your order by this <a href="[site:url]order/[commerce-order:field_order_code]">link</a>.

И в шаблоне письма:

Thanks for your order [commerce-order:order-number] at [site:name].
You can find the status of your current order at this <a href="[site:url]order/[commerce-order:field_order_code]">page</a>.
Please contact us if you have any questions about your order.

Страница просмотра заказа

Самое время сделать вьюху, на которую будет вести наша секьюрная ссылка.

Добавляем новое представление для Commerce Order типа Заказ (Order).

Путь (Path): order/% (такой же адрес должен быть в шаблонах сообщений).

Формат отображения (Display format): Неформатированный список с полями (Unformatted list of Fields), хотя это не принципиально.

Добавляем контекстный фильтр по нашему полю: Commerce Order: Order code.

В настройках этого фильтра, при отсутствии значения надо выбрать Вывести текст Ничего не найдено (Display contents of "No results found") и убрать Значение исключения (Exception value), чтобы пользователь не смог смотреть все заказы. При желании, можно добавить соответствующее сообщение в раздел Поведение при отсутствии результатов.

Добавляем необходимые поля, у меня это были: Commerce Order: Order status, Commerce Order: Line items и Commerce Order: Order total. Поле Commerce Order: Order ID уже было по умолчанию.

Чтобы игнорировать проверку прав нужно в настройках запроса (Query options) выключить перезапись SQL (Disable SQL rewriting). Если вы добавляли поле Commerce Order: Line items, то такое же действие надо будет сделать для представления Line items.

В результате получилась довольно информативная страница. К сожалению, в "крошках" все равно остается лишний пункт от значения исключения. Но, так как, в моем случае, у меня был установлен модуль Path Breadcrumbs, избавиться от этого пункта было несложно.

Итог

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

Вы здесь