Почему я не люблю Joomla

    Недавно у меня с товарищем разгорелась дискуссия по поводу целесообразности использования Joomla, в процессе которой мне удалось устаканить все свои мысли по поводу данной довольно популярной CMS. Этими мыслями я и хочу с вами поделиться.

    Во-первых, хочу сказать что я не очень категоричен. Joomla прекрасно справляется со своим предназначением – это отличная бесплатная CMS, на которой можно построить 90% сайтов средней посещаемости в наиболее короткий срок. У Joomla отличное комьюнити, огромное количество компонентов, поддержка многоязычности и куча других плюшек.

    Однако у такого комбайна есть довольно большое количество минусов, которые часто уходят корнями в архитектурные особенности самой системы (эти минусы исправить довольно сложно) или в реализацию каких-то конкретных задач (эти минусы исправить легко). Данную статью можно рассматривать как призыв к разработчикам компонентов и разработчикам самой Joomla улучшить многие моменты в ней. Надеюсь, к 4 версии данной CMS эти минусы будут исправлены.

    1. Общие проблемы

    Большой минус Joomla, о котором часто говорят разработчики сайтов — скорость её работы. При генерации простого блога «из коробки» на одну страницу используется до 100 запросов к БД. Конечно, имеется поддержка кеширования, что отчасти решает ситуацию с производительностью, но, во-первых, не все компоненты её используют, а во-вторых, сейчас не так уж и просто найти хостинг с поддержкой memcached. Конечно, скорость генерации страницы в Joomla на хорошем хостинге, при правильной вёрстке и хороших компонентах — не критичны. Но для проектов средней нагруженности (десятки тысяч посещений в сутки) или для сайтов на слабых дешёвых хостингах Joomla не подходит, ну а вопрос высоконагруженных сайтов — тема отдельного цикла статей.

    Реальная проблема — дубли страниц. Дубли страниц в Joomla есть везде: нет канонического URL для компонентов, часто возникают глюки при пагинации. Поскольку дубли страниц негативно влияют на SEO, то проблемы с дублями приходится решать при помощью костылей.

    2. Роутеры и меню

    Сервисное меню в Joomla

    Не знаю, что курили разработчики, когда структуру меню взяли за основу роутера и мультиязычности в Joomla, однако так уже сложилось исторически и поменять это не так уж и просто. Меню в Joomla – в первую очередь структурный элемент, а уже потом – элемент на сайте (для того чтобы меню отображалось на сайте, кроме самого меню, необходимо создать модуль меню). Эта особенность навязывает своеобразный стиль разработки сайтов.

    Я видел многих программистов, которые бились головой об стену, пытаясь угадать мысли разработчиков Joomla, создавая мультиязычный сайт. Для, к примеру, сайта на трёх языках вам придётся создать:

    • Сервисное меню, ссылающееся на главную страницу без языков (меню со звёздочкой). При чём, данное меню никакой смысловой нагрузки не несёт, но без него Joomla работать отказывается.
    • По одному меню (в нашем случае — 3 штуки) с главной страницей на различных языках. В последнее время я использую «сервисное меню» (меню без модуля) для таких целей, в которого помещаю ещё и структуру сайта. Очень удобно для создания графической (HTML) карты сайта.
    • Если вы хотите создать карту сайта (XML карту сайта желательно создавать для ускорения индексации сайта), то вам придётся создать ещё одно сервисное меню для страниц, которые вы хотите исключить из карты сайта (например, форму входа на сайт или страницу «спасибо за заявку» или любые другие сервисные страницы). Поскольку мультиязычность в Joomla навязывает огромное количество пунктов меню, то удобнее создавать по одному такому меню для каждого языка.
    • Ну и уже в последнюю очередь, вам придётся создавать меню для каждого «графического» меню на сайте. Часто их бывает 3,4,5 и более штук (1-2 меню в хеадере, всякие меню в футере и другие). По причинам, описанным ниже (см. мультичзычность) приходится создавать по одному меню (не пункту меню, а меню) для каждого языка.

    Итого, для простого сайта на трёх языках и двумя (!) меню на сайте мы имеем: 1+3+3+3+3 = 13 меню в админке и много геммороя.

    Моё предложение разработчикам самой CMS: люди, называйте вещи по-человечески. Систему и структуру меню разделите на 2 вещи: структуру сайта и, собственно, меню, поскольку и так их приходится разделять.

    Кроме того, то ли роутер, то ли меню в Joomla часто поглюкивают и в результате половина ссылок может выглядеть нормально (/about, /contacts и т.п.), а половина в виде длинных непонятных ссылок вида:

    /index.php?option=com_content&view=article&id=14&Itemid=30

    Или так:

    /components/com_content/?view=article&id=14&Itemid=30

    Обычно JRoute работает нормально для компонентов, а для модулей – через раз. Зависимости я не нашел, наверное, играет роль порядок загрузки модулей меню и остальных модулей. Думаю, эти глюки можно легко поправить, однако пока приходится ставить «костыли».

    3. Мультиязычность

    Мультиязычность в Joomla (2.5 и 3.0) сделана не очень удобно: для каждой сущности (статья, категория, пункт меню и т.п.) приходится создавать дубли для каждого языка.

    Следствие такой архитектурной недоделки – не работает переключение языков (и связки rel="alternate" hreflang="x"). Можно, конечно, связать между собой пункты меню, однако такой приём работает только для пунктов меню. Статьи между собой связать нельзя, категории связать нельзя, товары в магазине связать нельзя и т.п. Кроме того, приходится создавать 100500 пунктов меню и связывать их между собой, что довольно напрягает.

    Совет разработчикам: в БД создавать таблицы сущностей и таблицы переводов. Кроме решения вышеописанных проблем, данный подход позволит упростить добавление статей, категорий и всего остального.

    4. Компоненты и модули

    Стоит отдать должное разработчикам самой CMS. Те компоненты, которые поставляются «из коробки» написаны на порядок лучше, чем компоненты сторонние. Однако ложка дёгтя есть и тут: компоненты и модули не используют библиотеки и все запросы к базе и кешу происходят прямо в моделях компонентов и файлах модулей. Следовательно, при наличии нескольких модулей на странице, одни и те же запросы вызываются по нескольку раз. Это – то, что можно было бы оптимизировать, не меняя общей концепции.

    Также нельзя вывести 2 компонента на одной странице. К каждому пункту меню (который, как мы помним, в Joomla является структурной единицей) можно привязать только 1 компонент. Ну и формат вывода компонентов и модулей не позволяет нормально отдавать заголовок Last-Modified.

    5. Ограниченный функционал

    Конечно, Joomla — это как большой трактор или даже комбайн. Если чего в ней нет, то MVC-модель компонентов, большое количество хуков для плагинов и большое сообщество позволяет доделывать, дорабатывать и довешивать на неё много и много всяких плюшек. Но поскольку большинство компонентов пишется левой пяткой, то это, как правило, выливается в то, что сайт начинает безбожно тормозить или какие-то хакеры вешают на домашнюю страницу большую задницу. Но я не о том. Я считаю что стандартный набор компонентов должен хотя бы отвечать требованиям продвинутого блога и хотелось бы сказать, чего мне лично не хватает в Joomla по умолчанию.

    По умолчанию, нет страницы пользователя. Если ваш блог ведёт не один автор (у нас их двое — я и моя жена), то хотелось бы сгруппировать статьи по автору, для каждого из них сделать по страничке.

    Нет нормальных комментариев. Самое адекватное из того, что я видел — это JComments и мне не нравится, как они работают. Если кто-то желает обсудить архитектурные особенности JComments — давайте побеседуем в комментариях.

    Поддержка тегов появилась только в 3 версии (несколько месяцев назад) и пока сыроватая (в последней версии, например, роутер не генерирует нормальных URL-ов).

    Так зачем же она нужна такая плохая?

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

    И, как по мне, данный блог на Joomla построить можно было бы вообще без проблем (ну, с небольшими костылями), однако программирование своего велосипеда мне приносит удовольствие. Надеюсь, скоро будет цикл статей по созданию своей CMS, которая будет лучше чем Joomla, хотя бы в данных вещах.

    Комментарии

    14.12.2013 10:01:01
    Avatar of tag113tag113
    "Что сильно доставляет, так это дубли страниц."
    14.12.2013 10:05:25
    Avatar of tag113tag113
    два раза их - "поскольку их и так их приходится"
    15.12.2013 12:14:11
    Avatar of КонсервКонсерв
    Спасибо, поправил. :-)
    17.12.2013 12:07:04
    Avatar of Юра ГалинЮра Галин
    Классная статья! Ты все-таки первый :) Но я напишу ответ: "Почему я люблю Joomla". Да, и еще одно! Сделай наконец регистрацию, я уже устал вводить свое имя, имейл и капчу!
    11.05.2014 06:20:47
    Avatar of ОтветОтвет
    Более чем уверен что мой комент не попадет на страницу сайта но тем не менее напишу пусть автор возьмет ко вниманию. Часть про мультиязчность абсолютно ошибочна. Есть чудесный компонент Joomfish и те кто делают как написал автор либо не знают что такое Джумла либо мазохисты...
    11.05.2014 06:25:34
    Avatar of ОтветОтвет
    Готов поспорить с каждым практически пунктом в данном материале. Почти все ошибочно представлено человеком который только познакомился с джумлой. Есть множество вариантов решений того что автор считает проблемами. Есть форумы есть мануалы да и много чего еще есть. Что могу еще добавить это то что с Джумлой с первого раза будет сложно разобраться но поверьте мне это более чем отличная платформа для создания сайтов.
    13.05.2014 12:21:26
    Avatar of КонсервКонсерв
    @Ответ
    На Джумле я сайты делаю далеко не первый год, для решения многих задач приходилось патчить ядро вдоль и поперёк.

    Joomfish - костыль, который (который перекочевал с Joomla 1.5) решает некоторые проблемы, но тоже далеко не все. Благо, в 3-й версии у Джумлы с многоязычностью видны заметные улучшения, а новый виртумарт в этом плане - вообще сказка.

    Как я говорил, Jooma — дешевое и быстрое решение, которое решит большинство запросов вебмастеров.

    Но для больших проектов Joomla не годится. И для некоторых маленьких тоже. И многие, часто необходимые задачи тоже в Joomla не решаются.
    22.05.2014 09:57:14
    Avatar of КонстантинКонстантин
    А что тогда использовать для средних и мелких проектов? Из бесплатных CMS.
    22.05.2014 05:20:31
    Avatar of КонсервКонсерв
    @Константин
    К сожалению, наибольший и единственный опыт работы у меня с Джумлой (~50 качественных коммерческих сайтов), поэтому адекватно ответить на вопрос "какая CMS лучше" я не могу.

    Но Джумла, как я и говорил, отлично справляется с запросами большинства заказчиков и на ней можно сделать просто уйму сайтов.

    Минус только в том, что со всеми минусами Joomla приходится мириться программисту.
    23.05.2014 05:47:38
    Avatar of КонстантинКонстантин
    Спасибо за ответ.
    Буду дальше на нашей любимой джумле делать.
    16.08.2014 11:08:55
    Avatar of 202202
    Мне очень понравилась ваша статья. Это очень интересная и очень полезная статья. Спасибо.

    Adding comments is temporarily disabled for unregistered users.

    Go Top