Разработка
Упрощенная корзина для 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());
?>
<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-у — напишу позже.
Жар-Пар.Ком
Уважаемые друпальщики и сочувствующие!
Наконец-то доведен до рабочего состояния сайт Жар-Пар.Ком, и этой радостью я спешу с вами поделиться. Жар-Пар.Ком — это магазин печей и дымоходов. Что характерно, интернет-магазин.
Сайт сделан целиком и полностью на Друпале 7, с применением передового магазинного пакета Drupal Commerce. Чем, кстати, лишний раз подтверждается тезис о том, что делать сайты на «семерке» — рано, а интернет-магазины — вообще нельзя.
Вопросы, замечания, конструктивную критику и прочее можно излагать в комментариях. Но на критику дизайна ответить не смогу: использована стандартная тема AT Commerce, ее оформлением занимался не я.
Спасибо за внимание. Покупайте печки и дымоходы!
In Bruges
Художественный фильм In Bruges, также известный у нас под названием «Залечь на дно в Брюгге» — один из моих самых любимых фильмов. Не берусь сказать, сколько раз я его уже посмотрел, но — не надоедает до сих пор. Видимо, поэтому я и решил взять его, да и перевести. В смысле — вдруг в процессе надоест уже? Ну и взял, перевел. Правда, не надоел все равно. Но перевод — выкладываю.
Несколько слов о фильме.
Начинающий наемный убийца Рэй (Колин Фаррелл) получает свое первое задание. Но в ходе, так сказать, работы все идет не так и он случайно убивает ребенка. И немедленно получает от криминального начальства приказ: покинуть Лондон и залечь на дно в бельгийском городе Брюгге. С Рэем в Брюгге отправляется его старший товарищ по опасному бизнесу, Кен (Брендан Глисон). Вместе они должны прожить в городе две недели в ожидании неизвестно каких указаний. И вот перед самым Рождеством они приезжают в сказочный город Брюгге, где снег падает на готические здания, с колокольной башни глазеют туристы, а в каналах плавают лебеди. А еще там есть наркотики, оружие, бандиты, проститутки, карлик и картина Иеронима Босха.
In Bruges — как бы криминальная комедия. То есть в фильме имеются шутки. И, в то же время, это драма. Это фильм про вину, про веру, про мораль и про искупление. В наличии сочная, местами сюрреалистичная атмосфера, отличные актеры с ирландским говором, шикарная музыка. In Bruges — это грустная рождественская сказка для взрослых. За главную роль в этой сказке, кстати, Колин Фаррелл получил Золотой глобус.
Для желающих ознакомиться, перевод (сделанный в виде субтитров) прикреплен в конце заметки. Если будет надо, могу сделать несколько комментариев по фильму/переводу/содержанию, примерно как в «Конкордах».
И в оригинале, и в переводе — очень много нецензурной брани. Также в фильме имеются сцены насилия и употребления наркотиков. Показывать детям, маме, бабушке и просто впечатлительным женщинам — не стоит.
И еще. Раз однажды уже спрашивали, имеет смысл сразу сказать вот что:
Да, я знаю, что у фильма уже где-то с десяток разных переводов. Я понятия не имею, хорошие они, или плохие — я никогда не смотрел In Bruges в переводе. Соответственно, перевод сделан не чтобы с кем-то там конкурировать. А просто потому что мне фильм очень нравится.
Надеюсь, понравится и вам.
Субтитры, естественно, были изготовлены на сайте Cotranslate.Net.
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 (на английском).
Порт модуля 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.
Про браузеры, файлы, безопасность и JavaScript
В современных браузерах, безусловно, очень много внимания разработчики уделяют безопасности. Настолько много, что иногда ум за разум заходит.
Так, например, есть известный элемент HTML <input type="file" />, предназначенный для открытия пользователем файла у себя в компьютере, предположительно — для последующей его отправки на сервер. Когда пользователь нажимает кнопочку Browse и выбирает в стандартном диалоге операционной системы нужный файл — полный путь к нему немедленно появляется в поле слева от кнопочки. Однако если мы вдруг захотим обратиться к полю input с целью получить этот самый полный путь через JavaScript, система безопасности современного браузера тут же покажет нам современную фигу. И вместо полного пути возвратит только имя файла.
А я вот хочу чтоб в браузере пользователь мог проигрывать локальные видео-файлы. И для выбора проигрываемого файла отлично подходит диалог из элемента input. Но нет — тут, оказывается, дыра в безопасности, дескать, я так по полному пути могу делать всякое нехорошее с файлами и директориями. Правда, при этом я могу создать обычный текстбокс <input type="text" /> и попросить пользователя ввести полный путь к файлу туда. Причем, причин вводить путь к файлу у пользователя будет столько же, сколько выбирать его в диалоге. Разве что это гораздо неудобнее выбора файла в диалоге. А делать с файлом всякое я смогу все равно (кроме, пожалуй, его загрузки на сервер).
В интернетах тут и там встречаются всякие хитрые хаки и читы, помогающие вытащить-таки из файлового диалога полный путь к выбранному файлу. Однако они а) разные для разных браузеров; б) хаки и читы — то есть, быстро закрываются разработчиками браузеров.
Через это вопрос к общественности: знает ли кто какой-нибудь плагинчик jQuery или иное средство для вызова системного диалога «Открыть файл» без использования <input type="file" />, но с возможностью получения полного пути к выбранному файлу? Поделитесь, а.
Также подойдет возможность увязать <input type="file" /> с объектом на странице, чтобы, типа, они сами, без меня, «безопасно» путями обменивались. Но это наверно из разряда фантастики.
Logo Changer
Сделал для логотипов Cotranslate.Net небольшой модуль Drupal 6, обозвал logo_changer. Делюсь с общественностью.
Модуль умеет подгружать в отдельную директорию несколько логотипов и менять их в зависимости от времени суток. Для каждого логотипа в админке задается время его работы «от и до» и ставится галочка «активный» (неактивные логотипы не используются). После чего Друпал смотрит на системное время с учетом часового пояса пользователя — и выставляет соответствующий этому времени логотип.
Если кому надо — качайте, пользуйтесь.
Также в планах вставить в этот модуль «пасхальные яйца» — логотипы, появляющиеся изредка, с небольшой вероятностью. И, возможно, логотипы для отдельных страниц.
Cotranslate.Net
Пару лет назад я начал переводить сериал «Полет Конкордов». Когда перевел пару-тройку серий, пришел к выводу, что таскать с одного компьютера на другой файлы с субтитрами мне не нравится — хотелось переводить серии из разных мест без всякой синхронизации. О существовании как минимум двух систем коллективного перевода мне было известно уже тогда. Но ничего коллективного не хотелось, хотелось наоборот — переводить в одно лицо. Но чтоб в Интернете.
Далее — анонс сайта Cotranslate.Net.
О синхронизации данных в Linux
Когда дома есть в наличии большой компьютер и маленький, может возникнуть необходимость держать некоторые данные и там, и там. Причем, держать синхронизированно. Лично я, например, регулярно пользуюсь мега-программой для заметок Basket, и конечно мне хотелось бы, чтобы все заметки были доступны и на нотбуке, и на десктопе.
В Линуксе для решения задачи синхронизации есть все необходимое. В принципе, есть и готовые программы для синхронизации, но я считаю, что для моего случая достаточно rsync, md5sum и небольшого скрипта на bash. Ну и сетевого раздела NFS — чтобы через него синхронизироваться. Далее о том, как все делается.
- ‹ следующие заметки
- архив за год
- предыдущие заметки ›

