Автоматическое заполнение краткого описания товара в uCoz
Работа с товарами в интернет магазине часто превращается в повторяющийся процесс, где самую большую часть времени забирают не творческие задачи, а механические действия. Полное описание товара вводится вручную и получается длинным. После этого требуется выделить небольшой фрагмент и перенести его в краткое описание. Процедура простая, но повторяется снова и снова, не несет пользы и только отнимает время. Чтобы убрать эту рутину применяется небольшой скрипт, который берет текст из полного описания, приводит его к нормальному виду, очищает от HTML и автоматически формирует аккуратную короткую версию примерно из двух сотен символов. Краткое описание появляется само, без ручного копирования и постоянных переключений между полями.
Как работает решение
Скрипт привязан к полю полного описания которое имеет идентификатор dscr. Именно туда редактор вводит основной текст и именно там могут содержаться HTML теги и лишние пробелы. Код превращает этот текст в простой формат через временный контейнер и выравнивает его. Далее происходит обрезка. Скрипт берет первые двести символов, проверяет ближайший пробел и старается не разрывать слово посередине. Уже готовый фрагмент ставится в поле editf brief. Если человек заполнил краткое описание вручную скрипт уважает этот ввод и не перезаписывает данные. Работа происходит тихо и предсказуемо. Скрипт срабатывает только тогда когда поле краткого описания пустое.
Для установки используется страница служебных форм. Решение не вмешивается в структуру шаблона, не создает новых элементов и не нарушает оригинальную разметку. Оно остается полностью прозрачным и влияет только на поведение полей ввода.
Как установить скрипт в uCoz
- Открыть Управление дизайном.
- Перейти в Страницу служебных форм.
- Найти закрывающий тег body.
- Вставить код перед ним.
Полный рабочий код
<?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
Автор: Юрий Герук
Комментарии