Обновление сайта
26-05-2024Время чтения ~ 4 мин.Блог 890
Сегодня перевёл этот сайт на движок Albireo CMS. Основная задача — посмотреть как будет работать сайт на этой системе на реальном хостинге. В целом всё прошло неплохо, хотя было несколько неожиданных мелкостей. Где-то пришлось поправить пути, а также немного доработать механизм сессий. На локальном сервере такие вещи не «всплывали». Но в целом я доволен, думал, будет сложней.
Вообще этот сайт у меня работал на трёх движках.
Изначально это был WordPress с 2006 по 2009 год. После этого я перенёс его на MaxSite CMS, где он и работал до сегодняшнего дня. Теперь очередь Albireo CMS.
Для переноса данных я написал php-скрипт, который работает как type-файл в MaxSite CMS. На выходе готовые текстовые файлы в формате Albireo CMS. Переносится всё: адреса, комментарии, изображения, даже кол-во прочтений записи удалось сохранить. Основные сложности были со старыми записями — это «хвосты» от WordPress и ранних версий MaxSite CMS, где был визуальный редактор — он там творил что хотел... Поэтому пришлось ещё немного прогнать тексты в ручном режиме и с помощью Npp сделать некоторые замены. Ну и сразу подредактировал некоторые старые записи, а старые неактуальные просто убрал.
Много провозился с изображениями. Старые записи не имели своего изображения, поэтому стоит дефолтная заглушка. Но в Albireo CMS есть функция, которая прямо в тексте может создавать файл изображения на основе фонового и сверху накладывать текст. В комплекте несколько шрифтов и несколько десятков фоновых изображений. Получается так:
Думаю, для автоматического варианта, выглядит неплохо. Старые записи уже не стал делать такие изображения, просто надоело.
Всего получилось примерно 300 записей. Хотя всего на этом сайте было опубликовано примерно 1000 записей. Просто изначально я здесь публиковал материалы о WordPress, но когда ушёл из него, то записи поудалял. Потом писал много о MaxSite CMS, но потом перенёс все эти записи на официальный сайт.
Дизайн текущего сайта — дефолтный для Albireo CMS. Хочу его немного погонять, а потом уже сделаю похожий на старый вариант, он мне больше всех нравится. Единственное, что нарисовал новый логотип сайта.
Да, ещё важно, сколько получилось выиграть при обновлении. Если посчитать все файлы, то удалось сэкономить примерно 100Мб. Это дофигище, как оказалось. Сама система MaxSite CMS не очень много занимает, но есть ещё кэш, шаблон MF почти 20Мб (там просто много шрифтов и и изображений), обновлялки. Но больше всего оказалось занимают файлы uploads. Было много старых, которые уже не актуальны, а также много мелких почти дублирующих файлов миниатюр.
Это интересно, потому что проблема создания миниатюр и вообще работа с изображениями — головная боль любой CMS.
В MaxSite CMS (в итоге) получилось так: загружается изображение, где можно сразу выставить кучу параметров, например изменить размеры по определённому алгоритму. При этом система автоматом создаёт миниатюру размером например 600px. Файл размещается в каталоге исходного файла в подкаталоге mini
. Это один вариант. Есть второй — когда выводится страница, например рубрики, то система смотрит исходное изображение записи и на его основе делает миниатюру (если её ещё нет). Размеры могут быть самыми разными, например 800x600, 640x480 — это все можно указать в настройках админки. Проблема в том, что из-за зоопарка размеров, система послушно генерирует довольно много файлов миниатюр. Они небольшие, но в сумме дают приличный объём.
Теперь как я сделал в Albireo CMS.
В первую очередь — это использование формата WEBP. Простое конвертирование файлов, даже с большим качеством (85-95) даёт уменьшение размера в 2..3, иногда и в 10 раз. Поэтому когда загружается изображение, то оно может быть сконвертировано в WEBP с выбранной шириной и качеством. После того, как файл загружен на сервер и все преобразования выполнены, то исходный файл просто удаляется. Таким образом не создаются никаких дублей файлов с разными расширениями.
Если стоит задача сконвертировать все файлы из каталога, то есть специальная функция, которая прописывается на любой странице сайта.
У записи есть специальное поле image-large
, где указывается адрес изображения записи. Этот адрес используется в разных частях сайта, например при выводе Open Graph, RSS или миниатюры на страницах рубрик или меток. Там где нужно получить миниатюру, это поле используется как основа. В качестве размера миниатюры используется фиксированный размер (на самом деле можно указать произвольно) в 800x600px. Этот размер отлично подходит для всех телефонов и планшетов (вертикальных). Делать размер меньше - нет смысла. Сейчас разрешение моего смартфона выше, чем у моего 15" ноута. Так что это оптимально.
Функция, которая делает миниатюру, создаёт файл рядом с исходным, только указывает суффикс -thumb
, а также размеры. Таким образом из имени файла можно сразу понять, что это за размер и что это миниатюра. Если станет задача удалить все подобные файлы, то по маске файлов выделить их дело пяти секунд.
Но это ещё не всё. Если размер исходного изображения равен требуемому размеру миниатюры, то миниатюра не создаётся, а используется исходное изображение. Такая схема отлично подходит для записей, где изображение нужно только для красивой миниатюры и не более того. Это сокращает кол-во файлов в два раза.
Что ещё изменилось?
Закрыл комментарии для всех старых записей. Всё равно там один спам шёл. В Albireo CMS система комментирования немного проще, поэтому если будет спам, то просто их прикрою, пока не отлажу процесс. Так в принципе есть все основные защиты (кроме антиспама), включая и таймаут на повторную отправку формы.
В остальном в общем-то всё привычно для обычного блога.
Слава Украине! Смерть рашистам!
Для автоконвертації зображення у webp і створення мініатюр використовується Imagick, чи це свійські функції? і чи лишається механізм використання jpg (формат по вибору)?
Питання пов'язане з тим, що є специфічні задачі для збереження тайлів, тобто тисяч фрагментів 256х256px з яких складаються карти, наприклад.
p.s. минулий скрипт мав особливість - редагування ще не модерованого коментаря, чи було це вадою мені невідомо, але кілька раз воно спрацювало.
Конвертация средствами самого PHP. Там вроде бы стандартная GD используется, никаких чудес.
Файлы можно использовать любого формата, никаких ограничений нет. Просто есть удобный механизм получения и работы с WEBP из коробки. Если нужен другой формат, просто указывается в параметрах функции. Это может быть jpg, png, gif и webp.