Выложил обновленную версию DC Smallcart. Изменения такие:
— исправлен баг с полем Quantity (количество); раньше при подключении модуля поле появлялось не перед, а после кнопки Add to Cart, теперь работает как надо;
— подправлен поиск id блока для замены по AJAX;
— теперь модуль «из коробки» совместим с Bartik-ом.
Кому надо, качайте обновку с соответствующей страницы.
Друпальчики
Views Moving Boxes
Вчера внезапно сел и сделал еще один модуль. Делюсь.
На этот раз, разработка посвящена вечной теме слайдеров/каруселей. Модуль называется Views Moving Boxes, он интегрирует во Views (в виде плагина) слайдер Moving Boxes за авторством Криса Койера. Демонстрацию слайдера можно увидеть здесь.
Далее подробности. Ссылка на скачивание — в конце заметки.
Yandex Map Field
Дорогие друзья! Модуль переехал на NetSpark.Ru. Вся дальнейшая разработка и поддержка будет происходить там. Текст новости и комментарии здесь — сохранены для истории.
Пока на Друпал.ру кипят страсти по поводу конкурса модулей для Яндекса, пока всех волнуют важнейшие вопросы: будут ли опубликованы все модули, кем, когда, где и под какой лицензией, и кто же наконец победит в конкурсе — возникла задача сделать свой модуль для Яндекс.Карт. Сделал, делюсь.
Собственно, модуль Yandex Map Field довольно простой — именно поэтому не стал особо смотреть на уже выложенные конкурсные работы. Модуль добавляет поле Яндекс.Карт для присоединения к сущностям и предназначен по большей части для сайтов-визиток. То есть, чтобы приаттачить к странице «контактов» карту, отображающую заданный адрес.
Как оно работает:
Модуль упрощенной корзины для Drupal Commerce
Дорогие коллеги!
Модуль переехал на NetSpark.Ru: http://netspark.ru/useful/modules/uproshchennaya-korzina-dlya-drupal-com....
Дальнейшая поддержка и доработка будет осуществляться там. Скачивать файлы и задавать любые вопросы по работе со скриптом можно тоже там.
Недавно приводил код для блока упрощенной корзины Drupal Commerce. Заодно обещался показать, как этот блок аяксифицировать, чтоб по нажатии кнопки «В корзину» он немедленно обновлялся.
Аяксифицировать, собственно, очень просто — в D7 для этого есть прекрасный набор функций ajax_command_*, так что даже JS-код писать никакой не надо. Однако вместо JS-кода надо писать небольшой модуль. Так что пришлось оформить упрощенную корзину в виде модуля DC Smallcart, которым я с вами и хочу поделиться. Ссылка на файл — в конце заметки.
Собственно, что в модуле.
1. Стандартная табличка корзины Commerce заменяется простой фразой «В корзине всего X товаров на сумму Y рублей». Приблизительно так:
Ссылки на корзину и оформление заказа — присутствуют.
2. Фраза «В корзине всего…» — естественно, на английском. К модулю прилагается файл с переводом на русский. Перевод выполнен безо всякого малодушия, с соблюдением склонений при изменении числа товаров в корзине.
3. При подключении, модуль автоматически аяксифицирует кнопки «Добавить в корзину». То есть при нажатии на такую кнопку, блок корзины обновится без перезагрузки страницы. Кроме того, без перезагрузки страницы появится и соответствующее системное сообщение (товар добавлен в корзину, и т.д.).
4. Разметки минимум, но все же для удобства генерация блока выведена в отдельный темплейт.
5. Есть такой нюанс: при аяксификации естественно заранее неизвестно, какая тема оформления установлена у потребителя модуля. Поэтому не ясно, за какие #id цепляться, чтобы грамотно обновить блок и вывести системное сообщение. В текущей реализации модуль цепляется за id блока для его обновления (#block-dc_smallcart-small_cart) и за id хлебных крошек (#breadcrumbs) для вывода системного сообщения сразу после блока хлебных крошек. Поменять эти #id можно прямо в конце файла dc_smallcart.module.
6. Картинка с корзиной и стили CSS для оформления блока, естественно, в комплект не входят.
Примерно так. Качайте, пользуйтесь на здоровье.
Съездил на DrupalCamp
Вчера съездил на очередную конференцию DrupalCamp. Было весело, даже несмотря на то что и приехать получилось не к началу, и уехать пришлось задолго до конца.
В этот раз на доклады не ходил вообще (в интернетах посмотрю), вместо этого общался людьми на разные темы. Набирался мудроты, то есть. И осмелюсь заметить — очень продуктивно общался. Хочу сказать, некоторые излагают полезные вещи так основательно, плотно и неустанно, что можно смело вешать на них микрофоны на время всей конфы, и передавать нон-стоп по радиоканалу.
В этот раз было целых три иностранных доклада. И это хорошо. На фоне очевидной международности московского кэмпа, прям захотелось поехать на балканский, когда там будет очередной. Но это так, лирика.
В общем, как обычно — было круто. И, как обычно, организаторам — большое спасибо!
А вот, кстати, послание Дриса по поводу:
После конфы набежали на московский Планетарий, обновленный и симпатичный. В Планетарии — тоже хорошо, даже несмотря на наличие странной обзорной площадки, с которой днем видно только небо, а ночью она не работает.
Довольный конфой и Планетарием, внезапно вспомнил, что давно ничего не писал друпального. Как обычно, работы много, времени — мало, но скоро все будет. И заметки, и новости.
Упрощенная корзина для Drupal Commerce
Некоторых по вполне логичным причинам не устраивает стандартный блок корзины в Drupal Commerce. Хочется не выводить все понапиханные в нее товары, а вывести только, скажем, одну строку. В которой должно быть только число товаров в корзине и сумма, на которую набрано. Ну и ссылки на саму корзину и оформление товара.
Вот 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());
print t('Your shopping cart contains !items on !money total', array('!items' => format_plural($quantity, '@count product', '@count products'), '!money' => commerce_currency_format($total['amount'], $total['currency_code'])));
print l(t('Cart'), 'cart') . ' ' . l(t('Checkout'), 'checkout');
Обращаю внимание — число товаров в корзине переведено правильным, годным образом, через 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="[url]">ссылка</a>) — HTML внезапно становится запрещенным.
Оно понятно, хардкодить ссылки, прямые или косвенные, в переводимые текстовые сообщения (см. функцию t()) без шаблонов замены — конечно, моветон. Но если уж упустили такое — куда деваться-то переводчикам? Если уж даже разработчики такого мощного модуля как commerce шаблонами не воспользовались?
Вон, даже иссуй на тему есть. Незакрытый.