Как создать дополнительную страницу в оформлении заказа в Drupal Commerce

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

  • page_id - машинное имя страницы, допускается использование строчных букв и цифр, а так же символов "-", "_"
  • title - название страницы, используемое при оформлении заказа
  • name - переводимое название страницы, используемое в административных страницах, а так же соответствует статусу заказа на данной странице, если не...
Benya

Делаем красивое уведомление при добавлении товара в корзину в Drupal Commerce

Сегодня я расскажу о том, как сделать красивое уведомление, в котором будет показываться информация об добавляемом товаре после добавления товаров в корзину в Drupal Commerce с помощью Ctools modal API.

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

Benya

Как узнать, в каких модулях был изменен код?

Совсем недавно получил задание обновить на сайте ядро и модули. Сайт мне не знаком и видел я его впервые. Опыт обновления незнакомых мне сайтов уже есть и я подумал, хорошо бы для начала узнать, есть ли хакнутые модули и имеет ли смысл браться за такое задание.

Долго искать не пришлось, в сети уже имеется готовое решение данного вопроса в виде модуля Hacked!. Скачиваем и включаем модуль, после чего идем на страницу admin/reports/hacked и запускаем батч. После завершения работы батча будет...

Benya

Ошибка при создании вариантов товара и способ ее решения при использовании модуля Inline Entity Form

Совсем недавно столкнулся с ошибкой при использовании модулей Drupal Commerce и Inline Entity Form. Суть ошибки заключается в том, что у товара имеется 2 атрибута: цвет и размер. В качестве атрибутов используется два словаря "цвета" и "размеры" соответственно. При создании товаров в обоих полях используются виджеты Autocomplete term widget.

Вот тут и начинаются все проблемы, при создании нового товара, в момент добавления вариантов если атрибуты добавляются первый раз (их еще нет в словаре), они (атрибуты) начинают...

Benya

Как сделать правильное склонение для множественных чисел в Drupal

Сегодня впервые столкнулся с проблемой правильного склонения множественного числа. Для английского языка данная проблема не актуальна, так как там всего два варианта: 1 item, 5 items.

В русском же языке существует 3 формы множественного числа: 1 элемент, 2 элемента, 11 элементов.

Напомню, что в Drupal числа во множественном числе выводятся с помощью функции format_plural($count, $singular, $plural, array $args = array(), array $options).

Параметры

  • $count - число для подстановки;
  • ...
Benya

Модули, которые должны быть на каждом сайте.

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

Обязательные модули

  • admin_menu - должен быть на каждом сайте, ускоряет навигацию по административным страницам сайта. Для любителей стандартного тулбара имеется модуль Administration menu Toolbar style (входит в состав модуля admin_menu);
  • module_filter - изменяет...
Benya

Как создать панель для оформления заказа в Drupal Commerce

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

  • pane_id - машинное имя панели, допускается использование строчных букв и цифр, а так же символов "-", "_"
  • title - название панели
  • name - имя панели, используемое при отображении на административных страницах, если не указано, используется title
  • page - page_id на странице оформления...
Benya

Как выполнить js код до и после печати страницы

Для того, чтобы организовать вызов своего кода до и после отправки содержимого на печать, необходимо добавить следующий код:

$(window, context).load(function() {
  // То, что выполнится перед открытием диалога печати.
  var beforePrint = function() {
    console.log('Functionality to run before printing.');
  };
 
  // То, что выполнится после закрытия диалога печати.
  var afterPrint = function() {
    console.log('Functionality to run after printing');
  };

  if (this.matchMedia) {
    var mediaQueryList = this.matchMedia('print...
Benya