Created
February 10, 2025 07:34
-
-
Save baslie/fa4a2d040cba7b0dc05793d2ce5a88c1 to your computer and use it in GitHub Desktop.
Скрываем некоторые характеристики в каталоге Тильды
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!-- ********************************************************************** --> | |
| <!-- Скрываем некоторые характеристики в каталоге Тильды --> | |
| <!-- ********************************************************************** --> | |
| <script> | |
| document.addEventListener("DOMContentLoaded", function(){ | |
| // Константы для настроек | |
| const ALLOWED_NAMES = [ | |
| "Размер моста", | |
| "Материал оправы", | |
| "Гендерная принадлежность", | |
| "Форма оправы", | |
| "Вид оправы" | |
| ]; | |
| const DELAY_MS = 100; | |
| const SORT_CHARCS_ALPHABETICALLY = true; | |
| // Преобразуем имена в регулярные выражения (регистронезависимо, ищем в начале строки) | |
| const ALLOWED_REGEXES = ALLOWED_NAMES.map(function(name) { | |
| return new RegExp("^" + name, "i"); | |
| }); | |
| (function () { | |
| // Функция фильтрации характеристик с использованием регулярных выражений | |
| function filterProductCharcs() { | |
| setTimeout(function(){ | |
| // Ищем контейнер, в котором расположены все характеристики товара | |
| var charcsContainer = document.querySelector('.js-store-prod-all-charcs'); | |
| if (charcsContainer) { | |
| // Находим все параграфы с характеристиками | |
| var paragraphs = charcsContainer.querySelectorAll('p.js-store-prod-charcs'); | |
| paragraphs.forEach(function(p){ | |
| var text = p.innerText.trim(); | |
| // Проверяем, соответствует ли текст хотя бы одному из разрешённых шаблонов | |
| var isAllowed = ALLOWED_REGEXES.some(function(regex){ | |
| return regex.test(text); | |
| }); | |
| // Если характеристика разрешена, делаем её видимой, иначе скрываем | |
| p.style.display = isAllowed ? "block" : "none"; | |
| }); | |
| // Если включена сортировка, упорядочим разрешённые характеристики в алфавитном порядке | |
| if (SORT_CHARCS_ALPHABETICALLY) { | |
| // Получаем массив разрешённых параграфов | |
| var allowedParas = Array.from(paragraphs).filter(function(p) { | |
| return p.style.display === "block"; | |
| }); | |
| // Сортируем по алфавиту (учитываем русскую локаль) | |
| allowedParas.sort(function(a, b) { | |
| return a.innerText.localeCompare(b.innerText, "ru", { sensitivity: "base" }); | |
| }); | |
| // Перемещаем отсортированные параграфы в конец контейнера | |
| allowedParas.forEach(function(p) { | |
| charcsContainer.appendChild(p); | |
| }); | |
| } | |
| } | |
| }, DELAY_MS); | |
| } | |
| // Применяем фильтрацию, если карточка товара уже отображается | |
| filterProductCharcs(); | |
| // При клике на ссылку товара (с URL, содержащим "/tproduct/") | |
| // запускаем фильтрацию после появления всплывающей карточки | |
| document.addEventListener('click', function(event){ | |
| if (event.target.closest('a[href*="/tproduct/"]')) { | |
| setTimeout(function(){ | |
| filterProductCharcs(); | |
| }, DELAY_MS); | |
| } | |
| }); | |
| })(); | |
| }); | |
| </script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment