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

DrupalИзменить значение поля в Views

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

Способ подменить значение текстового поля field_myfield в представлении myview:

/**
 * Implements hook_views_pre_render().
 */
function hook_views_pre_render(&$view) {
  if ($view->name == 'myview') {
    foreach ($view->result as &$row) {
      $row->field_myfield[0]['rendered']['#markup'] = $row->field_myfield[0]['rendered']['#markup'] ? t('Yes') : t('No');
    }
  }
}

Если в представление будут добавлены два одинаковых поля, то значение поменяется у обоих.

CSSЦикл по ассоциативному массиву в LESS

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

Например на сайте есть несколько разделов (foo, bar, baz), каждый раздел имеет свой цвет фона (green, blue, red). Способ реализации с помощью цикла по ассоциативному массиву:

// Создаём ассоциативный массив
@body-bg-array:
  foo green,
  bar blue,
  baz red;
 
// Создаём функцию для обхода массива
.body-bg-generator(@iterator: 1) when (@iterator <= length(@body-bg-array)) {
  @item: extract(@body-bg-array, @iterator);
  @category: extract(@item, 1);
  @color: extract(@item, 2);
 
  body.category-@{category} {
    background: @color;
  }

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.
 */