Сайдбар с независимой прокруткой в Webasyst 1.3
25.07.2024
При помощи плагинов можно решить многие задачи. Но бывают ситуации, когда приходится прибегать к правке системного кода ShopScript. Это можно требоваться в случае сложности или невозможности решения задачи при помощи плагина и браузерных скриптов. На практике к нему прибегают и пользователи, которые хотят подправить функциональность админки без необходимости изучать разработку плагинов. Один из таких примеров мы и рассмотрим.
При работе с товарами в Webasyst 1.3 определённое неудобство вызывает одновременная прокрутка сайдбара с товарными категориями и таблицы с товаром. Сделаем так, чтобы сайдбар прокручивался независимо от страницы, что повысит удобство работы в старом интерфейсе.
При наведении мыши на сайдбар могут появляться фиксированные панели вверху ("перетащить товары сюда") и внизу (изменение ширины сайдбара). Эти панели предлагают дополнительную функциональность, но нам она не нужна. Уберём эти панели.
Общий подход для решения задач такого плана следующий:
- Найти элемент, с которым нужно что-то сделать
- Найти место в коде, в которое нужно ынести изменение
- В файле документации изменений внести запись о том, что и где было изменено в исходном коде
Для поиска фиксированных панелей открываем панель инструментов разработчика в браузере по F12, щелкаем правой кнопкой на целевом элементе (фиксированный блок категорий), в появившемся диалоге выбираем команду "Исследовать элемент". Определяем id родительского блока - "s-fixed-blocks".
Теперь предстоит самое сложное - найти в коде, где этот элемент фиксируется. Для этого можно воспользоваться поиском строки на сервере, но лучше иметь локальную копию всего сайта. В ней поиск будет производиться быстрее, да и наличие самой копии необходимо.
Обращаем внимание на то, что панели появляются при прокрутке страницы. Значит, при помощи стилей решить вопрос не получится. Действие происходит в каком-то JavaScript файле.
После просмотра выдачи находим интересующий код в файле wa-apps\shop\js-legacy\product\list.js
В начало функции setFixed() добавляем оператор выхода из функции, чтобы код внутри неё не выполнялся и не отображал фиксированные панели.
Панель изменения ширины отображается при наведении мыши на сайдбар. Такое действие реализуется при помощи стиля и нужно найти файл CSS. При помощи поиска по id данной панели находим строку #s-sidebar:hover .s-sidebar-width-control { opacity: 1; } в файле wa-apps\shop\css-legacy\shop.css, которую нужно закомментировать.
Мы получили "чистый" сайдбар, который нужно отредактировать так:
- Растянуть его на всю достиупную высоту
- Зафиксировать верхнюю координату Y с учётом прокрутки страницы и скрытия главного меню админки
- Добавить вертикальную полосу прокрутки
Для простоты можно все эти действия отладить при помощи браузерного скрипта в Tampermonkey. Затем можно их будет перенести в плагин. Возьмём готовый скрипт фиксации панели из статьи Webasyst 1.3: закрепление правой панели в каталоге товаров
Скрипт для фиксации правой панели
Добавим в него требуемый функционал
В функции инициализации fixSidebar происходит первоначальная настройки стиля сайдбара, а в функции setSidebarTop - изменение верхнего положения сайдбара с учетом прокрутки страницы.