
5
Делаем картинки на сайте кликабельными
Для начала немного пояснений по Bolt CMS - я использую markdown для написания статей. Далее markdown уже конвертируется в HTML, и для картинок по факту есть два варианта:
- Вставить просто картинку

- Обернуть картинку в ссылку
[](url)
, чтобы по клику она открывалась, но при этом будет закрываться текущая страница, да и просматривать оригинал картинки в браузере не очень юзер френдли.
Выбор решения
За решением я пришел ... в Cursor, попросив сделать все картинки постов кликабельными. Причем у меня была как я думал сложная идея - сделать чтобы все картинки жили в едином попапе и их можно было перелистывать, поэтому я начал с простого - попросил просто по клику открывать исходную картинку в попапе.
Первая попытка оказалась неудачной, cursor подключил несуществующие библиотеки из ассетов сайта, после корректировки был взят glightbox с CDN:
1. Подключение библиотеки
В основной файл шаблона добавлены необходимые стили и скрипты:
<!-- GLightbox CSS -->
<link href="https://cdn.jsdelivr.net/npm/glightbox/dist/css/glightbox.min.css" rel="stylesheet">
<!-- В конец файла перед </body> -->
<!-- GLightbox JavaScript -->
<script src="https://cdn.jsdelivr.net/gh/mcstudios/glightbox/dist/js/glightbox.min.js"></script>
2. Инициализация лайтбокса
Т.к. весь HTML статьи генерируется - доработать проще уже средствами JS.
В шаблоне записи был добавлен JavaScript-код, который находит все изображения в контенте статьи и делает их кликабельными:
document.addEventListener('DOMContentLoaded', function() {
// Ищем все изображения внутри полей контента
document.querySelectorAll('.card-body [data-bolt-field] img').forEach(function(img) {
// Пропускаем если изображение уже обернуто в ссылку
if (img.parentElement.tagName === 'A') return;
// Создаем элемент ссылки
var link = document.createElement('a');
link.href = img.src;
link.className = 'glightbox';
link.setAttribute('data-gallery', 'article-images');
link.setAttribute('data-description', img.alt || '');
// Добавляем стили для изображения
img.style.transition = 'transform 0.3s ease';
img.style.maxWidth = '100%';
img.style.height = 'auto';
// Оборачиваем изображение в ссылку
img.parentNode.insertBefore(link, img);
link.appendChild(img);
});
// Инициализируем GLightbox
const lightbox = GLightbox({
touchNavigation: true,
loop: true,
autoplayVideos: true
});
});
Результат
Пример можете посмотреть, кликнув на этой картинке:
Теперь вы можете просмотреть все загруженные изображения в статьях в оригинальном разрешении (это еще один повод посмотреть на предыдущие статьи). При клике открывается красивый лайтбокс, в котором можно дополнительно увеличивать изображение и переключать все картинки поста не выходя из попапа, а также видеть подписи к картинкам (обычно я их оставляю в alt).
И все, т.е. то, что я собирался сделать уже много лет было сделано за 5 минут и 3 обращения к Cursor. Последнее время довольно много изменений вношу в блог, недавние правки по просмотрам - из их числа.
Без современных AI инструментов я бы до этого не добрался, а если бы и добрался - то это заняло бы куда больше времени.
Комментариев пока нет
-
Подарочный бокс с ИИ
Пришло то время, когда AI может не только отвечать в чатиках и применяться в di… -
Делаем картинки на сайте кликабельными
Я часто вставляю картинки в хорошем качестве, но до сих пор их нельзя было удоб… -
Включаем функции сбора статистики в ESP32-arduino
Речь пойдет о функциях FreeRTOS vTaskGetRunTimeStats / vTaskList, но таким же… -
Счетчик просмотров в Bolt CMS
Делаем счетчик просмотров для статей в Bolt CMS. Возможные варианты и базовая… -
Скрытый держатель дисков
Ищете куда деть свою коллекцию дисков, а складирование на полках считаете скучн… -
Student48
Для выпускников АСУ ЛГТУ 2014-2021 годов это название говорит о многом, давайте…