Друпальчики

Упрощенная корзина для Drupal Commerce

Некоторых по вполне логичным причинам не устраивает стандартный блок корзины в Drupal Commerce. Хочется не выводить все понапиханные в нее товары, а вывести только, скажем, одну строку. В которой должно быть только число товаров в корзине и сумма, на которую набрано. Ну и ссылки на саму корзину и оформление товара.

Вот php-код с реализацией такой укороченной корзины. Его надо вставить в блок.

<?php
  global $user;
  $order = commerce_cart_order_load($user->uid);
  if (empty($order) || empty($order->commerce_line_items)) {
      print t('Your shopping cart is empty.');
      return;
  }
  $wrapper = entity_metadata_wrapper('commerce_order', $order);
  $line_items = $wrapper->commerce_line_items;
  $total = commerce_line_items_total($line_items);
  $quantity = commerce_line_items_quantity($line_items, commerce_product_line_item_types());
?>
<p>
<?php
  print t('Your shopping cart contains <span class="shopping-cart-items-count">!items</span> on <span class="shopping-cart-money-total">!money</span> total', array('!items' => format_plural($quantity, '1 product', '@count products'), '!money' => commerce_currency_format($total['amount'], $total['currency_code'])));
?>
</p>
<p>
<?php
  print l(t('Cart'), 'cart') . ' ' . l(t('Checkout'), 'checkout');
?>
</p>

Обращаю внимание — число товаров в корзине переведено правильным, годным образом, через format_plural(). HTML-разметку блока можно менять как нравится.

А о том, как обновлять этот новый блок по AJAX-у — напишу позже.

Drupal 7, таксономия и хлебные крошки

Делал тут хлебные крошечки для сайта на семерке, с применением терминов таксономии. Для начала поставил Hansel — не зря ж я про него видео снимал — оказалось, что хотя он и не в dev-версии, но местами глючит. С Taxonomy Breadcrumb тоже как-то не срослось. Стал писать сам.

В процессе выяснились две интересные особенности. Во-первых, в стандартном модуле таксономии, в файлике taxonomy.pages.inc, есть вот такое:

// @todo This overrides any other possible breadcrumb and is a pure hard-coded
//   presumption. Make this behavior configurable per vocabulary or term.
...

То бишь, в стандартном выводе терминов таксономии есть код, который убивает любые другие настройки крошек. Что характерно, существующий иссуй создан только для грядущей восьмой версии.

Эта проблема, правда, легко решается: нужно просто заменить стандартный вывод страниц таксономии — выводом через Views. А во вьюхе — не забыть отключить в настройке аргумента (который контекстный фильтр) генерацию хлебных крошек. Иначе вьюз все испортит.

В общем, написал крошки сам — функцией drupal_set_breadcrumb() пользоваться очень просто. К слову, время написания кода под хлебные крошки сравнимо с временем создания настроек в Hansel. Через это получается, что людям, которые умеют кодить под Друпал, модули под крошки-то и не нужны особо.

Жар-Пар.Ком

Уважаемые друпальщики и сочувствующие!

Наконец-то доведен до рабочего состояния сайт Жар-Пар.Ком, и этой радостью я спешу с вами поделиться. Жар-Пар.Ком — это магазин печей и дымоходов. Что характерно, интернет-магазин.

Сайт сделан целиком и полностью на Друпале 7, с применением передового магазинного пакета Drupal Commerce. Чем, кстати, лишний раз подтверждается тезис о том, что делать сайты на «семерке» — рано, а интернет-магазины — вообще нельзя.

Вопросы, замечания, конструктивную критику и прочее можно излагать в комментариях. Но на критику дизайна ответить не смогу: использована стандартная тема AT Commerce, ее оформлением занимался не я.

Спасибо за внимание. Покупайте печки и дымоходы!

Управляем заголовками вкладок

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

/**
* Implements hook_field_group_pre_render_alter().
*
* @param Array $elements by address.
* @param Object $group The Field group info.
*/

function mymodule_field_group_pre_render_alter(& $element, $group, & $form) {
  if ($element['#title'] == 'Comments') {
    $node = $element['comments']['#node'];
    if ($node->comment_count == 0) {
      $element['#title'] = t('Be first to leave a comment!');
    } else {
      $element['#title'] = t('Comments (!count)', array('!count' => $node->comment_count));
    }
  }
}

Аналогичным образом можно управлять заголовками любых других вкладок или иных видов групп полей Field Group.

Решение, кстати, дополнительно ценно тем, что благодаря великолепной документированности opensource-проектов потратил на написание этих десяти строчек — несколько часов.

Drupal 7 и переводы строк

Оказывается, чудесную свинью подложили переводчикам сайтов в Drupal 7 через фильтрацию HTML в переводах строк. Простую ссылку (<a href="http://mysite.ru">ссылка</a>) добавить в перевод строки все еще можно. А вот если в ссылке токен (<a href="[site:url]">ссылка</a>) — HTML внезапно становится запрещенным.

Оно понятно, хардкодить ссылки, прямые или косвенные, в переводимые текстовые сообщения (см. функцию t()) без шаблонов замены — конечно, моветон. Но если уж упустили такое — куда деваться-то переводчикам? Если уж даже разработчики такого мощного модуля как commerce шаблонами не воспользовались?

Вон, даже иссуй на тему есть. Незакрытый.

Установка Drupal 7 на localhost

Заметил, что иногда при установке Drupal 7 на домашние компьютеры граждане жалуются на ошибку. Ошибка возникает при вводе информации о базе данных и выглядит вот так:

Failed to connect to your database server. The server reports the following message: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2).
Подсказка: зачастую ошибка лечится очень просто. Нужно раскрыть дополнительные настройки БД (ADVANCED OPTIONS) и вместо localhost написать 127.0.0.1.

jSlider Form API на Drupal.Org

Примерно год назад сделал модуль интеграции плагина jSlider в Form API шестого Друпала, назвал, соответственно, jSlider Form API. Сделал, да и выложил на домовую страницу, чтоб каждый мог воспользоваться.

А сегодня для этого модуля очень хорошие новости: благодаря Евгению Масловскому у jSlider Form API появился дом среди проектов Drupal.org: http://drupal.org/project/jslider_form_api. Именно там теперь будет осуществляться его развитие и поддержка. И порт в Drupal 7, судя по всему, там тоже будет.

И это хорошо.

Видео о нодах, полях и вкладках

В процессе глубокой работы с Drupal 7 задумал заснять несколько видеороликов с небольшими, если можно так выразиться, юзкейсами внутри. Вот первый из них. В нем рассказывается, как в «семерке» распихать поля ноды по симпатичным вкладкам без единой строчки кода.

Использованы модули:
 — Fieldgroup;
 — Display Suite.

Также рекомендуется к освоению:
 — видеокурс по Display Suite (на английском).

Drupal и Вконтактик

Когда-то давно хотел сделать кросспостинг в контактик, но решений не было. А тут вдруг внезапно заметил — оказывается, модуль появился. Немедленно схватил и настроил. Работает!

Автору — большое спасибо! Вот, кстати, его страница. На ней еще и дизайн, я смотрю, поменялся. Блин, как я от жизни-то отстал.