Друпальчики

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 и Вконтактик

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

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

DrupalConf 2 — декабрь

Вчера с удовольствием съездил на второй в этом году московский DrupalConf. Докладываю.

Выдвинулся рано утром, с помощью электрички. За пару минут до подъезда к платформе «Останкино» машинист внезапно сообщил, что, как он уже говорил (хотя он не говорил), выход — только из четырех последних вагонов (а я был впереди). Ломиться через вагоны не стал, двери все же открылись. Оказалось, платформу «Останкино» разобрали почти всю, но где-то внизу виднелась земля. Выполнил тройное сальто с винтом, кувырок через плечо, и, пробираясь по снегам, камням, глине и котлованам, добрался-таки до станции. Где меня встретил Ламер.

Drupal 7 и jQuery.once()

Некоторое время назад писал про Drupal.behaviors и jQuery в «шестерке». Там, как мы помним, чтобы одни и те же действия не выполнялись над элементами многократно, нужно было использовать контекст, а также присваивать и проверять наличие спец. класса. В общем, вот так:

Drupal.behaviors.myModuleBehavior = function(context) {
  $('.module-class-object:not(.module-class-processed)', context).each(function () {
    $(this).addClass('module-class-processed');
    // Do things
  });
};

Как нетрудно догадаться, для каждого нового «поведения» этот код надо копировать (что не очень хорошо).

В Drupal 7, однако, стало гораздо удобнее: в него интегрирована новая функция jQuery — once(). Она умеет присваивать спец. классы и проверять их наличие сама. Вот так:

(function ($) {
  Drupal.behaviors.myBehavior = {
    attach: function (context, settings) {
      $('div.my_behavior').once(function () {
        //этот код выполнится только раз для каждого div.my_behavior, независимо от числа запусков Drupal.attachBehaviors()
      });
    }
  };
}

Прогресс, как говорится, налицо.

Единственный недостаток (если это можно считать недостатком) once() — объекту, возвращаемому селектором $(...), должно быть можно присвоить CSS-класс. То есть запись $(document).once(...) результатов не даст. А вот запись $('body').once(...) — даст.

Порт модуля user titles

Сегодня закончил порт модуля user titles в Drupal 7. По факту — добавил результат в соответствующий issue на drupal.org.

Порту подвергся основной модуль, без контрибов. Впрочем, контрибы там меньше чем по 1КБ каждый, так что если будет желание — проблем возникнуть не должно. Также не тестировал работу тайтлов-изображений (они мне сейчас просто не нужны), но код также портирован, так что если какие проблемы с картинками будут — пишите, посмотрю.

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

В процессе портирования, кстати, посчастливилось поработать с новомодным DB API. API прекрасен, одна строчка SQL-запроса средней сложности превращается в десять строчек нового кода. Правда, более понятного, да.

Файл с модулем добавлен к заметке, качайте, пользуйтесь на здоровье.

Ссылку на основного спонсора порта добавлю сюда позже, когда проект будет открыт.

upd: архив с модулем обновлен. Изменения:
 — исправлен небольшой баг в hook_user_view();
 — админка модуля перенесена в Configuration→People;
 — добавлен порт контриб-модуля ut_userpoints (то есть интеграция с модулем userpoints) за авторством boran.

Logo Changer

Сделал для логотипов Cotranslate.Net небольшой модуль Drupal 6, обозвал logo_changer. Делюсь с общественностью.

Модуль умеет подгружать в отдельную директорию несколько логотипов и менять их в зависимости от времени суток. Для каждого логотипа в админке задается время его работы «от и до» и ставится галочка «активный» (неактивные логотипы не используются). После чего Друпал смотрит на системное время с учетом часового пояса пользователя — и выставляет соответствующий этому времени логотип.

Если кому надо — качайте, пользуйтесь.

Также в планах вставить в этот модуль «пасхальные яйца» — логотипы, появляющиеся изредка, с небольшой вероятностью. И, возможно, логотипы для отдельных страниц.

Cotranslate.Net

Пару лет назад я начал переводить сериал «Полет Конкордов». Когда перевел пару-тройку серий, пришел к выводу, что таскать с одного компьютера на другой файлы с субтитрами мне не нравится — хотелось переводить серии из разных мест без всякой синхронизации. О существовании как минимум двух систем коллективного перевода мне было известно уже тогда. Но ничего коллективного не хотелось, хотелось наоборот — переводить в одно лицо. Но чтоб в Интернете.

Далее — анонс сайта Cotranslate.Net.

Как смыть макияж со свиньи или Выход из кризиса

Накатал перевод продолжения вчерашней заметки Даниэла Кудвиена.

Оригинал тут: http://www.unleashedmind.com/en/blog/sun/crisis-conclusions

Далее перевод.