Інтернет магазин Drupal без реєстрації користувачів
Якщо у вашому інтернет-магазині після оформлення замовлення від користувача вже нічого не залежить, то реєстрація користувачів не потрібна, а іноді навіть шкідлива.
Класичний приклад – продаж футболок. Якщо ви не надаєте знижки постійним клієнтам, не даєте можливості зміни замовлення після оформлення, та не надаєте інших специфічних послуг, що потребують надійної ідентифікації покупця, то обов'язкова реєстрація буде лише додатковим фактором геморою відмови.
Чим менше ви будете вимагати від користувача непотрібних дій (до них відноситься необхідність заповнення надлишкової для оформлення замовлення інформації), тим вище буде його лояльність = конверсія = ваш прибуток.
Я думаю, що такий воркфлоу, при якому не потрібно реєстрації користувачів, в принципі, можливо реалізувати на всіх популярних фреймворках для електронної торгівлі на Drupal. Я наводитиму приклади для Drupal Commerce, але для Ubercart відмінності будуть невеликі.
Грунтуючись на стандартній поведінці цих двох "шкіл" організації інтернет магазинів, у загальному випадку нам потрібно буде провести наступні маніпуляції:
Налаштування процесу оформлення
У випадку з Drupal Commerce достатньо надати анонімам право оформлення замовлення (Access checkout ):

І відключити два правила:
Створення нового облікового запису для анонімного замовлення(Create a new account for an anonymous order)
Зв'язати анонімне замовлення з існуючим користувачем(Assign an anonymous order to a pre-existing user) :

Інформування користувачів
Тут все сильно залежатиме від специфіки продажів. Для магазину футболок, я б, наприклад, визначив такі завдання:
Як зазвичай у Drupal, завдання можнавирішити різними способами:
- написати свій хитромудрий модуль;
- перевизначити функцію створення URL або номера замовлення;
- спробувати реалізувати такий функціонал готовими модулями.
І цілком геніальну ідею запропонував шановнийimarat у відповідній гілці на drupal.ru:
- зробити для замовлення приховане поле із випадковим значенням;
- через токен підставити це значення посилання, що видається користувачеві;
- зробити в'юху замовлень, з контекстним фільтром цим полем (і відключити перевірку прав).
Для додавання поля в замовлення потрібно включити модульOrder UI, а для поля я використовував модуль Computed Field. Цей модуль дозволяє обчислювати значення за допомогою PHP. Я вважав, що оптимальним балансом між надійністю і зручністю читання буде випадкове число з 8 цифр:
Умова потрібна, щоб значення не перераховувалося при кожному оновленні замовлення. Також треба переконатися що зазначена опція:
Зберігати значення в базі даних(Store value in the database)
в іншому випадку, його не можна буде використовувати у завірюсі. Не забудьте приховати позначку та поле у вкладціКерування відображенням.
Тепер ми можемо використовувати токен зі значенням цього поля в повідомленні про завершення замовлення (має бути включений модуль Token):
І в шаблоні листа:
Додаємо нове уявлення дляCommerce Order типуЗамовлення(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 tota l.
ПолеCommerce Order: Order ID вже було за промовчанням.
Щоб ігнорувати перевірку прав, потрібно в налаштуваннях запиту(Query options) вимкнути перезапис SQL(Disable SQL rewriting). Якщо ви додавали полеCommerce Order: Line items, то таку ж дію треба буде зробити для представленняLine items.

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

Ось так, у кілька тичків, і практично без коду, ми полегшили життя користувачам магазину. А самі ще раз переконалися, що завірюхи — це сила, та прибуде вона з вами!