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

DrupalВывод отдельных блоков в region.tpl.php

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

По умолчанию в region.tpl.php приходит уже отрендеренный html всех блоков, доступный в переменной $content. Вывести отдельные блоки можно (они лежат в $elements), но нельзя поступить как в node.tpl.php — сначала вывести нужное, а потом просто сделать echo render($content); для вывода всего остального.

Поколдуем немножко:

/**
 * Implements hook_page_alter().
 */
function THEMENAME_page_alter(&$page) {
  foreach (element_children($page) as $region_name) {

DrupalВывести отладочное сообщение Krumo в watchdog

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

Способ больше не работает, так как сообщения в логе теперь проходят через функцию filter_xss_admin(), которая вырезает стили и скрипты. Пользуйтесь DrupalHelper::debug().

Пример вывода в watchdog информации о переменной $variable:

простой способ:

has_krumo();
watchdog('debug', 'message label => ' . krumo_ob($variable), NULL, WATCHDOG_DEBUG);

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Раскрытый фильтр "С фото" в виде одиночного чекбокса

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

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