Современная, быстрая и удобная система управления сайтом

MaxSite CMS 107

Версии (релизы)Комментарии: 0Просмотров: 338

Версия немного задержалась. В планах было выпустить её где-то летом, но я был занят разработкой 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.

Оставьте свой комментарий!

Комментарий будет опубликован после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)