Есть в Drupal 7 такая замечательная возможность — упаковать набор CSS и JS в библиотеку, и подключать потом одним разом. Достигается эта радость объявлением библиотеки через hook_library() и подключением — через drupal_add_library().
И есть такой модуль — Yandex.Maps, тоже хороший во всех отношениях. Нет только в нём (по крайней мере, в текущей версии) очевидной возможности скрыть поле карты для той или ноды. Простым способом скрыть карту «в лоб» было бы добавление чекбокса «Показать карту» и вот такой примитивный JavaScript…
Читать дальше на NetSpark.Ru
Разработка
Как проверить, прикреплено ли к бандлу поле
Функция проверяет — прикреплено ли поле типа $field_type к бандлу $bundle сущности $entity (все аргументы — строки, не объекты).
function _mymodule_check_bundle_for_field($entity, $bundle, $field_type) {
$instances = field_info_instances($entity);
$fields = array_keys(field_read_fields(array('type' => $field_type)));
foreach ($instances as $instance => $names) {
$field_names = array_intersect(array_keys($names), $fields);
if (!empty($field_names)) {
$bundles[] = $instance;
}
}
return in_array($bundle, $bundles);
}
Как заметили в комментах, более правильно после выхода версии 7.22 вызывать
field_info_instances($entity, $bundle);
Сохраню на память.
Drupal, Android и кнопка Share
С того момента как раздобыл себе первый планшет, всегда жутко бесил порядок загрузки с него фотокарточек на домовую страницу. Найди файл в галерее → запомни как он называется и где лежит → зайди к себе на сайт → зайди в добавление картинок в галерею → нажми «загрузить» → снова найди файл в галерее… Караул, в общем. Особенно при том, что все это время в action bar-е галереи раздражительно блестела кнопка Share со всякими фейсбуками и твитторами внутри.
Очевидно же, что в Друпале должно быть точно такое же. Видимо, придется допилить. Но поскольку пилить под один сайт — скучно, надо бы запилить что-то универсальное. А вам, дорогие коллеги и читатели, это интересно?
Кстати, на скриншоте из фотошопа только красные линии. А пункт в меню Share я воткнул по-честному.
Drupal Commerce File и одноразовые ссылки
Для продажи доступа к файлам через Drupal Commerce в целом неплохо подходит модуль Commerce File. Однако, в работе с ним есть несколько нюансов, нуждающихся в напильнике или дополнительной доработке. В данной заметке пойдет речь об одном из таких нюансов.
Дело в том, что Commerce File доступом к купленным материалам управляет на уровне зарегистрированного пользователя. То есть если пользователь авторизован — можно точно определить, купил он данный файл, или нет. А если не авторизован — нельзя. И в то же время, многие пользователи хотели бы скачать купленный файл непосредственно со страницы с сообщением «Спасибо за заказ». Ну, потому что файл куплен и нет смысла ждать каких-то там паролей на почту или заходить на страницу заказа. Но по правилам Drupal Commerce, если пользователь оформлял заказ неавторизованным, то и сообщение, завершающее заказ, он тоже видит неавторизованным.
Есть решение в виде Commerce Immediate Login (sandbox), но подходит оно не всем и не всегда. Гораздо проще, в данном случае, показать (а также прислать) пользователю одноразовую ссылку на файл, так чтоб по ней можно было скачать, не авторизуясь. Этим и займемся.
Выдернем новые сообщения из трекера
В стандартной поставке Друпала есть такой славный модуль — tracker. Славен он тем, позволяет пользователям отслеживать обновления тех материалов, которые они создали, отредактировали или прокомментировали. Материалы выводятся в таблице, в ней же отмечается, в каком из них были обновления и сколько написали новых комментариев с момента последнего посещения страницы пользователем. Удобно, в общем, особенно если материалов, с которыми взаимодействовал пользователь, достаточно много и обновляются они часто. На drupal.ru, например, автор заметки только трекером и пользуется.
А что если нам нужно узнать, есть ли в таблице-трекере новые сообщения, да так, чтобы в сам трекер не заходить? Зачем? Ну например чтобы вывести значок с сообщением. Тогда, если новостей нет — пользователь не будет терзаться, бессмысленно обновляя трекер, а если уж есть — увидит значок и зайдет.
Сделать это — можно, причем всего одним запросом в БД (хотя и не без join-ов, конечно).
Еще два модуля для Drupal Commerce
Сделали еще два модуля, обратно по заказу портала Javascript.Ru.
Drupal Commerce No Cart
Модуль перенаправляет пользователя на checkout при заказе каждого товара. Перед перенаправлением корзина очищается от предыдущих товаров.
Если заказ не был оформлен до конца, в специальный блок будет выведено предупреждение с предложением оформить заказ или удалить его.
Подробнее
Drupal Commerce Skip Payment
Модуль добавляет способ оплаты «Пропустить оплату», позволяющий оформить заказ без оплаты и сохранить его со статусом pending (в ожидании). На страницы всех заказов в этом статусе модуль добавляет кнопку «Переоформить заказ». С ее помощью пользователь сможет оформить заказ заново с другим способом оплаты.
Подробнее
Drupal Commerce — Interkassa
По заказу портала Javascritp.Ru интегрировали в Drupal Commerce платежную систему «Интеркасса».
Прочитать подробности и скачать модуль можно на сайте NetSpark.Ru.
Про вредные платежные системы
Ставил тут на один портал разные платежные системы. Для каких-то взял готовые модули, для других — написал, для третьих — переделал чужие, четвертые без меня поставили. Что их все объединяет?
Да то, что ни у одной из установленных платежных систем (русских и украинских) нет на сайте в форме оплаты кнопки или ссылки «Назад в магазин». Появляется только если ввести что-нибудь неправильно — номер кредитки там, или ID кошелька.
Эй вы, Яндекс.Деньги, Webmoney, Мастербанк, Интеркасса! Не будьте врединами, сделайте ссылку «Обратно в магазин» в дефолтной форме оплаты. Я может по ошибке вашу систему в списке выбрал — и мне нафиг не упало заводить у вас аккаунт, мне надо вернуться и выбрать то, что я хотел.
Посмотрите на PayPal — ссылка на месте, а по популярности фору вам всем вместе взятым даст. Стыдно должно быть.
Модуль User Comments
Как добавить комментарии к профилям пользователей в Drupal 7? Вопрос среди работающих с Drupal звучит довольно регулярно. Ответ на него простой: никак. Комментировать профили в Drupal 7 нельзя, так как разработчики ядра не отвязали комментарии от нод.
Но проблему (комментирование профилей) решить как-то нужно, и решение всем давно известно. Чтобы писать/выводить комментарии в профилях пользователей надо:
- Каждому профилю поставить в соответствие ноду (именно к ней пользователи будут писать комментарии). То есть при создании пользователя — должна создаваться нода. А при удалении пользователя — нода должна удаляться.
- Ноду вывести на странице профиля пользователя. Точнее, нужно вывести ту часть, которая отвечает за комментарии.
- После написания комментария желательно возвращать пользователя на страницу профиля, а не на страницу с этой нодой.
Про модуль Custom Formatters
Форматтеры полей в Drupal 7 — хороши и полезны. Благодаря форматтерам мы можем выводить данные из одного и того же поля по-разному, а благодаря Field API — создавать собственные форматтеры, когда нас не устраивают существующие. Однако есть и недостаток: чтобы сделать свой форматтер, нужно писать модуль. Но что если форматтер по сути слишком прост для отдельного модуля? Можно, например, залезть в темплейт и попробовать подправить вывод там. Но есть и другой вариант — сделать свой форматтер с помощью модуля Custom Formatters.