Телевизоры

Телевизоры

Ходил тут по магазинам — все практически так, да. Телевизоры у меня, правда, уже есть. Но на всякий случай купил новый комп!

CasperJS и Drupal

На днях разбирался в прогрессивной (кто-то даже говорит — хипстерской) библиотеке front-end-тестирования CasperJS. В результате родилась заметка о предмете. Заметка получилась немножко длинной, не обессудьте: как говорится, я написал длинное письмо, потому что не было времени написать короткое.

Если тезисно, в заметке рассматриваются следующие вопросы:

  • что такое CasperJS;
  • как установить библиотеку;
  • как выглядит примитивный скрипт;
  • важная особенность — casper.evaluate();
  • CasperJS foundation для Drupal;
  • пример тестового скрипта checkout.js: цепочка действий от «товар в корзине» до «заказ оформлен».

Комментарии, дополнения и дискуссии (особенно на тему «нужны ли вообще тесты») — приветствуются.

Прочитать заметку можно на NetSpark.Ru: Front-end тестирование с помощью CapserJS.

Монастырь Монсеррат и Фигерас

На следующий же день отправились в самый длинный заезд. По плану мы должны были посмотреть монастырь Монсеррат (120 км от Салоу), затем заглянуть в музей Сальвадора Дали в Фигерасе (еще 170 км монастыря) и вернуться обратно. Получилось не совсем по плану (то есть, получилось лучше).

Баг пагинации во Views 2

В процессе доработки Cotranslate.Net столкнулся с любопытным багом пагинации во Views 2 (Drupal 6 т.е.), с которым раньше как-то не встречался.

Воспроизводится он так:

1. Делаем модуль, в нем создаем новую таблицу истории (лога) с разными записями о том, что происходило с материалом.
2. Дружим эту таблицу с Views. Поскольку данные таблицы актуальны только для материалов, делаем ее не базовой, а просто join-им с {node}.
3. Создаем представление на базе материалов, в котором выводим поля из таблицы истории, в представление добавляем пагинацию (хоть полную, хоть мини — не важно).
4. Пока выводятся записи для всех материалов, все нормально, пагер появляется и работает.
5. Теперь добавим в таблицу аргумент, либо просто фильтр по nid (чтобы вывести историю только для заданного материала).
6. Profit Пагер немедленно пропадает. Причем не только из вывода — даже в SQL-запросе представления нет никаких его следов. И без разницы как выводить: блоком, аттачем, страницей, программно — пагера все равно нет.

Видимо, Views 2 считает, что если базовое значение (материал) — одно, то и строить пагер незачем. Самый простой (и примененный мной) выход — интегрировать таблицу истории как базовую и построить вьюху относительно этой таблицы, с присоединением материала через relationship. Тогда работает.

Интересно, есть ли такой баг во Views 3? На уровне работы с полями и entityreference — не воспроизводится.

Drupal 8, привет

Пока работа, и проекты, суд да дело, времени ни на что не остается. Ни заметку на домовую страницу накатать, ни что-нибудь новенькое потыркать. А ведь хочется. Ну хотя бы Drupal 8 изнутри потыркать, а не только почитать про. И лучше бы заранее, а не через полгода после выхода, как в прошлый раз.
Сейчас вроде чуть-чуть посвободнее стало: несколько минут в день можно найти. Сделал над собой усилие — приступил:

О результатах сообщу.

Микросовет — абсолютные урлы

Как правило, фраза «Я сейчас вставлю в блок иконки с абсолютными путями, а на рабочем домене когда-нибудь потом вспомню и поменяю» истинна только на первую половину.
Следует об этом помнить.

Интерстеллар

Интерстеллар, конечно, ничего, да. Но вот что мне не ясно.
Осторожно, далее спойлеры

Вид из Сити

Вид из Сити

В прошлом году разжились фотоаппаратом, на радостях засняли с набережной Сити.
А в прошлые выходные удалось пробраться в Сити и заснять сверху эту набережную.

Продолжаем тренироваться.

User login block на продвинутых костылях

Как известно, всеми любимый блок логина в Друпале не появляется на страницах регистрации и восстановления пароля (user/register и user/password соотвественно). Объясняется это бессмысленное, на мой взгляд, ограничение обычным usability. В коде user.module, в котором оно реализовано, так и написано:

// For usability's sake, avoid showing two login forms on one page.
if (!$user->uid && !(arg(0) == 'user' && !is_numeric(arg(1)))) {
  $block['subject'] = t('User login');
  $block['content'] = drupal_get_form('user_login_block');
}

(это функция user_block_view)
Написано, правда, про то что не надо показывать две формы логина на одной странице, но паровозом к этому цепляется и регистрация с восстановлением.

А что если бы мы хотели избавиться от ограничения? Придется добавить немного костылей.

Противникам патчей ядра дальше читать не нужно.

Cotranslate.Net ожил

Совершенно внезапно вчера увидел, что на Cotranslate.Net просто валом повалили люди — впервые за уже более чем три года. Установить причину было нетрудно: оказалось, на днях закрылся известный ресурс notabenoid.com, люди просто пошли туда, куда смогли пойти. Вот так просто — за один день аудитория из почти никого выросла во много раз. И теперь, получается, улучшать сайт надо, развивать, и все такое. Осталось только вспомнить, как я все это под D6 делал :)

Необычные настали времена.