xandeadx.ru Блог музицирующего веб-девелопера

DrupalСпособы реализации каталога с большим количеством атрибутов товара (теория)

Опубликовано в

Решил собрать в одном месте способы реализации каталога с большим количеством атрибутов товара (как на Яндекс.Маркете), их плюсы и минусы.

Javascriptenquire.js — работа с медиа-выражениями в javascript

Опубликовано в

enquire.js — это небольшая (2.2kb) javascript библиотека позволяющая детектить медиа-выражения. Библиотека не зависит от jQuery и других либ. Работает в браузерах с поддержкой matchMedia.

Пример использования — при размере экрана браузера меньше 980px нужно переместить блок из шапки в сайдбар:

enquire.register('screen and (max-width: 980px)', {
  // Вызывается, когда медиа-выражение начинает удовлетворять правилу
  match: function() {

DrupalПодмена домена языка

Опубликовано в

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

Решение — установить модуль Language Domains и прописать в settings.php что-нибудь такое:

if (strpos($_SERVER['HTTP_HOST'], '.local')) {
  $conf['language_domains']['ru'] = 'ru.mysite.local';

DrupalВывести информацию о выбранном способе оплаты на странице Review order

Опубликовано в
/**
 * Implements hook_form_FORM_ID_alter(): commerce_checkout_form_review.
 */
function MODULENAME_form_commerce_checkout_form_review_alter(&$form, &$form_state) {
  $payment_method_instance = commerce_payment_method_instance_load($form_state['order']->data['payment_method']);
 
  $form['checkout_review']['review']['#data']['payment_method'] = array(
    'title' => 'Payment information',
    'data' => 'Payment method: ' . $payment_method_instance['title'],
  );
}

Результат:

DrupalРаскрытый фильтр "С фото" в виде одиночного чекбокса

Опубликовано в

Задача — дать возможность пользователю выводить только материалы с изображениями, а по умолчанию выводить материалы как с фото так и без:

DrupalЗаменить названия способов оплаты на их Rule name

Опубликовано в

Названия способов оплаты формируются в hook_commerce_payment_method_info() и не зависят от названия их Rule, что в общем странно.

Вариант брать названия способов оплаты из названия их Rule:

/**
 * Return payment method title.
 */
function modulename_get_payment_method_title($payment_method_instance_id) {
  list(, $rule_name) = explode('|', $payment_method_instance_id);
  $rule = rules_config_load($rule_name);
  return $rule->label;
}
 
/**
 * Implements hook_form_BASE_FORM_ID_alter(): commerce_checkout_form.
 */

DrupalTaxonomy Menu и названия пунктов меню из поля термина

Опубликовано в

При создании меню с помощью модуля Taxonomy Menu, названия пунктов формируются из имени термина, что не всегда уместно.

Способ брать названия пунктов меню из кастомного поля термина field_menu_title:

/**
 * Implements hook_taxonomy_menu_update().
 */
function MODULENAME_taxonomy_menu_update(&$item) {
  $term = taxonomy_term_load($item['tid']);
  if ($term && !empty($term->field_menu_title['und'][0]['value'])) {
    $item['name'] = $term->field_menu_title['und'][0]['value'];
  }
}
 
/**
 * Implements hook_taxonomy_menu_insert().

DrupalOne Click Upload и заливка файлов в textarea с помощью Drag&Drop

Опубликовано в

Реализовал во второй версии One Click Upload возможность drag&drop-ить файлы не только на кнопку редактора, но и на сам textarea:

С BUEditor тоже будет работать, как и с отключённым CKEditor.

Тестим, пишем о багах.

DrupalИменование своих служебных javascript функций

Опубликовано в

Хорошим тоном считается помещать свои функции в неймспейс Drupal.yourModuleName.

Пример файла my_cool_module.js:

(function ($) {
  Drupal.myCoolModule = Drupal.myCoolModule || {};
 
  // Определение функции
  Drupal.myCoolModule.myFunc = function () {
    // ...
  };
 
  // Вызов функции
  Drupal.myCoolModule.myFunc();
})(jQuery);