Друпальчики

Импорт из CSV в OctoberCMS

В OctoberCMS из коробки есть возможность импортировать (и экспортировать) модели из csv-файлов. Как подключить импорт-экспорт к своим моделям — можно прочитать в небольшом мануале. А я пока попробовал импортировать посты прямо с домовой страницы, благо в плагине Blog импорт-экспорт уже подключен.

Выглядит это примерно вот так:

Загружаем csv-файл, устанавливаем соответствие между столбцами файла (слева) и полями модели (справа) и нажимаем «Импорт». И посты импортируются.

В процессе выгрузки из Drupal 6 (с помощью Views data export) и загрузки в October обнаружил несколько небольших проблем, которые нужно было решить перед импортом.

Quick Telecom SMS

Смастерил тут небольшой модуль, интегрирующий в Drupal 7 отправку SMS через шлюз Quick Telecom. Из коробки есть вывод баланса, форма с настройками (логин-пароль), передача на выбор по HTTP/HTTPS (все разруливается через drupal_http_request), ввод имени отправителя и периода отправки, тестовая форма для проверки.

С SMS Framework пока не интегрировал, может потом. Пользоваться просто: включаем модуль, в админке вводим логин-пароль и шлем смски функцией quicktel_sms_send($phones, $message).

На случай если кому пригодится, делюсь. Брать можно прямо с гитхаба.

EntityFieldQuery, node access и count

Допустим, есть вот такой код. Мы хотим получить количество нод заданного типа с заданными тегами, но считать только ноды, к которым есть доступ у текущего юзера (см. addTag).

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->entityCondition('bundle', 'my_node_type');
$query->propertyCondition('status', 1);
$query->fieldCondition('field_taxonomy_term', 'tid', array(1, 2, 3));
$query->addTag('node_access');
$query->count();
$result = $query->execute();

Удивительное дело, но если текущий юзер не админ и не пропускает node access, в $result количество доступных материалов не попадет. Вместо этого случится PDOException.
Причем вредит одновременное присутствие фильтра по fieldCondition() и тега node_access. Если убрать либо одно, либо другое — запрос работает.

Сделать админскую страницу не админской

Суть в том, что иногда нужно, чтобы страница, которую Drupal считает админской, считалась обычной. Зачем? Например, для того, чтобы админ видел эту страницу так же как и пользователи — в дефолтной теме оформления. Или, скажем, у вас установлен jQuery Update, для админки выбрана старая версия jQuery, а для обычных страниц — новая. Тогда обычные юзеры могут столкнуться с несовместимостью версий скриптов, например, на странице редактирования профиля. То есть страница будет отображаться в дефолтной теме, но версия jQuery будет старая, поскольку Drupal считает страницу user/*/edit — админской.

Исправить это очень просто, нужно заставить Drupal рассматривать эту страницу как не-админскую с помощью хука hook_admin_paths_alter(). Вот так:

function mymodule_admin_paths_alter(&$paths) {
  $paths['user/*/edit'] = FALSE;
}

Docker и Solr

В процессе работы регулярно использую docker. Использую не по основному назначению, а в качестве инструмента быстрой и легкой виртуализации. То есть в контейнерах у меня сайты или веб-приложения, по одному на контейнер. Сервер и БД в контейнере, код подключен через volume, чтобы можно было редактировать сразу из IDE. Как выяснилось, это довольно удобно в работе — не нужно загаживать локальное окружение всяким софтом разных версий, все можно пихнуть в соответствующий контейнер. И на нотбук перекидывать несложно. Плюс сами контейнеры запускаются почти моментально. В общем, пользуюсь регулярно.

А тут второй раз уже встала нужда поднять в локальном окружении Solr для Drupal Search API. В первый раз поднялось как-то криво и я даже забыл, как. Так что теперь делаю правильно и записываю, чтоб больше не забывать.

D-Day

Ну что ж, вышел Drupal 8 сегодня, как обещали.
Всех поздравляю и в бой!

Drupal Commerce vs Magento

А вот Commerce Guys сравнивают Drupal Commerce с Magento (угадайте, с каким выводом):

The obvious implication of this statement is that both Magento and Drupal Commerce have unique roles in the online commerce ecosystem. They are each geared towards certain types of projects and use cases. Instead of pitting each platform against each other to have a winner based on some arbitrary set of features or architecture, a better approach would be to first establish a clear understanding of customer needs. When the needs of a client are properly applied to the strengths of each platform, one will clearly meet those needs in a way that the other does not. Thus removing the need for a feature comparison.
Comparing Drupal Commerce & Magento

Модуль социальных кнопок Up to like

Сегодня мы внимательно посмотрим на модуль социальных кнопок Up to like. Модуль не так давно разработал всем известный гражданин Plazik. Он (модуль, а не Plazik) умеет интегрировать на сайт социальные иконки с сервиса Up to like и кое что еще.

Устанавливается модуль как обычно:

drush dl uptolike
drush en uptolike

Из зависимостей у модуля указан только CTools, который у вас скорее всего и так уже есть.

Пройдем на страницу админки (admin/config/system/uptolike) и посмотрим, что там:

Микросовет банальный, про Views

Держите свои вьюхи в коде. Хук hook_views_default_views() — ваш лучший друг при работе с Views. Как только представление обрело нужные очертания — в код его, в код. Это легко, приятно и помогает от головных болей.