Друпальчики
Как подружить свой тип данных с Views
При разработке модулей для Drupal мы частенько создаем программно новые типы материалов (то есть нод). В процессе иногда возникает соблазн быстренько запрограммировать вывод какой-нибудь отсортированной коллекции этих материалов. Например, вывод нод-городов, отсортированных по алфавиту, или по древности, или сгруппированных по странам. Таких полезных коллекций может образоваться достаточно много и программно создавать каждую из них — не очень эффективно. Особенно если впоследствии нам захочется что-то поменять, объединить, или переделать. Гораздо аккуратнее — использовать модуль Views.
Вообще говоря, Views — один из краеугольных камней разработки на Drupal. Хотите помесячный архив нод? Views. Хотите вывести только заголовки и даты нод? Views. Хотите вывести ноды, сгруппированные по именам авторов? Views. Хотите получить список IP, с которых пользователь Василий заходил на сайт в течение Великого поста? Тоже Views. Один из самых популярных ответов на вопрос «Как в Друпале сделать…» — Views. Так что, чем быстрее разработчик подружится с этим прекрасным модулем — тем лучше.
Однако как только разработчик захочет получить с помощью Views коллекцию созданных им данных — например, из самодельной таблицы, сделанной для нового типа материала — он обнаружит, что Views еще не знает о его таблице. Так вот, раз и навсегда рассказать о своей таблице модулю Views — на мой взгляд, гораздо более правильное решение, чем программировать вручную все необходимые представления.
О том, как это сделать — под катом.
Новые книжки про Друпал
С Друпалом я познакомился примерно пять лет назад, практически случайно. И с тех пор время от времени с переменным успехом им пользуюсь. Интересуюсь в первую очередь технической стороной — программированием и разработкой модулей, установкой и настройкой всего в единое целое и всяким таким. Дизайнами интересуюсь меньше, так как до сих пор не обнаружил в себе на этот счет выдающихся способностей.
Так или иначе, все это время обучал себя сам. Поиск, рассылки, статьи, поиск, описания API, снова поиск, исходники и так далее. В общем-то, обычное дело, многие так обучаются. Однако, в подобном подходе отсутствует важная вещь — полнота и системность получаемых знаний. В результате можно изучить «до дыр» устройство той или иной части ядра, но при этом, к примеру, вообще ничего не знать про что-нибудь очевидное и важное, вроде CCK или Views.
Единственный известный мне способ устранения этого недостатка — вдумчивое чтение хороших книг на тему. Тем более, что какой-то уровень понимания уже есть, так что для усвоения новых систематизированных знаний подготовлена база. В общем, решил я приблизиться к друпальному просветлению с помощью книг. Заказал сразу две на Books.Ru. Сегодня пришли, свеженькие.

