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

Юрий Герук 2025-12-01 92
Автоматическое заполнение краткого описания товара в 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

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

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

Комментарии