Недавно отключил на сайте комментарии, а сегодня вдруг взял и починил архив. Как говорится, где-то убыло, где-то прибыло.
Архив ломался когда-то давно в ходе обновлений OctoberCMS, но я тогда почти ничего не писал, и просто его отключил. А сегодня посмотрел, и решил что так больше нельзя. И починил. Оказалось, просто изменился способ получения параметров из url, который в плагине был сделан по-другому. В общем, быстренько поправил, заодно сделал нормальный локализованный вывод названий месяцев, и залил. Найти архив можно под лентой постов, вот например за 2025-й год. Если сравнить с предыдущими годами, моя графомания пережила ремиссию и снова требует крови.
Также можно смотреть архив по категориям (ссылка под лентой постов в каждой категории). А сам плагин BlogArchive для OctoberCMS можно по-прежнему найти на гитхабе: https://github.com/graker/blogarchive, обновления я в него добавил.
As a result of these dramatic structural changes of the project that we rely upon to run our businesses, former October CMS maintainers Luke Towers, Ben Thomson and Marc Jauvin wish to announce the formation of the Winter CMS project, a community-driven fork of October CMS with a dedication to speed, security, stability, and simplicity. Along with Jack Wilkinson, we aim to continue to deliver a professional and feature-rich platform that you can rely upon for your websites and applications; as well as engage with the community and become a more community-driven project overall.
Winter CMS is a fork of October CMS as of v1.1.2 / v1.0.472, any of your October projects can be seamlessly migrated to use Winter instead as long as they are using a version of October prior to the dramatic changes recently introduced by the original founders.
For more information on the exact events that led to the decision to fork, you can view our announcement on GitHub.
Видимо, надо помигрировать. Название только какое-то безыскусное. Винтар ЦМС. Можно было бы назвать например Bleak Midwinter CMS, было бы гораздо круче.
This means that as a business, the October CMS platform, its features, and processes now focus primarily on the needs of our professional customers. To this end, we have been working hard on a new release for over a year now, and it is ready to go.
We believe you will be pleasantly surprised by the new features and streamlined back end to October CMS to increase both its capability and ease of use.
However, we will also be moving to a new business model to ensure the continuity and sustainability of October CMS. October CMS will become a proprietary product and the licensing model is to be changed. Under these changes, October CMS will no longer be a free platform.
We believe that these changes are necessary in the interests of providing the timely and effective support expected of our professional users.
На днях совершил над собой титаническое усилие и добавил-таки своему Netspark.ru английскую версию. Учитывая, что это по сути одностраничник (ну, плюс 404 и «Сайт на обслуживании») — можно было бы тупо скопировать и поменять текстики на английские. Тем более английскую версию поставил на другой домен. Но все же чтобы фронт-энд был одинаковый в обеих версиях — мало ли там, добавить чего, поменять — решил использовать возможности локализации. О чем и расскажу немного.
Локализация в OctoberCMS — примерно такая же, как в Laravel. Есть файлы с локализацией, например lang.php, из них возвращаются массивы, примерно так:
После чего используется фильтр trans в твиге, где обращение к строке происходит как author.pluginname::lang.messages.mymessage. Author и pluginname — это имя автора и плагина, чтобы было ясно, откуда брать строки. Соответственно, файлы локализации должны жить в плагинах.
Это нормально, если проект не совсем примитивный и в нём есть кастомный плагин для всяких там дополнений и расширений. Но в рассматриваемом случае проект совсем примитивный и кастомных плагинов в нём нет, соответственно, хранить переводные строки негде. В таком случае нужно использовать плагин Translate. Если он установлен, хранить переводы можно прямо в theme.yaml используемой фронт-энд-темы. Заинклудить отдельный ямл с переводами тоже можно, да.
Чтобы строки из yaml-файла попали в систему, нужно их сначала обнаружить плагином Translate. Для этого со страницы переводов нужно запустить сканирование сообщений и затем почистить кэш.
К слову, если пользоваться плагином Translate, хранить строки в yaml-файле вообще необязательно. Если подать любую строку во фронт-энде на фильтр перевода, она может быть отсканирована и переведена через админку плагина. Примерно как функция t() в Друпале — засунул в неё что-нибудь, и это что-нибудь стало можно перевести. Но что еще интересно, в отличие от Друпала, где системный язык всегда английский и мы переводим с него, в OctoberCMS с плагином Translate дефолтный язык — действительно дефолтный. То есть мы можем сделать сайт на русском, сделать русский дефолтным, и переводить строки с русского на французский, или китайский, вообще без какого-либо упоминания английского.
Что еще можно сказать. Как видно из скриншота выше, плагин позволяет экспортировать переводы в и импортировать из csv-файлов (аналогично импорту-экспорту моделей).
Напоследок приведу пример определения текущей локали в системе. Я просто добавил обработчик onStart() в лейаут, и страницам, использующим этот лейаут, стали доступны переменные switchLocaleName, switchLocaleFlag и switchLocaleLink.
Мой верный соратник по всем поездкам и по совместительству супруга Настя на днях запилила турагентство AlayTravel. С бронированием туров по всему миру, чаем, печеньками и бесконечной заботой о туристах.
А я, соответственно, запилил на OctoberCMS для турагентства сайтик. Делать такие сайты на OctoberCMS — одно удовольствие, тем более по такому приятному поводу. Приглашаю всех заходить и подбирать себе отпуск. Онлайн-поиск и подбор туров с актуальными ценами к сайту уже прикручен. Тем, кто сам сможет до 8 марта подобрать себе тур — сообразим скидку.
Работу с AJAX в OctoberCMS я уже раньше немного затрагивал, но для бэк-энда. А теперь можно затронуть и фронт. В этой заметке мы сделаем кнопочку Load More, чтобы подгружала без перезагрузки страницы новые посты блога (из плагина RainLab.Blog).
На первый взгляд может показаться, что для этого нужно влезть в компонент Posts этого плагина, но на самом деле — вовсе не нужно. Дело в том, что раньше из документации можно было подумать, что обработчики AJAX-событий нужно описывать только в классе контроллера (если в бэк-энде), или компонента (если во фронте). И поэтому не очень было понятно, как быть, когда ты хочешь получить красивый ajax-пейджер для блога. То ли лезть в код чужого плагина, что влечет проблемы с обновлениями. То ли писать свой собственный компонент, из которого грузить компонент Posts программно. Что ведет к сомнениям в том, надо ли вообще такой негибкой CMS пользоваться.
Что мне всегда отдельно нравилось в Ларавеле — так это как там организована генерация тестовых материалов. Для этого используется мега-библиотека Faker, которая умеет практически всё, что может понадобиться при разработке. Годится как для автоматизированных тестов, так и для заполнения БД тестовыми данными.
В самом Ларавеле можно описать для моделей классы-factory и генерировать данные по ним, это описано в документации. В OctoberCMS про фабрики документация ничего не говорит, но можно обойтись и без них.
TL;DR: Далее несколько примеров генерации тестовых данных с помощью библиотеки Faker в OctoberCMS
Вообще говоря, локализация интерфейса в OctoberCMS такая же как в Laravel. Есть файлы типа lang.php, разложенные по директориям, соответствующим языку, в них есть строки, их можно переводить. Неудобство лично для меня лишь в одном — когда нужно куда-то вставить локализованный текст, не видно самого текста, только идентификатор строки. В остальном, на мой взгляд, система эта несколько удобнее перевода интерфейса в Друпале.
Даже если поддерживать сайт или интерфейс на нескольких языках не нужно, с переводами можно столкнуться, например, при плюрализации, то есть склонении в зависимости от значения числа. Потому что в 2018 году уже как-то стыдно делать сайт, на котором написано «1 предложений», «22 предложений» и т.д. Надо склонять.
В Ларавеле это делается тривиально, для английского языка в lang.php пишем например:
И больше ничего делать не нужно, правильное склонение выберет библиотечная функция в соответствии с формулой для выбранного языка локали.
Но в OctoberCMS есть нюанс. Дело в том, что Ларавел поддерживает единую директорию lang для локализации всего проекта, поэтому туда можно складывать любые строки и обращаться тоже можно к любым строкам. А в Октябре у каждого плагина своя директория переводов, у ядра — своя директория переводов, а у используемой темы её и вовсе нет.
Из-за этого, в первый раз столкнувшись с задачей, можно немного смутиться — а как же сделать плюрализацию для строки, которую я просто в теме вывожу. Документация пока об этом ничего не говорит. А строчка:
Note: For translating front-end content, there are plugins that can be used for this purpose.
и вовсе может навести на мысль, что для перевода строк в теме (каковая и есть фронт-энд) нужно какие-то плагины ставить (нужно, но только для контента, то есть моделей из БД).
На самом деле для обращения к строкам локализации из темы, то есть из шаблонов Twig, есть фильтры. Для обычного перевода — фильтр trans, а для плюрализации — transchoice. Его и нужно применить, чтобы получить склоняемое количество предложений:
graker.touristic здесь — это обращение к плагину Touristic за авторством Graker: к сожалению, поскольку у темы нет своего файла локализаций, необходимые строки придется разместить в каком-нибудь плагине.
Поскольку Laravel 5.5 (который, кстати, LTS) уже неделю как вышел, стал обновляться. Проекту, который недавно обновлял с 5.1 до 5.4, повезло: достаточно было поменять версии в composer.json — и всё обновилось и заработало без проблем и все тесты прошли. Подправить пришлось лишь пару методов в тестах — там просто вместо строк кое-где стали числа возвращаться.
А поскольку авторы OctoberCMS обещали, что апгрейд до 5.5 выйдет примерно одновременно с самим 5.5 — стал обновлять домовую страницу. Тут вышло чуть-чуть сложнее. Встроенный механизм обновления обновлять ничего кроме плагинов не стал, потребовалось взять из гитхаба новый composer.json и тогда уже обновляться через composer update и последующий php artisan october:up, который запустит все новые миграции.
После обновления также нужно заменить значение параметра cipher в config/app.php на 'AES-256-CBC'. Просто перегенерация ключа php artisan key:generate тут не сработает, потому что по умолчанию в October не используется файл .env, а используются файлы в config.
Проблемка после обновления возникла одна — перестали сортироваться категории в соответствующем компоненте плагина Blog. Придется немножко покопаться. Учитывая, что обновление было аж с Laravel 5.0, одна маленькая проблема — отличный результат. Видно, что авторы основательно над апгрейдом поработали.
Ну и теперь у меня на сервере есть PHP 7, поскольку для Laravel с версии 5.5 он обязателен. Тоже полезно.
Как известно — скоро, уже вот-вот, совсем чуть-чуть осталось — выйдет Laravel 5.5. Но помимо того, что это само по себе хорошо, давно и вовсю идет работа по обновлению OctoberCMS, тоже до использования Laravel 5.5. Для October это наверное даже важнее: сейчас-то там под капотом вообще Laravel 5.0, так что обновление будет очень кстати.
В данный момент приобщиться к версии на 5.5 уже можно из репозитория, ветка develop. Я попробовал и могу сообщить: PhotoAlbums и MapMarkers в новой версии работают нормально, проблем не выявлено. Можно сказать, к обновлению готов.
Отправить письмо
На нашем сайте используются куки-файлы, потому что без них всё плохо работает. А с ними — хорошо. Нажмите на кнопку «Согласен», если согласны с условиями обработки куки и данных на сайте. Если не согласны, можете отключить куки в настройках браузера.