Concrete CMS Inc. готовит к выпуску версию 5.7 своей системы управления контентом. Эта версия практически полностью переписана и архитектурно отличается от актуальной сейчас версии 5.6. В данный момент разработка версии 5.7 еще не закончена и доступна версия для разработчиков, о ней и поговорим.
Некоторое время назад, Эндрю опубликовал на своем сайте статью о том, чем же «грозит» разработчикам выход версии 5.7. Вольное изложение этого материала я Вам и предлагаю. Для владеющих английским языком — прямой линк.
В общем как-то так. Все эти изменения делают Concrete5 еще более удобным инструментом разработки Интернет-решений любого уровня.
Ссылка на GitHub репозиторий версии 5.7: github.com/concrete5/concrete5-5.7.0
Некоторое время назад, Эндрю опубликовал на своем сайте статью о том, чем же «грозит» разработчикам выход версии 5.7. Вольное изложение этого материала я Вам и предлагаю. Для владеющих английским языком — прямой линк.
- Наконец-то отказались от поддержки PHP 5.2, это позитивно и открывает кучу новых возможностей.
- Плохая новость: 5.7 не совместим по API с 5.6.x. Т.е. расширения будут нуждаться в существенной переделке. С простыми расширениями все просто, есть даже 2 урока в How-To's на официальном сайте о том, как взять расширение для 5.6 и переделать в расширение для 5.7. А вот со сложными, подозреваю, не все так просто.
- Полностью реорганизован код CMS. Нет более таких директорий, как models, libraries или helpers. Вместо этого есть одна директория — core, в которой лежит все ядро.
- Помашем ручкой декларативному программированию, например привычной нам строчке: defined('C5_EXECUTE') or die(«Access Denied.»);. Теперь внутри CMS весь код организован в пространство имен (namespaces) Concrete, в том числе модули, атрибуты, пакеты и т.п.
- В 5.6 активно использовались классы из Zend Framework (лежали в concrete/libraries/3rdparty/Zend). 5.7 не менее активно использует Symfony2 (маршрутизация, система реквестов и респонсов, сессии, куки и события и т.п.).
- Перепроектирована MVC. В частности в 5.7 наконец-то отказываемся от tools'ов (например для экшенов вызываемых по ajax). Теперь все действия делаем внутри соответствующего контроллера (это и сейчас можно делать), а интерфейс во view.php (кстати можно использовать несколько разных отображений в зависимости от необходимости, мы это и сейчас используем).
- Убраны из кода всякие странные хаки (например: использование метода on_page_view() в контроллере модуля, чтобы подключить кастомные css и js, теперь все можно сделать в методе view()).
- Помашем ручкой классу Loader, отвечавшему за подгрузку классов ядра и не только. Автозагрузка рулит (PSR-4 autoloading).
- Есть желание поощрить Test Driven разработку, т.е. облегчить написание unit-тестов к своему коду во время разработки (мы и сейчас пишем, но это не особо поддержано в текущей версии С5, как например в Drupal, где разработчик не может добавить расширение, не покрытое тестами, в магазин расширений).
- Новая Assets system, что будет полезно при расширений ядра системы. Сейчас расширение ядра делается через перекрытия классов располагая свою реализацию нужного класса ядра в соответствующих директориях корневой директории сайта, что позволяет спокойно обновлять код CMS не затрагивая своих изменений в ядре.
- Используется Laravel IoC Container — мощное средство для управления зависимостями классов. Внедрение зависимостей — это способ исключения вшитых (hardcoded) взаимосвязей классов. Вместо этого зависимости определяются во время выполнения, что даёт бо́льшую гибкость благодаря тому, что они могут быть легко изменены.
Понимание Laravel IoC Container необходимо для тех, кто строит большие и мощные приложения. Для нас очень полезная штучка. - Помашем ручкой ADODB, используемой для доступа к БД в текущей версии CMS. В 5.7 интегрированы Doctrine DBAL и Doctrine ORM (давно пора). Теперь есть класс BlockType работающий через Doctrine ORM, как доказательство концепции, хотя в текущей версии все еще много фактов прямого доступа к базе данных. В этой части, кстати, сохранена обратная совместимость. Был написан слой совместимости. Также есть AXMLS анализатор для старых блоков и пакетов (для анализа db.xml и иже с ними). Но жить этой прокладке, скорее всего, недолго.
- Больше нет файлов config/site_events.php, config/site_autoload.php и config/site_post.php. Вместо этого, есть один application/config/app.php, который может содержать все что угодно.
- Как можно было уже заметить из пункта 13, теперь все переопределения (и я полагаю аддоны) живут в директории application/
- Много старого кода JavaScript было обновлено и переработано.
- Хорошая новость: какое-то время будут параллельно поддерживаться и развиваться две ветки 5.6.x и 5.7.
В общем как-то так. Все эти изменения делают Concrete5 еще более удобным инструментом разработки Интернет-решений любого уровня.
Ссылка на GitHub репозиторий версии 5.7: github.com/concrete5/concrete5-5.7.0