Базовая настройка Drupal Commerce

Drupal: 
Уровень сложности: 
Модули: 

Магазин на Друпал обязательно вызывает вопросы новичков, потому что он большой, и его структура не легко изучается с первого раза. Одна из проблем - частое возникновение ошибок. В Commerce ошибки действительно случаются на этапе настройки. Поэтому этот урок посвящён вопросам установки, настройки, переводам строк.
Тема урока: как настроить работающий магазин Drupal Commerce?
Вопросы: как перевести price и order total? Почему анонимные пользователи не могут оформить заказ? Как изменить сообщение о завершении заказа? Куда сохраняются заказы? Как сделать кнопку добавления в корзину без обновления страницы, динамической?

Материал в процессе написания.

Вначале рассмотрим то, без чего магазин точно не будет работать.

Просмотр товаров анонимными посетителями

Часто бывает, что Вьюс товаров не отображает товары анонимам. Это потому, что они не имеют доступа к просмотру товаров на складе. Исправляется добавлением разрешения на странице Пользователи - Разрешения. Отметьте галки для всех (возможно, у вас вместо Товар - Product) в следующих пунктах:
Просмотр своих товары любого типа
View own Товар товары
Просматривать любой Товар товар
и так для всех других типов товаров, если вы определили разные типы товаров на странице Магазин (или Склад, Store) - Товары - Типы товаров.

Оформление заказов анонимными пользователями

Если вы зашли на страницу корзины от анонима, и на ней нет кнопки Оформить заказ, нужно дать права анонимам. Откройте страницу Пользователи - Разрешения. Поставьте галки для анонимов и зарегистрированных и для всех ролей напротив строк:
Создавать профили пользователя любого типа - только зарегистрированным
Просмотр своих профили пользователя любого типа - только зарегистрированным
Создавать заказы любого типа - всем
Создать Заказ заказы - всем

Также другие настройки, по желанию:
View own Заказ заказы - можно для зарегистрированных, если хотите

Перевод поля Price в товаре Commerce

Это делается на странице Магазин (или Склад, Store) - Товары - Типы товаров - нужный вам тип - управлять полями. Для стандартного типа Товар эта страница имеет адрес: admin/commerce/products/types/product/fields . Там есть поле Price, если нажать изменить, Друпал сообщит, что поле защищено от изменения или изменить нельзя. Это легко решается через базу данных. Откройте в phpMyAdmin вашу базу, найдите таблицу field_config, в ней строку:
commerce_price commerce_price commerce_price ....
На этой строке будет в колонке locked значение 1, то есть защищено. Нужно исправить на 0. Тогда опять откройте тип товара и нажмите изменить напротив Price. Исправьте на слово Цена. Потом в базе верните 1 в колонку locked, на всякий случай против сбоев.

Для мультиязычного сайта поле Price может быть переведено таким же образом, отменив в базе данных защиту от редактирования и нажав "Переводы" при редактировании этого поля. А также есть в гугле другой способ.

Перевод Order Total на странице корзины

Первый способ, простой через базу данных
Откройте страницу управления полями заказа admin/commerce/config/order/fields Вы увидите там строку Order total. Если нажать изменить, то Друпал сообщит, что поле нельзя менять, для этого надо снять запрет изменения, делается это так. Откройте свою базу в phpMyAdmin, найдите в базе данных таблицу field_config и в ней строку
commerce_order_total commerce_price commerce_price ...
В колонке locked этой строки стоит 1, то есть поле заблокировано. Исправьте на 0. Теперь вы сможете редактировать это поле admin/commerce/config/order/fields - там нажмите изменить напротив Order total и напишите своё название поля, например Итого. Сохраните. И в базе данных опять верните 1 в колонке locked, на всякий случай, чтобы не ломалось.

Второй способ, сложный, больше подходит для мультиязычных сайтов
Скопировано с: http://www.drupal.ru/node/97588
1)короче говоря ставится http://drupal.org/project/i18n включается модуль field translate
2) переходим admin/config/regional/i18n/strings включаем english
3)переходим admin/config/regional/translate/i18n_string ставим галку fields жмем REFRESH
4)переводим как обчно admin/config/regional/translate/translate
5) повторяем действия пункта 3

Третий способ, ненадёжный (после обновления модуля опять придётся делать)
Найден тут: http://rails-dev.ru/blog/perevod-or-i-order-total-v-drupal-commerce
Чтобы перевести "Order total" открываем файл "sites/all/modules/commerce/modules/price/commerce_price.module", в строке 493 меняем
'title' => check_plain($instance['label']), на
'title' => check_plain(t($instance['label'])),
После этого переводим строку через обычный интерфейс перевода.

Четвёртый способ, через тему
Найден тут: http://dreamr1der.ru/drupal_commerce_1
Добавьте в template.php вашей темы такой код, а потом Конфигурация - Языки - Переводы - найдите Order total и переведите

  1. /**
  2. * Implements hook_themet_commerce_price_formatteed_components().
  3. * Fix Order total for drupal commerce.
  4. */
  5. function YOUTHEME_commerce_price_formatted_components($vars) {
  6. $vars['components']['commerce_price_formatted_amount']['title'] = t('Order total');
  7. return theme_commerce_price_formatted_components($vars);
  8. }

Перевод поля Address и установка страны по умолчанию

Эти задачи делаются одновременно. Для того, чтобы посетители могли оставить информацию о доставке и свой адрес у вас должны быть активированы модули Customer, Customer UI. Если да то на странице Магазин (или Store, Склад) есть кнопка Профили покупателей - нажмите. Далее в верхнем правом углу нажмите на вкладку Типы профилей. Потом "управлять полями" напротив профиля по умолчанию, напротив Address - изменить. Исправьте название на русское "Адрес" или "Адрес доставки", а также отметьте страну по умолчанию и сохраните.
Там есть и другие настройки, например, доступные страны, Имя в одну строку или Полное имя в два поля, скрывать почтовый индекс, пояснение к этому полю.

Настройки валюты

Установите модуль Commerce Currency Settings, чтобы настраивать для каждой валюты количество знаков после запятой, стиль вывода значка валюты и символ значка валюты (например, руб. или значок перечеркнутая Р). Этот модуль особенно важен для мультивалютных магазинов.

Добавление в корзину без перезагрузки страницы

Для этого есть два, а может и больше модулей, но выбирать нужно правильный: Commerce Fast Ajax Add to Cart - этот код добавляет функцию динамического обновления корзины при добавлении товара (без перезагрузки страницы). Хотя это не модуль, а проект песочницы, рекомендуется ставить Commerce Fast Ajax Add to Cart, так как он не засоряет базу данных, таблицы кеша форм.
Если у вас не получилось скачать этот проект модуля или ваш магазин небольшой, и кеш не имеет значения, тогда есть Commerce Ajax Cart, но он кеширует формы и засоряет базу данных.

Ошибки, которые бывают и как их исправлять

1. Неизвестное поле в entityfieldquery, поле поломано
EntityFieldQueryException: Неизвестное поле: commerce_product в функции EntityFieldQuery->addFieldCondition() (строка 770 в файле includes/entity.inc).
Используйте модуль восстановления поломанных полей - Commerce Repair. Он активируется и добавляет ссылку на страницу Магазин (или Store, Склад) - Конфигурация, то есть тут admin/commerce/config. Называется кнопка Repair Commerce fields. Нажмите, он проделает восстановление, и ошибка может исчезнуть. Такие ошибки возникают по разным обстоятельствам: сбой базы данных, медленная база, не довершена операция, и вы ушли со страницы, Коммерц большой, и не везде изменения на сайте проходят корректно.