Версия немного задержалась. В планах было выпустить её где-то летом, но я был занят разработкой Berry 3, а потом переделкой шаблона MF (9 версия). Поэтому в MaxSite CMS 107 получилось достаточно много изменений.
Новый плагин MetaRobots
В нём можно указать адреса, для которых будет прописана строчка:
<meta name="robots" content="noindex, nofollow">
Поддерживаются регулярные для адресов, а также можно указать любое значение «content». Например вот так:
users/(*) | noindex, nofollow
можно полностью закрыть от индексации все страницы комюзеров (как правило они «мусорные» с точки зрения полезного контента).
Переделки по юнитам
При подключении @module
можно использовать аргументы. Например так:
@module berry/block || block = ca/ca1.php ^ color = t-red
В данном случае подключается модуль «berry/block», а то что после «||» передаётся как аргумент и представляет собой обычные параметры юнита. Поскольку модуль ничего не знает про устройство юнита, то в юните используется спецвставка {args}
, которая и заменяется на аргументы. То есть в «berry/block/index.php»:
[unit] module = berry/block require = block.php {args} [/unit]
А после подключения модуля будет так:
[unit] module = berry/block require = block.php block = ca/ca1.php color = t-red [/unit]
И юнит дальше работает как обычно. Такая возможность позволяет управлять юнитами со стороны модулей. В данном примере модуль berry подключает один из своих многочисленных блоков. (Этот модуль доступен в шаблоне MF.)
Далее. Текущий юнит сохраняется в глобальном хранилище set_val. То есть в юните можно его получить через
$current_unit = mso_get_val('current_unit');
Это специфичная задача для случаев, когда юнит должен получить свои же данные из «внутренней» функции (PHP не позволяет это сделать из-за ограничения области видимости).
В юните last-pages.php была правка по буферизации вывода.
Также в last-pages добавил trigger. Его смысл в том, чтобы выводить какой-то текст между заданными юнитами. Например нужно вывести текст после 3-го и 5-го записями:
[unit] ... trigger@3 = привет раз trigger@5 = привет два [/unit]
В триггере можно использовать php-шаблонизатор. Например подключить ушку или опцию. Возможность пригодится и тем, кто размещает рекламу между записями.
Плагины
Правки в OpenGrahp, editor_trumbowyg, tweetmeme_com, catclouds. В parser_simple добавил возможность использовать «nosimple» для участков без обработки. Также теперь сохраняется форматирование кода с учетом пробелов и переносов строк.
Плагин maxsite_auth удалил, поскольку он больше не работает на PHP 7.1 (из-за проблемы CodeIgniter), а переделывать нет желания, да и потребности.
В плагине forms поле капчи имеет класс mso-forms-antispam
. Если нужно, его можно использовать для кастомизации.
Шаблон Default
В шаблоне были мелкие правки по блокам store. CSS-профили теперь подключаются как внешние файлы, если они имеют префикс «theme-» или суффикс «-head» — в секции HEAD, а если суффикс «-lazy», то в конце BODY. То есть теперь профиль может подключаться как в HEAD, так и в BODY.
Были правки в компоненте breadcrumbs для учета 404-страниц.
Прочие изменения
Было много правок для PHP 7.4. То есть вы можете использовать последнюю версию PHP.
В mso_sql_build_page()
теперь учитывается page_status
: draft, private и publish. Это если вдруг потребуется учитывать статус private (личное).
При выводе сайта комюзера больше не добавляется «http», поскольку это создавало путаницу: одни указывали сайт с http, другие без. Теперь вывод ровно то, что ввел пользователь.
В mso_login_form()
можно указать произвольный файл tmpl-шаблона (ключ tmpl_file
). Это позволяет вынести форму логина вообще в произвольный файл, например на уровень компонента.
При выводе метки производится обратное html-кодирование. Это позволяет избежать ошибок html-вывода.
В mso_get_val()
можно указать дефолтный массив в последнем параметре.
Через новый хук canonicalUrl
можно задавать свои варианты канонических URL.
В PHP-шаблонизаторе mso_parse_file()
можно использовать замены на адрес сайта/шаблона в любом варианте:
[siteurl] [site_url] [templateurl] [template_url]
В ini-файлах можно использовать символ «`» для замены кавычек «"». Из-за особенностей синтаксиса ini-файлов мы не можем использовать двойные кавычки, поэтому приходилось их заменять на «_QUOT_». Теперь можно использовать «`», что делает код более читабельным.
Опции из ini-файлов
Сделал новую функцию mso_get_defoptions_from_ini()
для получения значений из ini-файлов опций. Смысл вот в чём. Например есть компонент с options.ini. Эти опции работают только в админ-панели, поэтому в коде компонента приходилось ещё раз прописывать эти опции в дефолтном варианте:
$text = mso_get_option($component . '-text', getinfo('template'), '© {NAME_SITE}, {YEAR}. Работает на <a href=https://max-3000.com/>MaxSite CMS</a> {STATISTIC} {LOGIN}');
Это неудобно и довольно громоздко. Теперь же можно автоматом считывать опции из ini-файла:
$optionsINI = mso_get_defoptions_from_ini(__DIR__ . '/options.ini'); $text = mso_get_option($component . '-text', '', '', $optionsINI);
То есть теперь достаточно работать только с options.ini, где дефолтное значение опции указывается в ключе default.
Глобальный доступ к pages
Часто стоит задача, когда нужно получить данные записей в каком-то совершенно произвольном месте шаблона/плагина. Для этого используется глобальная переменная $page
, что само по себе плохое решение.
Поэтому я сделал так, чтобы данные записи сохранялись в set_val, то есть там, где нужно получить список текущих записей достаточно:
$pageData = mso_get_val('mso_pages', 0, true);
Соответственно я внес правки во все части MaxSite CMS, но оставил $page
глобальной (но неиспользуемой) для того, чтобы сохранить совместимость со старым кодом (её могут использовать плагины).
Автоматическое обновление MaxSite CMS
В комплект системы включил автоустановщик/автообновление. Раньше это был отдельный архив, теперь часть системы. Сам установщик находится в каталоге update-maxsite и работает также, как и предыдущий: скачивает с GitHub архив, распаковывает его и обновляет все файлы (если это новая версия).
Старый вариант также будет работать, хотя лучше использовать новый, поскольку он сам подчищает за собой лишние файлы (меньше занимает места на сервере). Кроме этого новый установщик/обновлялка имеет защиту от стороннего запуска. Делается это с помощью произвольного ключа, без которого установщик просто не запустится.
Я обновил документацию, где подробно это описано.
Сам установщик перевёл на английский, чтобы не возиться с локализацией. При повторном запуске (F5 в браузере), установщик удалит временные файлы старого архива.
UPD. После выхода MaxSite CMS 107 была обнаружена проблема безопасности — возможность XSS-атаки. На практике она вряд ли используется, но лучше сделайте обновление до 107.1 Это рекомендация для всех пользователей MaxSite CMS.
Комментариев: 7 RSS
1Евгений09-11-2020 15:45
А где можно почитать обо всех плагинах которые идут автоматом,полное описание их.Они все поддерживаютсяот версии к версии? Или редактирование их ложиться на плечи владельца сайта?
2Максим09-11-2020 15:56
Их 75 штук. Все в комплекте, все в актуальном состоянии. Все снабжены подсказками и описаниями в админ-панели. Задача владельца сайта лишь иногда нажимать ссылку для автообновления MaxSite CMS.
3BugoСайт16-01-2021 19:25
Привет. Обновил плагин подсветки синтаксиса для версии 107, https://gitlab.com/dragomano/maxsite_plugins/-/tree/master/highlight. Разрыв в 10 лет между версиями забавляет :)
4Игорь25-03-2021 17:43
Мой сайт a1905.ru работает на версии 0.809.
Реально ли его перевести версию 107?
5Максим25-03-2021 18:32
Конечно. Только шаблон новый нужен.
6Игорь28-03-2021 20:22
Инструкции я читал, но не получается.
Ведь у меня сайт на древней версии 0.809 работает на PHP 5.6 и БД тоже на старой версии.
Подскажите алгоритм, как перейти на v.107 и прицепить мой сайт к новому шаблону ?
7Максим28-03-2021 21:09
Если версия PHP 5, то максимальная версия MaxSite CMS 104. Выше обновиться не получится.
Шаблон можете просто заказать.