Вредные советы по использованию Drupal

"Зачинается рассказ от Друпаловых проказ...". Почти Ершов.
Пришлось как-то раз работать над сайтом. И был тот сайт на Drupal — на "шестёрке" тогда еще. А еще было у того сайта главное меню, дизайн которого весьма отличался от стандартного. В связи с чем вывод того меню был, как и полагается, темизирован путём переопределения функции theme_menu_tree(). Называлась переопределенная функция ну, скажем, custom_menu_tree().

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

Ладно, поможем, что ж не помочь?.. Глянул на сайт, а главного меню — как не бывало.  Начинаю исследование кода — и не вижу переопределенной функции темизации меню. Нет ее, как корова языком слизала. Также оказалось, что ядро Друпала на сайте обновлено было в связи с выходом очередного апдейта.

С трудом, но удалось найти предыдущую копию сайта, забекапили ее перед апдейтом — и то ладно. Функцией темизации меню custom_menu_tree() там уже давно не пахло, но то, что я увидел в menu.inc, повергло в шок надолго. Базовая функция theme_menu_tree() была просто изуродована до неузноваемости, вернее — до полной непохожести на свой изначальный вариант. Весь вывод темы главного меню был перенесён туда.

Don't hack, use hook (Не занимайся правками кода, используй хуки) — один из основополагающих принципов построения web-сервисов на Drupal. Зачем надо было уродовать ядро, для того, чтобы переопределить вывод, когда есть механизм хуков, сие нам не ведомо.

Собственно, это всё — лишь отдельный пример того, как создать дополнительные трудности при совместной разработке. Иначе говоря — поднасрать напакостить.

Итак, тема сегодняшнего урока — мелкая пакость. Пакостить будем по-нашему, по-программистски, по друпалеровски.
Что должен знать и уметь настоящий мелкий пакостник:

  • Как было показано, в Drupal не существует ни хуков, ни функций темизации. Все исправления вносятся прямо в ядро или в код contributed modules;
  • Все наши пакости исправления оставляем неоткомментированными. Никаких блочных или строковых комментариев, вы о чём?
  • Напрочь забываем о системе контроля версий — всё сваливаем в общую файлопомойку; никакой истории изменений. SVN, Git — для слабых духом;
  • Drupal coding standards придумали бюрократы. Нечитабельный код — наше всё;
  • При проверке кода при помощи Sniffer нужно, чтобы список ошибок и предупреждений был как можно длиннее. Мы не технари-сухари, мы творческие люди, мы так видим;
  • Начиная с версии 7 практикуем новый вид пакости — прямой вызов функций темизации. Какие Render Arrays, нужно внести исправление в тему — правь код функции темизации напрямую, еще не хватало настоящим творческим личностям в этих решётчатых массивах разбираться;
  • Темизации шаблоном не существует. Если и приходится делать файл шаблона а не писать функцию темизации — вместо простой линейной структуры кода вывода темы вытащим в него всю функциональную логику с кучей циклов, ветвлений и прочим — нехай дизайнер сам разбирается, куда ему в этой чехарде HTML вставлять.

Ну, на сегодня хватит. Продолжим в следующий раз. Ибо возможностей для творчества в этом направлении — великое множество, обо всех за один раз не расскажешь.