Задача: написать страничку — каталог ссылок для сайта на шестом Дрюпале.
Исходные данные: простой список без иерархии, отображаемые поля: название сайта, favicon, ссылка, описание сайта, скриншот, количество переходов. Список должен иметь постраничный вывод и возможность сортировки по разным полям. Все. Мой личный опыт работы с Дрюпалом довольно небольшой — около 1 месяца — но и задача выглядела на редкость тривиальной, так что особых проблем я не ждал.

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

Итак, наверняка должен быть модуль, реализующий такую простую, но часто востребованную функциональность, как каталог ссылок. Поиск по drupal.org (кстати, система поиска заслуживает отдельного упоминания — результаты выдачи сортируются по каким-то одному богу Дрюпала понятным критериям, с релевантностью нечего общего не имеющими. Например, на запрос «links» модуль с такими именем был найден только в середине второй страницы выдачи) и, позже, по Гуглу показал, что заслуживают внимания и установки всего два модуля: Links Package и Weblinks. После установки и краткого, но матерного тестирования выяснилась интересная особенность: первый модуль предоставляет почти всю необходимую функциональность, но не дружит с Views2 (модулем для модификации отображения контента — без него в Дрюпале туго), второй же наоборот — имеет интерфейс для Views, но счетчик кликов отсутствует.

Имея за плечами печальный опыт обработки напильником дрюпального мега-модуля
Location, я решил выбрать меньшее из двух зол, и попытался прикрутить к Links Package поддержку Views2, благо она сосредоточена в одном файле. Однако для такой непростой функциональности, как каталог ссылок, архитекторам модуля понадобилось применить аж 3 таблицы. В свою очередь, создатели модуля Views поленились реализовать (или реализовали, но поленились задокументировать) хоть сколько-нибудь адекватную систему подключения к Views системы связанных таблиц, так что мой блестящий план с треском провалился. Не отчаиваясь, я решил выбрать из двух зол второе, и начал копать Weblinks на предмет прикручивания счетчика кликов по сслылкам. Непродолжительное ковыряние в коде показало, что поддержка была реализована(!), но не включена. Включив ее, я понял причину — клик по ссылке отправлял на пустую страницу. Еще несколько минут поиска привели к следующей функции (нашедший ошибку получит моральное удовлетворение ;):

function weblinks_goto($nid) {
$node = node_load($nid);
$qargs = array($time(), $node->nid, $node->vid);
db_query("UPDATE {weblinks} SET click_count=click_count+1, last_click=%d WHERE nid=%d AND vid=%d", $qargs);
if (module_exists('statistics')) {
statistics_exit('node', $node->nid, '');
}
header('Location: '. $node->url);
}


Так что, после исправления ошибки и еще пары минорных правок я получил более-менее рабочий модуль с поддержой Views2.

Следующим неприятным моментом стали картинки. У меня их было две: favicon и скриншот сайта. Сайт уже некоторое время разрабатывался моим коллегой и на нем использовался модуль Image Attach. Но он позволял прикреплять к каждой ноде не более одного файла! Такое неприятное ограничение пришлось обходить довольно уродливым способом — установкой модуля ImаgeField, который, в свою очередь, является расширением для модуля CCK и добавляет к нодам дополнительное поля для загрузки изображния.

Какие можно отсюда сделать выводы:


1. Дрюпал хорош только для сайтов, под этот самый Дрюпал заточенных. Вещи, предоставляемые готовыми модулями, он и правда делает легко и быстро. Если же у вас уже есть готовое ТЗ и дизайн — сто раз подумайте прежде чем выбирать Дрюпал в качестве CMS! Любое отступление от прописанных разработчиками сайта или модуля вариантов будет стоить вам неимоверных затрат, временных и психических. И это поделие вроде как считается сеййчас лучшей CMS =)
2. К моему удивлению, не для всех часто встречающихся нужд есть готовый модуль. В моем случае, я не смог найти готовое адекватное решение, пришлось допиливать самому.
3. Модули зачастую попадаются некачественные или плохо документированные.
4. На реализацию вышеописаной функциональности на любом фреймворке или даже на чистом PHP ушло бы максимум пара часов. Это с изучением фреймворка и натягиванием дизайна. На Дрюпале пришлось потратить полтора дня (правда, часть ушла на освоение Views, но тем не менее). Такая вот получается модульность и ускорение разработки=)