Автоматическое заполнение краткого описания товара в uCoz

Юрий Герук 2025-12-01 40
Автоматическое заполнение краткого описания товара в uCoz

Содержание

    Автоматическое заполнение краткого описания товара в uCoz

    Работа с товарами в интернет магазине часто превращается в повторяющийся процесс, где самую большую часть времени забирают не творческие задачи, а механические действия. Полное описание товара вводится вручную и получается длинным. После этого требуется выделить небольшой фрагмент и перенести его в краткое описание. Процедура простая, но повторяется снова и снова, не несет пользы и только отнимает время. Чтобы убрать эту рутину применяется небольшой скрипт, который берет текст из полного описания, приводит его к нормальному виду, очищает от HTML и автоматически формирует аккуратную короткую версию примерно из двух сотен символов. Краткое описание появляется само, без ручного копирования и постоянных переключений между полями.

    Как работает решение

    Скрипт привязан к полю полного описания которое имеет идентификатор dscr. Именно туда редактор вводит основной текст и именно там могут содержаться HTML теги и лишние пробелы. Код превращает этот текст в простой формат через временный контейнер и выравнивает его. Далее происходит обрезка. Скрипт берет первые двести символов, проверяет ближайший пробел и старается не разрывать слово посередине. Уже готовый фрагмент ставится в поле editf brief. Если человек заполнил краткое описание вручную скрипт уважает этот ввод и не перезаписывает данные. Работа происходит тихо и предсказуемо. Скрипт срабатывает только тогда когда поле краткого описания пустое.

    Для установки используется страница служебных форм. Решение не вмешивается в структуру шаблона, не создает новых элементов и не нарушает оригинальную разметку. Оно остается полностью прозрачным и влияет только на поведение полей ввода.

    Как установить скрипт в uCoz

    1. Открыть Управление дизайном.
    2. Перейти в Страницу служебных форм.
    3. Найти закрывающий тег body.
    4. Вставить код перед ним.

    Полный рабочий код

    <?if($PAGE_ID$='add'||$PAGE_ID$='edit')?> 
    <script>
    (function () {
     const MAX_LEN = 200;
     const POLL_MS = 500;
    
     function htmlToPlainText(html) {
     if (!html) return "";
     const tmp = document.createElement("div");
     tmp.innerHTML = html;
     let text = tmp.textContent || tmp.innerText || "";
     text = text.replace(/\s+/g, " ").trim();
     return text;
     }
    
     function clampAtWord(str, max) {
     if (str.length <= max) return str;
     let cut = str.slice(0, max);
     const lastSpace = cut.lastIndexOf(" ");
     if (lastSpace > 0 && lastSpace >= max - 50) {
     cut = cut.slice(0, lastSpace);
     }
     return cut.trim();
     }
    
     function syncBrief() {
     const src = document.getElementById("dscr");
     const dst = document.getElementById("editf-brief");
     if (!src || !dst) return;
    
     if (dst.value.trim().length > 0) return;
    
     const raw = src.value || "";
     const plain = htmlToPlainText(raw);
     const brief = clampAtWord(plain, MAX_LEN);
    
     if (brief && dst.value !== brief) {
     dst.value = brief;
     dst.dispatchEvent(new Event("input", { bubbles: true }));
     dst.dispatchEvent(new Event("change", { bubbles: true }));
     }
     }
    
     let lastSrcVal = null;
     const timer = setInterval(function () {
     const src = document.getElementById("dscr");
     const dst = document.getElementById("editf-brief");
    
     if (!src || !dst) return;
     if (dst.value.trim().length > 0) return;
    
     if (lastSrcVal === null) {
     lastSrcVal = src.value;
     syncBrief();
     }
    
     if (src.value !== lastSrcVal) {
     lastSrcVal = src.value;
     syncBrief();
     }
     }, POLL_MS);
    
     function attachOnce() {
     const src = document.getElementById("dscr");
     if (!src) return false;
     ["input", "change", "keyup", "paste"].forEach(evt =>
     src.addEventListener(evt, syncBrief, { passive: true })
     );
     return true;
     }
    
     if (document.readyState === "loading") {
     document.addEventListener("DOMContentLoaded", attachOnce, { once: true });
     } else {
     attachOnce();
     }
    })();
    </script>
    <?endif?>
    

    Заключение

    Автоматизация таких мелких процессов всегда дает заметный результат, особенно когда речь идет о заполнении десятков товаров. Скрипт работает в духе старой школы. Он простой, прямой и предсказуемый. Он снимает лишнюю нагрузку, ускоряет работу и помогает вести магазин аккуратнее. Такие решения сохраняют время и нервы и делают админку значительно удобнее.

    Оцените полезность материала!

    Лицензия: CC BY-SA 4.0

    Автор: Юрий Герук

    Похожие материалы:

    Комментарии