Drupal 7

Как закрыть на обслуживание только часть сайта

Пример, как закрыть на обслуживание только часть сайта, например ноды определенного типа. Создаем свой модуль, и внутри файла module_name.module имплементируем хук hook_menu_site_status_alter:

/**
 * Implements hook_menu_site_status_alter()
 */
function example_menu_site_status_alter(&$menu_site_status, $path) {
  if ($node = menu_get_object()) {
    if ($node->type == 'article') {
      // Если пользователь имеет разрешение использовать сайт в режиме обслуживания,
      // то показываем ему сообщение, что сайт в режиме обсуживания, иначе меняем статус на "оффлайн".
      if (...
Benya

Большие цены в Drupal Commerce

В Drupal Commerce имеется одна неприятная особенность, с которой может столкнуться каждый. Проблема заключается в том, что в базе данных у цен размер равен int(11). Но существует ряд стран, например Беларусь, где цена 30 000 000.00 и больше - вполне нормальное явление. И тут начинаются проблемы, при попытке оформить заказ с такой ценой - система безотказно будет информировать нас о том, что цена выходит за границы размера поля.

Чтобы исправить эту проблему, имплементируем хук hook_field_create_field():

<?php

/**
 * Implements hook_field_create_field().
 */
function...
Benya

Как программно создать компонент для Rules

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

Создание компонента начинаем с того, что создаем файл с названием example.rules_defaults.inc. В этом файле имплеменируем хук hook_default_rules_configuration():

<?php

/**
 * @file
 * Default rule configurations.
 */

/**
 * Implements...
Benya

Как вывести способы оплаты в виде таблицы в Drupal Commerce

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

/**
 * Implements hook_form_FORM_ID_alter().
 */
function example_form_commerce_checkout_form_review_alter(&$form, &$form_state) {
  $header = array(
    'payment' => t('Payment'),
    'description' => t('Description'),
  );
  
  $checkout_pane = commerce_checkout_pane_load('commerce_payment');
  foreach ($form['commerce_payment']['payment_method']['#options'] as $key => $option) {  
    $method_info = $form['commerce_payment']['...
Benya

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

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

  • page_id - машинное имя страницы, допускается использование строчных букв и цифр, а так же символов "-", "_"
  • title - название страницы, используемое при оформлении заказа
  • name - переводимое название страницы, используемое в административных страницах, а так же соответствует статусу заказа на данной странице, если не указано, то по умолчанию используется название страницы
  • help - переводимый текст, который будет показан...
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