Та, что слева — издание 2009 года, известный труд Джона Вандюка. В нем подробно рассмотрены вопросы внутреннего устройства Друпала и программирования под него. А справа — новая книга «Drupal: создание и управление сайтом» 2010 года. В ней, напротив, Друпал рассматривается со стороны настройки набора модулей для разных целей и приводятся примеры практической реализации популярных use-case (интернет-магазин, wiki и т.п.). Так что книжки, по идее, должны неплохо друг друга дополнять.
Буду просветляться.
А поеду-ка я на Друпалкэмп
В апреле под Москвой состоится конференция любителей Drupal под названием DrupalCamp. Принял решение посетить. Так сказать, предаться беспробудному пьянству и безобразию на людей посмотреть и себя показать.
Так-то уже два года на конференции не ходил. Но про Друпал охота посмотреть и послушать. Надо ехать.
Первый выпуск журнала «Друпалогия»
Чуть не забыл отметить. Еще вчера вечером, ближе к полуночи, вышел первый (нулевой) номер русскоязычного журнала «Друпалогия», посвященного, естественно, CMF Drupal. Скачать журнал можно в пригодном для распечатывания формате PDF с сайта: http://magazine.drupalogy.ru/magazine/00. Статьи интересные, любознательным — рекомендую.
Ваш покорный слуга отметился в этом журнале заметкой «Сохранение формы в Drupal с помощью AJAX», которая когда-то была опубликована и на домовой странице.
Параметрический вызов формы добавления нода на разных страницах
Предположим, мы создали модуль и в нем определили новый тип нода. Пусть это будет нод «Город» с внутренним именем 'city'. В форме добавления нашего нода с адреса 'node/add/city', кроме всего прочего, мы сделаем селектор стран, чтобы можно было выбирать, в какой стране находится город:
Теперь предположим, что мы создали страницы с описаниями разных стран. И хотим чтобы пользователь мог добавить город не через меню «Создать материал» — «Город», а со страницы с описанием страны. Что логично: вот пользователь смотрит на страницу «Россия» и сразу хочет добавить свой родной город.
Первое, что мы можем по этому поводу сделать — это разместить ссылку на 'node/add/city'. Но в таком случае пользователю придется в форме добавления города выбирать страну из списка, а ведь он уже сделал этот выбор, нажав «Добавить город» именно на странице с описанием нужной страны. Очевидно, следует учесть выбор пользователя и при создании формы установить заданную страну как дефолтную в списке 'countries'.
О том, какой фокус для этого надо проделать — под катом.
Друпал выиграл Грэмми
Луллабот докладывает, что сайт музыкальной премии Американской академии звукозаписи Grammy.com теперь работает на Drupal.
Сайт сделан силами того же Луллабота, использованные в разработке модули и прочие средства упомянуты в оригинальной заметке. Выглядит круто. Поздравляем Друпал с очередным трофеем!
OpenID в Друпале
Пару дней назад подключил OpenID, чтобы пользователи могли заходить с его помощью на домовую страницу. Для этих целей взял модуль openid, добавляющий соответствующий функционал в форму регистрации. Пользователь вводит свой OpenID и модуль автоматически регистрирует его на сайте с данными, полученными от указанного сервера.
Модуль этот включен в стандартную поставку Drupal. Тем не менее, не все с ним так просто. Для начала выяснилось, что не со всеми серверами модуль openid согласен работать. Например, решительно отказывается воспринимать аккаунты Блоггера. Пришлось изрядно покопаться, прежде чем нашелся патч. Затем возникли проблемы с редиректами с указанной пользователем страницы на другой OpenID. Полез в код модуля. Выяснилось, что парсер страницы, указанной в качестве OpenID, парсит плохо и теги, содержащие
А под конец оказалось, что нигде нет модуля, позволяющего впихнуть поле OpenID в форму анонимных комментариев, чтобы по-быстрому регистрировать анонимов без отрыва от комментирования. В общем, сделать чтобы было совсем как у людей — пока не получается. Но все равно удобнее, чем раньше.
В изощренном тестировании установленного модуля openid непосредственное участие принял GineR, за что ему большое спасибо.
Drupal, openSUSE и PHP 5.3
Как уже многим известно, использование Drupal с PHP 5.3 влечет серьезную головную боль в виде неработающих модулей, постоянных warning-ов и ошибок в отчетах, необходимости патчить код тут и там и, соответственно, отслеживать каждый патч при обновлении. В общем, ничего хорошего.
Но в команде openSUSE явно собрались новаторы — из репозиториев openSUSE 11.2 можно установить только PHP 5.3. В результате разрабатывать что-либо под Drupal на локалхосте openSUSE 11.2 практически невозможно. Но мир не без добрых людей. Badzilla написал подробное руководство, по которому легко скатиться до PHP 5.2. Проверял — работает отлично.
Краткий перевод порядка действий:
- Снести в yast все установленные пакеты php (не забудьте сохранить список).
- Отключить все репозитории openSUSE 11.2.
- Включить репозиторий http://download.opensuse.org/update/11.1/
- Установить с него пакеты php из списка, сохраненного на шаге 1.
- Вернуть право executable для /usr/lib/apache2/mod_php5.so.
- Добавить модуль в список запускаемых модулей апачи в /etc/sysconfig/apache2.
- Задать mysql.default_socket и mysqli.default_socket равными /var/run/mysql/mysql.sock в /etc/php5/apache2/php.ini.
- Перезапустить апач.
- Отключить репозиторий, включенный на шаге 3, восстановить репозитории, отключенные на шаге 2.
Спасибо, Badzilla.
Про форму комментариев
Поработал немного над формой комментариев домовой страницы. Старая была жутко уродливая, начиная с того, что все поля (имя, мейл, сайт, текст, подсказки, капча…) не влезали в один экран браузера. Кошмар был, в общем. Поработал с template.php темки, стало аккуратнее, все лишнее спрятано в схлопывающиеся блоки. Подробно расписывать смысла нет, процесс темизации формы комментариев в Друпале отлично описал neochief в заметке «Человеческая форма комментариев». Там, правда, про Друпал 5 в основном, но в шестом практически то же самое.
По окончании настройки формы комментариев заметил, что теперь все портит CAPCHA — некрасивая, занимает много места, заставляет людей думать о ненужных вещах. Взял модуль «Скрытая капча», тот который с изображениями. Давно хотел его поставить, а тут под руку попался как раз. Ну и поставил, работает. Теперь и капча не пугает никого своим видом, и форма для комментариев много места не занимает.
Доволен.
Про Drupal 7
Вышла небольшая презентация о том, чего хорошего будет в Drupal 7 с точки зрения конечного пользователя. Например, пользователь получит, наконец, поддержку автоматических апгрейдов (ура, ура). И много чего еще. Автору презентации, Дейви Ван Ден Бремту, честь за нее и хвала.
