Сложен в изучении
Высокая нагрузка на БД
Безграмотная структура
Отсутствие ООП
Странный кэш
Несовместимость модулей
Трудоёмкая кастомизация
В принципе дальше можно не читать, так как будет то же самое, но подробно.
Предыстория
Прошло три месяца с того момента, как я начал изучать Drupal. В процессе изучения я прочитал книги «Building Powerful and Robust Applications with Drupal 6», «Learning Drupal 6 module development» и «Pro Drupal Development. 2nd Edition», также во время пользования часто приходилось обращаться к документации Drupal'а и его API. Где-то в конце сентября я прочитал лекцию «Drupal» на веб-семинаре в родном университете, где рассказал о том, что такое Drupal, что он может и что я уже научился в нём делать.
Во-многих источниках я натыкался на фразы и диаграммы, суть которых сводилась к тому, что вот ещё чуть-чуть и Drupal станет ну просто идеальным средством для разработки… Не дождался, задолбало!
Базовые проблемы
Уже когда я читал доклад на семинаре, я выделил пару проблем Drupal'а, о которых пишут и говорят многие, это: сложность изучения и высокая нагрузка на базу данных. На моём докладе присутствовал человек, который уже успел до этого с ним повозиться около года и невзлюбить очень сильно. Он сказал, что нагрузка на базу данных чуть ли не самый худший параметр Drupal'а, в котором он проигрывает практически всем. А все красивые числа о большом количестве пользователей преувеличены, реально же Drupal может держать не более 1000 посетителей в день. На моё замечание по поводу drupal.org он лишь посмеялся, сказав, что в drupal.org уже столько патчей напичкано, что от drupal'а в нём только название то и осталось.
Но мне предстояло закончить проект на Drupal'е и поэтому пришлось продолжить трепыхания. По мере углубления я стал замечать, что проблем в Drupal'е гораздо больше, чем мне казалось тогда, когда я делал доклад. Первой и самой порой выводящей из колеи стал Drupal'овский кэш. Я так и не понял как он работает. К примеру, я изменяю функцию в модуле, и она может выполниться, а может и не выполниться. Это всё при том, что все доступные из админского интерфейса настройки кэша были выключены. Ещё хуже ситуация обстоит с добавлением и удалением функций в модуль. Если при добавлении ещё иногда достаточно просто обновить «любимый» кэш, то вот при удалении какой-нибудь функции порой выскакивает fatal error. Лечить его получается далеко не всегда, а зачастую приходится уже ручками удалять все данные кэша из базы данных.
Забегая вперёд скажу, что в Симфони, который я сейчас изучаю, этой проблемы не существует. В нём есть Environment'ы (по-русски наверное это будет «окружения», но возможно официально переводится не так, поправьте, если что!), грубо говоря каждое окружение — это определённая конфигурация сайта. По-умолчанию, имеются окружения dev и prod (есть ещё и test, если что) соответственно development и production (т.е окружения для разработки и при релизе). В dev'е почти все кэширования отключены, и не нужно лишний раз рвать на себе волосы, пытаясь угадать что произошло: синтаксическая ошибка или кэш не обновился.
Отступление, имеющее место: Вообще, наверное, ни сказанное выше, ни сказанное ниже не может быть единственно верной истиной. Негатив с Drupal'ом в моём случае связан ещё и с некоторыми сопутствовавшими его изучению факторами: я стал изучать Drupal 6, по которому в настоящий момент написано мало книг, а часть документации пишется исходя из того, что ты уже знаком с Drupal 5; я не доизучал книги до конца, т.к. внезапно навалился проект, и стало не до углубленного ковыряния.
Вторая проблема Drupal'а — это кастомизация шаблонов. Мне она представлялась такой: даётся набор переменных, которые нужно вставить в соответствующие места в вёрстке. Но это оказалось не совсем так. Во-первых, каждый модуль Drupal'а умеет и отдаёт свой html код, который зачастую меня не устраивает. Несмотря на то, что в Drupal'е есть так называемые функции темизации (т.е возможности перегрузки стандартного вывода), не всегда так просто докопаться до них, потому что во-вторых, иногда к моменту запуска конечной функции (т.е функции, которая отдаёт содержимое) часть html'а уже сидит в переменных. Ну и в-третьих, где это видано, чтобы html отдавался из функции? В итоге получается абсолютно нечитабельный код.
Отдельное слово стоит сказать о модулях в Drupal. У стандартного модуля структура такая:
module_name.info (тут хранится инфа о модуле)
module_name.install (тут хранится инфа как ставить модуль)
module_name.module (тут хранится код модуля; ВЕСЬ!)
Размер файла module_name.module колеблется в диапазоне от 1 до 109 (в моём случае) килобайт. В случае самого страшного и огромного файла это 3000 строчек кода. Возможно ли читать и/или управлять таким кодом? И такая структура принята стандартом для данной CMF'ки.
Копнём глубже
Это лишь начало тех проблем, которые подстерегали меня на пути работы с Drupal'ом. Следующей проблемой стала несовместимость модулей. Понятно, что ожидать совместимости от модулей, которые написаны пионерами и нерекомендованы сообществом не стоит. Но я ставил вполне отработавшие и зарекомендовавшие себя модули:
Devel — набор полезностей для разработчиков (Devel от Development), в частности внедряет в менюшку кнопку очистки кэша (см. выше зачем это нужно)
FCKeditor — WYSIWYG редактор
TinyMCE — ещё один WYSIWYG редактор, зачем мне их два читайте ниже
Localization Client — удобный Ajax-клиент для локализации интерфейса, т.к нормального перевода на русский у Drupal'а нет
Ubercart — интернет-магазин
Первая несовместимость выявилась между FCKeditor и Localization Client. Если на странице было две и более textarea, в которые нужно вставить редактор, то страница начинала капризничать и отказывалась сохраняться. Ну хорошо, поставил TinyMCE, но при всей моей любви к этому редактору я так и не смог заставить его работать в части администрирования сайта. Потому что настраивается он не так как FCKeditor. Для того чтобы включить TinyMCE нужно указать путь страницы, на которой редактор будет виден. А FCKeditor настраивается по id'шникам textarea. В итоге в одной части у меня FCK, а в другой TinyMCE. К сожалению TinyMCE пришлось ещё и оставить потому, что модуль для вставки картинок, который умеет их ресайзить (Imagepicker) работает только с ним.
Devel, который все очень любят, также в последствии вывалил наружу ещё и несовместимость с Ubercart, убивая весь проект на странице категорий каталога Интернет-магазина.
Drupal не для разработчиков
Окончательно уйти от использования Drupal я решил познакомившись с Symfony. Будучи разработчиком, который любит творить, в Drupal'е большую часть времени я пытался закрутить болты велосипеда, чтобы у него крутилось третье колесо, а цепочка была из платины. Также мне очень не нравится, что несмотря на то, что версия 6 была выпущена в этом году в ней даже не пахнет ООП. Разработчики объясняют это очень просто, буквально говоря следующее:
«Да, в Drupal'е нет ООП, но многие его принципы были реализованы нами, и в принципе вы будете себя свободно чувствовать». Но разница всё-таки сильно ощутима. Иначе зачем нужно было бы пользоваться калькулятором, ведь счёты давно уже изобретены!
Но не всё так плохо
Практика показывает, что у медали две стороны. Если бы всё было так плохо, то никто бы такой плохой штукой как Drupal и не пользовался бы, а ведь пользуются. Drupal неплохо подходит для тех, кому нужно очень быстро развернуть мощный ресурс, типа Хабры (смотрите пример Швабрашвабра) в кратчайшие сроки, при этом не сильно заморачиваясь с кастомизацией и своими фичами. Но нужно быть готовым, что выходя за границы функций используемых модулей вы столкнётесь с проблемами, часть из которых я описал выше.
Эта статья является личным мнением автора по поводу CMF Drupal, а также подытоживанием опыта работы с ним. Не пинайте, если кого обидел
Статья взята с http://habrahabr.ru/blogs/drupal/44980/
Комментарии
хорош постить байаны
Valeratal Чего баяны? Вполне тематическая статья на сегодняшний день.
какой тайный смысл в этом [:|||||||||||||||||:] ?
Роман, эту статью уже обсудили
примерно тогда же, когда она была на хабре опубликована
у меня только маленький вопрос возник... и нафига сей автор взялся за проект не зная матчасть?
Мой вывод, статья хоть и имеет интересные моменты (а именно перечень пунктов с которыми сталкивается новичек девелопер друпала), но в целом сугубое имхо и крик о неспособности адекватно реагировать. Ненравится не трожь, юзай симфонию, дримвювер и ворд.
ну и комент по hook_menu
- используйте file для разбивания по файлам обработку меню.
пиарится
Достали баяны
Roman Harlamov, если вас так вдохновила сия статья, то быть может, вы напишете свою на ту же тему? Мне кажется, Вы вполне с этим справитесь
повтор.
я сначала думал что это один идиот написал
но оказалось один идиот написал, другой копирует зачем-то
По всем описанным пунктам есть что опровергнуть и автор даун судя по всему
Было давно на хабре это
Народ, ну че вам не нравится? Вверху жеж нарисовано:
Главная → Блоги → Блог пользователя Roman Harlamov.
Человек может себе скопировал на память?
ну и скопировал бы себе на хабре
Трекер у нас пока общий