История изменений Albireo CMS
✔️ 1-08-2025
✔️ 14-08-2025
✔️ 15-08-2025
✔️ 9-09-2025
✔️ 1-10-2025
2025.10.25
- Новая возможность — отправка готового промпта читателями сайта. Можно указать ChatGPT и AI Studio Google, но только ChatGPT получает реальное содержание статьи, поэтому нет смысла использовать другие нейросети. Новый файл конфигурации
prompts-info1.phpи новая функцияpromptsInfo(). Пока в режиме тестирования. - При вставке изображения через копирование адрес формируется на основе
slugзаписи с добавлением метки времени. Раньше было на основеtitle, что не очень красиво получается (транслитерация). - Сделал новый адрес «сайт/llms.txt», который специально предназначен для взаимодействия с ИИ. Этот файл динамический, поэтому реально не существует. Отвечает за него
pages/specific/llms-txt.php. - Переписал сниппеты
article-navigation.phpиarticle-navigation-flat.phpтак чтобы ссылка получалась неsection-НОМЕР, а формировалась из текста заголовка. Например заголовок «Языковой перевод. Мультиязычность», ссылка будет «#языковой-перевод-мультиязычность». - Новые ключ в конфигурации
slugReplaceSlashesс помощью которого можно изменить слэш в адресе на произвольную строку. Работает только для адресов (slug), формируемых автоматом.
✨ Albireo CMS ver. 2025-10-01
2025.09.30
- Небольшие правки по документации.
- Доделал редактирование и удаление юзеров в админке.
- Мелкие правки по подвалу
footer2.php. - Вынес в отдельную функцию
isValidUrl()проверку валидности URL. Раньше была сложная регулярка, сейчас последовательная проверка корректности адреса. - Поправил логическую ошибку в
convertToWebp(). - При приёме AJAX-запроса, если это админка, то сбрасывается минимальное время между запросами (0 сек).
- Работы с users в админке.
✨ Albireo CMS ver. 2025-09-09
2025.09.05
- В полной версии добавил ещё несколько новых лендингов. Теперь их 33 шт. — суммарно 93 страницы.
- В админке добавил страницу
clear-cacheдля сброса кэша. Просто очищается таблицаfilesinfo. - В админке поправил страницу текстового редактора. Добавил Ctrl+K для вставки ссылки. Подшаманил пункты меню. Добавил визуальную градацию в шапку, как у других страниц.
- Обновление этой документации.
- Разные правки по результатам тестирования.
2025.08.31
- В функцию
createImageText()добавил проверку на расширение входящего и результирующего файлов — они должны быть webp. - Добавил в демо-лендинги для каждого скриншот страницы. Переделал
сайт/landingsтак, чтобы теперь выводились именно скриншоты каждой страницы. Стало намного лучше ориентироваться. - Новое поле
this-file-stem- имя файла без пути и расширения. Создается автоматом. - Добавил для этого сайта укр и eng-версии. Использую google-переводчик. Сделал
use.notranslate: +который прописываем для PRE и CODE классnotranslate, чтобы гугл их не переводил — это рекомендация гугла. - На странице
generate-user-hashсделал подсказку «сложность» пароля. - Сделал вставку изображения из буфера обмена. Изображение сохраняется на сервере в файле, а в текст добавляется MD-код.
- Переделал отображение изображений записи в текстовом редакторе. Теперь это ajax-подгрузка, которая автоматом обновляется при изменении каталога.
- Немного поменял логику
generate-user-hash. Если юзеров вообще нет (по умолчанию), то страница показывается всем. Если есть хоть один юзер, то страница проверяет разрешение на доступadmin. Таким образом посторонние не могут получить к ней доступ. - Поправил некоторые демо-данные на всякие недочёты.
- Некоторые правки по тестированию lite-версии.
2025.08.15 (alpha-testing)
- Внёс изменения по этой документации. Теперь есть ссылки на каждую функцию.
- Немного подправил работу с phar-файлами.
- Начинаем этап тестирования Lite-версии.
2025.08.10
- Доделал основные работы по документации функций и ядра системы. Буду ещё подшаманивать, но вся основная информация теперь доступна для вебмастеров.
- Добавил в шаблон документации js-скрипт для скроллинга меню к центру экрана. Для удобства.
2025.08.01
- Доделал сайт документации. Теперь основная задача это наполнить его технической информацией о функциях системы.
- Внес некоторые исправления по логике определения домена сайта (всё не так просто...).
- В базе
filesinfo.sqliteдобавил полеfile_mtime, которое хранит unix-метку времени модификации файла из последнего снапшота. Это позволяет сортировать sql по этому полю.
2025.07.20
- Большая переделка меню. Разделил меню на файл, где указываются только ссылки и иконки, а дизайн (css-классы) используется отдельный конфиг-файл. То есть теперь можно менять внешний вид меню, не меняя ссылки. Само меню может указываться как поля
menu: menu.phpиmenu.design: menu-design1.php. - Новые поля для навигации по каталогам страницы
nav-folder nav-top-folder nav-folder-date nav-top-folder-date. Они используются для тех случаев, когда раздел сайта оформлен как каталог. - Числовые префиксы могут быть не только у файлов, но и каталогов. Новая функция
strFirstDot(). - В базу кэша автоматом попадает поле
favorite: +которое может означать избранная запись. - Функция
strUcFirst()для первого заглавного символа строки, но и там, где указан разделитель. - Исправил несколько ошибок разных.
- Новый вывод записей как folders.
- Новая шапка header13.
- Новый подвал footer6.
2025.07.14
- Добавил в подсветку кода другие селекторы:
pre.hl, pre.php, pre.js, pre.css, pre.sass, pre.scss, pre.python. - Чуть поменял логику подключения ядра. Перенёс функции из
website/index.phpвsystem/loader.php. Стало более компактно. - К
_handler_funcможно добавлять аргументы в виде полей_handler_func_argX, где X от 1 до 10. Это позволяет прямо через Ajax передавать аргументы в функцию. - Добавил страницу промптов для аналитики рубрик сайтов. Сделал через функцию
categoryPagesPrompts_handler() - Новое поле
prompt.nocontent: +чтобы отключить вывод контента для tpl-файла prompts. - Добавил класс
copy-txtдля того, чтобы появилась кнопка копирования в блоках PRE. Используетсяuse.clipboard: +.
2025.07.10
- Добавил в текстовом редакторе «горячие клавиши» Ctrl+B для жирного и Ctrl+I для курсива выделенного текста. Почему я этого раньше не сделал? 🤔
- Исправил несколько мелких недочетов от предыдущих изменений.
2025.07.03
- Добавил в конфигурацию
registerUsersкоторая разрешает самостоятельную регистрацию юзеров через сайт. - Сделал регистрацию пользователей сайта. Там много всего.
- Переделал форму и страницу логина. Раньше была отдельная post, теперь сделал через handler-файл.
- Новая функция
arrayToStrHTML()которая из одномерного массива делает строку с преобразованием элементов черезhtmlspecialchars(). Годится для вывода массива как UL-список. - Правки по этому сайту. Улучшил дизайн. Добавил лендинг для главной. Установил новый логотип системы. Поправил страницу цен.
- Добавил JSON+LD. Там же поле и конфигурация
author. Полеtimezoneкак суффикс для полной даты форматаY-m-d\TH:i:s. - Новое поле
head-rel-href[]для формирования<link rel="[key]" href="[val]">. - Функция
isValidEmoji()проверяет на одиночную эмодзи. Используется вarrayValidate(). - Сделал функцию
arrayPagination()которая возвращает пагинацию для входящего массива. - Доработал TextSimple: теперь можно указывать класс для pre без скобок:
```hl. Все изменения для совместимости с markdown. - Доработал TextSimple: теперь можно не указывать
ulи/ulдля задания списков. - Добавил новую функцию
stopWords(), которая проверяет вхождения слов изconfig/stop-words.php. Для антиспама. - Добавил проверку антиспама в
arrayValidate()как правилоstop_words. - Добавил проверку антиспама в контактную форму и форму комментариев.
- Добавил в CSRF поле
_token_timeгде хранится время генерации токена. Проверка токена работает автоматом. Если он слишком новый или слишком старый, отправка блокируется. Нужно будет обновить страницу. Это защита от автоматического спама. - Функция
moveFile()для перемещения/переименования файла. - Прикрутил механизм миграций/seeder через
seeder()она срабатывает автоматом при запуске системы. Если есть константаNO_SEEDER, то миграция не делается. - Токен
_token_sourceдля отслеживания источника отправки данных. КонстантаTOKEN_SOURCE- раскодированный адрес. - В валидации можно использовать
val_trimиval_strip_tagsдля предварительной обработки входящего значения поля. - Переделал формы комментария и контактной под новый механизм токенов и валидации.
- В TextSimple теперь можно не задавать пробел между маркером элемента списка и курсивом или полужирным:
* *текст*или- _текст_и т.п. - Переделал работу с языковыми версиями страниц.
- При запуске системы теперь проверяется не только
.htaccess, но иrobots.txt. Если нет, то будут созданы автоматически. - Доделал механизм канонических адресов. Добавил поле по умолчанию, чтобы адрес прописывался для всех страниц. При этом учитывается пагинация. При желании можно указать канонический адрес индивидуально для каждой страницы.
- Немного переделал sitema.xml и rss.xml так, чтобы в них попадали все страницы, кроме типа system. Раньше были только blog, что делало невозможным указания скажем для страниц документации (там тип doc или другой). Поэтому теперь попадают все, кроме system и тех, где это явно запрещено в полях страницы.
- Перенес подключение rss-лент в HEAD отдельным файлов в
parts. Добавил поляrssиrss.commentsдля того, чтобы можно было отключать создание rss-лент в HEAD.
2025.06.08
- Довольно много правок по админке системы. Где-то дизайн поправил, где-то иконки, где-то цвета. Сделал более симпатичным верхнее меню админки. 🚀
- Добавил пункт в редакторе файлов «AI» где собрал всякие нейросети для быстрого запуска.
- Новый тип
prompts— готовые промпты для неройсетей. 🌠 - Новый пункт в редакторе файлов «Site» со ссылками на
shortsиprompts. - Для промптов, соответственно page-data и всё такое.
- Правки по этому сайту. Чуть получше сделал дизайн. 🌈
2025.06.04
- Немного поменял логику отложенной публикации. Поле
date-pubработает как и прежде, но теперь учитывается поле конфигурации сайтаtimeshiftв секундах. Раньше былоtimezone, которое удалено. - Добавил pursuing для «липкого» меню в шапке. Может использоваться в некоторых модулях шапки, либо произвольно.
- Добавил новое поле
image-large-size: 800 x 600где можно поменять размер миниатюры. Новая функцияparseImageSize().
2025.05.27
- Разные правки по рубрикам и меткам. в них можно использовать эмодзи и вложенность.
- Новое автоматическое поле записи
[subdirs-basename]которое возвращает basename-имя текущего каталога файла. - Добавил описание создания документации на Albireo CMS.
2025.05.25
Правки по TextSimple для того, чтобы приблизить его синтаксис к Markdown.
- Больше не поддерживаются
**и*#для списков из-за неоднозначности. Вместо них нужно использоватьulиol. - Для элементов списков можно использовать
*,-и+. 💡 - Курсив теперь это
*text*или_text_. Жирный это**text**или__text__. - Полужирный курсив это
***text***. -
зачеркнутый -
выделенный текст➡️<mark> -
Enter➡️<kbd>⌨️
2025.05.21
- Добавил константу
FRONT_URL_NAMEкоторая хранит путь к каталогу сайта без http-протокола. - Изменения в работе некоторых функций, которые проверяют путь на сервере из адреса - теперь возможен протокол http и https.
- В админ-панель на страницу Config добавил ссылки на редактирование сниппетов.
- Правки по рубрикам так, чтобы они могли иметь произвольный адрес.
- Функцию
hIMG_src()вынес отдельно. - У виджетов есть специальный ключ
showчерез который можно управлять выводом виджета. - Новая функция
arrayFindPrevNext()для нахождение предыдущего и последующего элемента массива. - Правки по шаблону doc2.
- Автоматическая навигация по шаблону документации через extras.
- Новый слайдер swiperjs в ресурсах.
- В комментариях — ссылка на редактирование.
- Новый extras-файл
edit-link.phpсо ссылкой на редактирование записи. Для тех страниц, где нет вывода информации записи. - В berry поля:
use.berry.dark,use.berry.dark.default,use.berry.theme.default- полный цикл обслуживания theme и dark-режима.
2025.05.03
- Новый модуль PageViews предназначенный для подсчета количества прочтений страницы. Его можно использовать как более простая альтернатива статистики Stat. Stat хранит данные по каждому посещении страницы, а PageViews хранит только количество прочтений, поэтому размер базы очень скромный.
- Можно использовать поле
comments.page: адресдля которого следует выводить комментарии. Это позволяет выводить комментарии со связанных страниц. При этом сохранение страниц всё также привязано к реальному адресу slug. Его можно изменить при редактировании комментария в админ-панели.
2025.04.30
- Начал тестирование новой возможности Berry CSS - поддержка dark-темы. Это не только css-код, но и js-код, который обслуживает эту возможность.
- Новая функция strRemoveLF() для простого сжатия css/js-кода. Функция удаляет ведущие и замыкающие пробелы строки, а также все переносы строк.
2025.04.25
- Новая возможность загружать изображения прямо с компьютера в текстовый редактор. Достаточно просто перетащить файл или файлы мышкой в окно редактора. Система спросит какой должна быть ширина и качество итогового изображения и после этого самостоятельно загрузит файл на сервер, преобразует его в webp и добавит ТextSimple/MarkDown код изображения в позицию курсора.
- Новый код для вставки js-содержимого в секцию HEAD:
js.fscript[]: my.js.
2025.04.18
- Добавил сообщение на странице редактирования файла: если изменения не сохранены, то при попытке уйти со страницы, будет выдаваться предупреждение о несохранении данных.
- Добавил
zip.phpкоторый делает zip-архив текущего сайта для создания бэкапа. В скрипте можно указать параметры доступа, каталоги для копирования, а также исключенные файлы и каталоги. - Немного подкорректировал вывод записей в блоке «Other pages» так, чтобы не выводилась текущая запись.
- Чуток переделал страницу всех рубрик
category. Теперь для каждой рубрики будет выводиться последние 11 записей. Это более информативный вывод, чем просто ссылки на рубрику.
2025.04.07
- Сделал возможность редактирования config-файлов в виде отдельный полей в админке (новая страница). Происходит парсинг php-файла, потом он собирается отдельно. Поэтому на входе и на выходе обычный php-файл. Это новая библиотека
optionsLib. С ней ещё будет работа, но пока в таком виде. - Выделил из основного
config.phpсекциюdefaultPageDataв отдельный файлpage-data.php. Так будет проще управлять сайтом. - Изменил файл
my.jsнаalbireo.js. Это более логичное название. - В
albireo.jsдобавил функциюalbireoForm()которая может использоваться для post-отправки формы с использованеим Alpine.JS. Она умеет принимать ответ не только в виде html-кода, но и понимает http-ответ, а также сможет обрабатывать SCRIPT. Это позволяет формировать сложные ответы сервера, где нужно сделать динамическую реакцию, например перезагрузка страницы через 1 секунду. - Новая функция
arrayReplaceKeys()для замены ключей в многомерном массиве. - В качестве handler ajax-формы теперь может выступать не только файл, но и функция.
- Перегруппировал файлы ядра в отдельные смысловые подкаталоги. Просто для удобства.
- Переиграл код лицензии.
- Добавил функцию
sessionUnsetCSRF()для сброса CSRF токена. Можно использовать после успешной отправки формы, чтобы блокировать повторную отправку. - Новая функция
sessionOld()с помощью которой можно хранить и получать данные форм (да и не только). - Решил все-таки использовать сжатие phar-файлов ядра системы. Размер одного 89Кб, второго — 64Кб. Также существенно сократил размер файла лицензии (примерно 500 байт).
- Подкорректировал loader (загрузчик системы), так чтобы он игнорировал файлы и каталоги, начинающиеся с символа «_».
2025.03.27
Небольшая доработка, направленная на увеличение скорости создания «карты файлов». Теперь можно через конфигурацию задать каталоги относительно pages, которые будут как бы «заморожены» — у них не будет проверяться время модификации. Если на сайте много файлов, то такая опция позволяет отключить старые каталоги, которые редко меняются. В итоге построение карты может ускориться примерно в 2 раза (чем больше исключений, тем больше ускорение).
2025.03.25
- Переделка системы под «умный кэш». См. Albireo CMS и много-много страниц. Очень большие изменения в системе.
- Получение страниц теперь происходит через обращение к базе sqlite. Сделал
getPages()для упрощения кода. Получилось даже меньше, чем старый вариант, поскольку функция сразу обсчитывает пагинацию. - Доработал функцию и алгоритм валидации данных через
arrayValidate(). См. Работа с формами в Albireo CMS. - Немного изменил работу поля
file-page-data. Теперь он проверяет файл в каталоге сайта, а если его нет, то смотрит каталог system. Таким образом я вынес часть файлов в общую конфигурацию, поскольку они единый для всех сайтов. - Страница админки (specific/admin) немного переделал под новую возможность
file-page-data— вынес часть полей в отдельные файлы. - Немного переделал работу контактной формы.
- Сделал новую шапку header12. Она меняет поведение для главной (большой размер) и остальных страниц (уменьшенный размер).
- Новая функция
arrayNatSort()которая может сортировать многомерный массив по алгоритму натуральной сортировки с сохранением ключей. В PHP до сих пор нет такой возможности... - Переделал страницу записей в админ-панелей. Теперь списки DETAILS учитывают вложенность каталогов. Стало удобнее и более информативно, чем было.
- Новая функция
sessionOld()которая позволяет запоминать и воспроизводить введенные данные для форм (и не только). - Новая функция
sessionUnsetCSRF()которая сбрасывает текущий токен юзера. Это позволяет создать новый и отправка формы со старым токеном будет заблокирована. - Функция
getSnapshot()теперь работает немного по другому алгоритму. Это позволило увеличить скорость создания «отпечатка» примерно в 2-3 раза. - Новая тема оформления
gray1.css— всё в серых тонах.
2025.02.27
Добавил возможность менять конфиг-файл виджетов для любой страницы с помощью поля widgets-config. Это на случай, если для какой-то страницы нужен свой уникально настроенный сайдбар.
Добавил возможность указывать у рубрики собственный адрес (ключ my-url), например вместо category/astro, можно указать astro. Тогда при переходе на эту рубрику, будет переход на указанный адрес. Естественно, такая страница должна существовать, иначе будет 404-страница.
2025.02.21
Добавил в textSimple возможность указывать атрибуты ссылок. Используется в лайтбоксах.
!{data-fslightbox}
!{class="glightbox"}
!{data-fslightbox}
!{data-fslightbox}
!{target="_blank"}
!{}
- Добавил каталог
service/my, с помощью которого можно расширять действие default-шаблона, не меняя его. - Доработал update в PDOSQL.
- Перенес шрифты в ресурсы. Теперь их подключать стало проще:
use.font[gabliela]: + - Перенес Berry CSS в ресурсы. Теперь подключение стандартное:
use.berry: + - Сделал разные цветовые дизайны/темы - всего 17 цветовых палитр.
css.theme[]: red.css - Еще один лайтбокс
use.fslightbox: +. - Добавил новые демо-данные для сайта. Теперь это астрономия, буддизм, динозавры, кулинария, автомобили и животные. Сделал для каждой рубрики свой файл вывода типа
сайт/astro. - Новая функция findFile() возвращает файл из списка указанных каталогов.
- Конфигурация для getDB() теперь подключается рекурсивно: вначале из system, потом объединяется с из website.
2025.02.12
Добавил систему голосования.
2025.01.31
Немного упростил возможность размещать каталоги на уровень выше. Например так можно перенести каталог templates в корень сайта:
website/base-constants.php
define('TEMPLATES_DIR', LEVEL_UP_DIR . 'templates' . DIRECTORY_SEPARATOR);
define('TEMPLATES_URL', LEVEL_UP_URL . 'templates/');
Это пригодится для мультисайтинга, когда несколько сайтов используют один и тот же шаблон. Его можно вынести на уровень выше и он будет общим для всех.
2025.01.27
- В админ-панели появился чекбокс для автосохранения файла. По умолчанию раз в 30 секунд. Настраивается в конфигурации.
- В админ-панели поменял поведение меню. Теперь оно повторяет привычное поведение windows-меню: клик, открытие, hover и т.п.
- Доработал функцию
getConfigFile()— новый параметрrecursive— он позволяет загружать конфиг-файл как дополнительный к системному. То есть можно менять только те параметры, которые отличаются от дефолтных системных. - Конфиг-файл
admin.phpтеперь можно менять не весь, а только те параметры, которые нужно изменить. Такое же поведение уже есть уconfig.php. - В админ-панели в текстовом редакторе, после того, как выполняется вставка через меню, теперь (наконец-то!!!) работает клавиши отмены (Ctrl+Z).
- Проверил работу Albireo CMS на новом PHP 8.4.3 — работает без ошибок.
- Проверил работу Albireo CMS на новой Sqlite 3.48 — работает без ошибок.
- Мелкие правки по шаблонам и Berry CSS 5.
- Вынес новые настройки админ-панели в конфигурацию: высота предпросмотра, дополнительные классы и style текстового редактора.
- Теперь можно настроить текстовый редактор любым способом.
2025.01.23
Вынес php-код вывода главной отдельно в файлы модулей шаблона: modules/home. Для управления выводом можно использовать опции homeOutputModule, homeLimitPagination1, homeLimitPagination2. То есть теперь не нужно менять home.php, можно поменять вывод через конфигурацию.
2025.01.16
Улучшение работы внутреннего хранилища. Это позволило уменьшить потребление php-памяти примерно 5-6 раз (примерно до 1Мб), правда за счёт небольшого уменьшения скорости работы системы (примерно до 0,2 sec).
2024.12.11
В TextSimple добавлен ```(класс) код ```, который преобразуется в :
<pre class="класс"> htmlspecialchars(код) </pre>
В TextSimple добавлен код TODO-списка:
- [x] Придумать идею - [ ] Воплотить её в жизнь
<div><input type="checkbox" disabled checked class="task-list-item-checkbox"> Придумать идею</div> <div><input type="checkbox" disabled class="task-list-item-checkbox"> Воплотить её в жизнь</div>
22-02-2023
Начало работ по созданию Albireo CMS.
28-10-2022 10:53
Первая запись в ТЗ, посвященному созданию будущей Albireo CMS (развитие Albireo Framework).