Пользовательские изображения и user_save()

Делаем тут всякое социальное для одного нового сайта. Включили, конечно, юзерпики — стандартные которые, из коробки.
Потом понадобилось прикрутить сохранение некоторых пользовательских полей через отдельные формы, еще автогенерацию юзернейма, ну и всякое такое. А потом — раз, и картинки у юзеров сбросились на дефолтные. А потом — раз, и опять.
Непродолжительное тестирование показало, что абсолютно любые обращения к user_save() не через стандартную форму редактирования профиля (которая user/%/edit) влекут скоропостижное исчезновение юзерпика данного пользователя.

Непродолжительное гугление показало, что проблеме, оказывается, сто лет в обед — а я и не знал. Аж с беты семерки еще существует. Учитывая, что предложенное решение занимает три строчки, к выходу Drupal 8 уж можно закоммитить-то.

Drupal и i18n

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

Перевод полей-списков
Вот сделал я поле чекбоксов, состоящее из вариантов «Вариант А», «Вариант Б», «Вариант В». Перевел на другие языки — в настройках поля есть такая возможность. Насоздавал материалов, и эти материалы тоже перевел на другие языки. Захожу теперь посмотреть переводы, и что бы вы думали — все перевелось? Да фиг там. Во всех языках так и будет — «Вариант А», «Вариант Б» и «Вариант В». Почему? А оказывается потому что нужно было в настройках отображения ноды (manage display которые) в колонке формата для этого поля вместо Default указать Default translated! Почему? Почему, [censored]?! Я, [censored], специально перевел все варианты — ну конечно же я хочу, чтобы выводился перевод. Для чего эта настройка? Есть масса желающих перевести опции списка, но выводить их непереведенными?

Перевод exposed-фильтра Views
А теперь я хочу пофильтровать представление по этому же полю. Добавляю exposed-фильтр, и разумеется все варианты в селекте выводятся без переводов. Уже не удивляемся, идем разбираться. Оказывается, во вьюзах при выборе фильтра нужно выбирать то же самое поле, но с припиской translated. Зачем, почему? Что, есть люди, которые специально хотят выводить селект-бокс с непереведенными вариантами? Ну, пускай они даже есть. Их что, очень много, больше чем всех остальных? Может быть, надо наоборот — для этих людей сделать отдельное поле с припиской untranslated?

Перевод перезаписанного вывода Views
Оказывается, перезаписанный вывод поля (тот который rewrite results) — тоже подлежит переводу. В отличие от предыдущих пунктов, это полностью логично: мы могли напихать туда текста для связи полей, вполне резонно, что этот текст надо перевести.
Но, блин, когда в поле есть только несколько токенов для объединенного вывода полей, да может еще пара дивов — не сразу и допрешь, почему во вьюхе на русском отображаются все 15 полей, а на английском — только три.

На Школьном озере

Сходили прогуляться на Школьное озеро. На волейбольной площадке внезапно в боччу играют, а вокруг — снег.

А в озере уже утки плавают.

И вообще, погода хорошая, хоть и холодно.

Из окна


Продолжаю упражняться с новой техникой.

Греция на пару дней в 2012


— Boy, them Greeks and those twisted-ass names.
— Man, lay off the Greeks. They invented civilization.
— Yeah? Ass-fucking, too.
© The Wire

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

Views и код языка

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

Попытка сконструировать ссылку вручную в виде /[language]/node/[nid]/edit показала: оказывается во вьюзе поле языка материала может выводить только полное название языка: «Русский», «Английский» и т.п. А надо-то langcode, то есть 'ru' и 'en'.

Вполне естественно, что я не первый обнаружил проблему. Патч уже существует и работает. Нужно только удалить поле языка из вьюхи и добавить заново, чтобы проинициализировался параметр отображения языка.

Рынок труда веб-разработчиков

В рамках исследования был проведен анализ почти 400 анкет представителей компаний из сегмента веб-разработок, а также проведен мониторинг популярности вакансий на крупных порталах по трудоустройству.
Мы уже не первый год регулярно слышим от менеджеров и директоров вопрос: «где взять программистов?». Поэтому мы решили взяться за дело и приступить к решению этого вопроса. Для начала нам пришлось разобраться, какие вообще программисты нужны — и в каких количествах — именно для этого мы запустили открытый опрос в ноябре 2013 года.
Методика проведения исследования: онлайн-анкетирование представителей компаний из сегмента веб-разработок, собственный анализ профильных открытых вакансий на крупных порталах по трудоустройству.
По итогам четырех месяцев исследования, разбавленных месяцем новогодних каникул и месяцем олимпиады, мы, наконец-то, публикуем результаты.
Исследование рынка труда веб-разработчиков

Про деньги конечно мало написано. Но познавательно.

Сочи-2014

Многие ли этого ожидали?

Ура! Слава России!

Гитарист с огнеметом

Захар Прилепин про русский рок и культуру вообще:

Глупо спорить, имели место неразумные запреты и полузапреты, хотя не «советский террор», конечно, о котором с видом бывалого зэка сообщает автор. Градский выступал на стадионах, «Машина времени» в 1980 вошла в официальную организацию Москонцерт, в Ленинграде был создан Ленинградский рок-клуб — вполне легальная площадка, Борис Гребенщиков впервые появился на телевидении в 1982 году, а в 1984 году с участием группы «Аквариум» уже делали программу «Музыкальный ринг». Спустя два года начали один за другим выходить — миллионными тиражами! - диски-гиганты всех советских рок-музыкантов на советской фирме «Мелодия».
Гитарист с огнеметом

Микросовет — Поля-селекты и удаление лишних опций

Иногда мы сталкиваемся с необходимостью удалить часть вариантов из select-поля (или из радиокнопок, или из чекбоксов), а Друпал нам не разрешает, поскольку эти варианты где-то используются. Намекает то есть, что нужно сначала изменить контент, где эти значения есть — а потом удалять. Для нод это, в принципе, логично, но для других сущностей — раздражает. Например, добавили мы поле «Пункты самовывоза» к оформлению заказа в Drupal Commerce. А один пункт возьми и закройся — это ж надо все старые заказы проверить и подтереть, чтобы удалить соответствующую опцию. Если такое бывает часто — это раздражает.

Есть довольно очевидное решение для таких случаев: вместо поля-списка можно использовать поле-ссылку на термин таксономии. Создать словарик пунктов — и выбирать из них. Правда, поле-список позволяет для вариантов радиокнопок/чекбоксов выводить HTML. Но то же самое позволяет сделать и модуль Taxonomy Term Reference Tree Widget, да еще и токены поддерживает. И вьюзом позволяет варианты отфильтровать.