S-WEBS24

Битрикс24

CRM, процессы и приложения для вашей компании

Вернуться к списку Вернуться к статьям
Статьи

Как совместить массовый импорт FAQ с индивидуальным текстом карточки товара

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

Импорт задаёт операцию, наследование выбирает текст
Учебная таблица переходов FAQ, без реальных текстов и товарных ключей.
Нет поля и очистить override — разные операции Учебный импорт FAQ. Неполный пакет сохраняет ручную редакцию; явная очистка возвращает шаблон. Следующий неполный пакет не восстанавливает удалённый override.

Исходное требование просит произвольный текст вкладки, массовую загрузку и сохранение прежнего шаблона до появления собственного содержимого. Ниже рассматривается учебная таблица переходов. Клиентские вопросы, внутренние поля и реальные товарные ключи не используются. Общая модель наследования раскрывается отдельно; здесь основное внимание уделено контракту импорта и сохранению данных.

Разделить источник показа и операцию импорта

Наследование выбирает, какой текст показать сейчас, а импорт меняет состояние карточки. Если эти решения смешаны, пустая ячейка может случайно отключить общий FAQ или стереть ручной ответ. Сначала опишите состояния: наследовать, собственный текст и явное отключение, если оно нужно. Затем определите, какие операции переводят между ними.

Текст карточки переопределяет FAQ раздела
Скриншот собственного учебного стенда: текст карточки переопределяет faq раздела. Синтетические данные; это не интерфейс клиента или админка 1С-Битрикс.

Учебная карточка А наследует шаблон, Б имеет собственный текст, В отключена явно. Одна и та же входная пустота не может надёжно выразить все три намерения. Поле операции или другой однозначный механизм делает контракт читаемым. Не обязательно строить сложный импортёр на будущее, но текущие действия должны различаться без догадки.

Собственный текст может полностью заменять шаблон или дополнять его по согласованной модели. Не меняйте эту политику побочно при добавлении колонки CSV. Если раньше незаполненные карточки показывали общий набор, они должны сохранить его до явного переопределения. Совместимость старых данных является частью приёмки, а не отдельным необязательным украшением.

Задать операции явно

Минимальный набор может включать «не менять», «установить текст» и «вернуть наследование». Если требуется отключение блока, оно выделяется отдельно. Названия операций и формат выбираются по системе, но смысл должен быть документирован. Пустая строка текста не обязана означать удаление, особенно если таблица выгружается из источника, где незаполненные колонки обычны.

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

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

Входная операцияДо импортаОжидаемый итог
Не менятьСобственный текстТекст сохранён
УстановитьНаследованиеПоявился индивидуальный текст
Вернуть наследованиеСобственный текстСнова выбран шаблон
ОтключитьЛюбое разрешённоеБлок скрыт явно

Выбрать устойчивый ключ карточки

Импорт должен находить товар по однозначному разрешённому ключу. Название ненадёжно: оно может повторяться и меняться. В публичном примере используйте условные А/Б, а техническое сопоставление проверяйте в закрытом контексте. Если один ключ нашёл несколько записей, нельзя молча обновлять первую. Неоднозначность должна стать видимой ошибкой строки.

Проверьте принадлежность сайту и языку. Одна модель может иметь несколько локализованных представлений, а файл относиться только к одной версии. Импорт русского FAQ не должен перезаписать остальные языки из-за общего ключа без контекста. Правило наследования переводов и правило операции остаются разными слоями.

Отсутствующий товар тоже требует политики. Можно отклонить строку, отложить или использовать другой согласованный путь, но нельзя создавать произвольную карточку без явного требования. Задача FAQ не даёт автоматического разрешения менять структуру каталога. Итоговый отчёт должен показывать такие исключения отдельно от успешно применённых изменений.

Проверить формат таблицы

CSV имеет правила разделителей и кавычек, описанные RFC4180, но реальные импортёры могут использовать согласованный вариант формата. Укажите кодировку, разделитель и способ многострочного текста. Ответ FAQ способен содержать переносы и символы, которые нельзя безопасно делить простой операцией по строкам. Используйте штатный парсер и проверенный пример.

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

Не смешивайте синтаксическую пустоту и смысловую пустоту. Ячейка с пробелами, отсутствующая колонка и пустая строка могут требовать разной нормализации. Операция импорта определяет намерение, а текст проходит свою проверку. Так парсер не становится скрытым владельцем бизнес-правила «стереть FAQ».

Различать текст и HTML

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

Если поле текстовое, выводите его безопасно как текст с предусмотренными переносами. Если разрешена разметка, используйте согласованную политику очистки и проверки. Удаление одного тега script недостаточно для универсальной безопасности. Не добавляйте новые библиотеки без оценки существующего механизма проекта, но и не заменяйте его случайной регулярной строкой.

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

Сохранить ручную редактуру по правилу

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

Полезно хранить происхождение и версию исходных данных в закрытом контексте. Тогда можно увидеть, что текст изменён после последнего импорта, и выбрать согласованное действие. Это не обязательно сложная история каждого символа. Достаточно минимального механизма, который предотвращает незаметную потерю содержательной редакторской работы.

Учебный сценарий: импорт установил текст Б1, редактор изменил на Б2, затем пришёл тот же файл Б1. Ожидаемый результат задаётся заранее. Он может быть конфликтом, сохранением Б2 или осознанной заменой по политике. Главное, чтобы повтор не назывался безопасным автоматически, когда он способен стереть новую ручную версию.

Сделать предварительную проверку

До применения сформируйте ограниченный предпросмотр: найденный товар, операция, текущий режим и ожидаемый результат. Покажите ошибки ключей, неподдерживаемую разметку и неоднозначные действия. Не требуется копировать весь большой текст в отчёт, особенно если он содержит чувствительные сведения. Достаточно безопасной сводки и разрешённого просмотра конкретной строки.

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

Применяйте только проверенный набор по разрешённой процедуре. На учебной копии возьмите три карточки: с наследованием, собственным текстом и явным отключением. Сохраните состояния до запуска, ожидаемую операцию каждой строки и фактический результат. Если импортёр недоступен, подтверждённой остаётся лишь проверка формата и таблицы переходов; обновление данных и конечный показ требуют отдельной проверки.

Проверить повтор и частичный отказ

Повтор одинакового файла должен давать предсказуемый итог. Установка текста не должна добавлять его второй раз, возврат к шаблону оставлять пустую индивидуальную копию, а пропуск менять данные. Это и есть существенная проверка повторного выполнения. Она защищает от ситуации, когда оператор не знает, какие строки успели примениться до сбоя.

Если процесс прервался, отчёт должен показывать подтверждённые изменения и непроверенный остаток. Не объявляйте весь файл успешно загруженным по факту запуска. Для фоновой очереди сохраняйте связь строки и результата. Повтор должен использовать существующую модель идемпотентности или состояния, а не создавать новый неконтролируемый путь записи.

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

Сверить публичный результат

После учебного импорта откройте карточки с разными итоговыми режимами. Товар без индивидуального текста должен продолжать показывать шаблон, собственный текст заменить или дополнить его по выбранной модели, отключённый блок не появляться. Проверка сохранённого поля недостаточна: механизм наследования может трактовать его иначе.

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

Проверьте узкую ширину, длинный ответ и доступное раскрытие вкладки. Импортированный текст не должен ломать структуру страницы. Если FAQ размечается машинно, он должен соответствовать видимому содержанию и актуальным правилам получателя. Обещание расширенного поискового результата по одному FAQ не даётся.

Разобрать один учебный проход

В условном наборе карточка А наследует общий FAQ, а строка файла не задаёт операции. Она остаётся без изменения. Карточка Б имеет ручную редакцию после предыдущего импорта; новая строка попадает в предусмотренный конфликт, если политика защищает такую правку. Карточка В получает явный возврат к шаблону. Это три разных результата, хотя текстовые ячейки могут выглядеть одинаково пустыми.

В отчёте разделите применённое действие, пропуск без изменения и конфликт. Нельзя объединять их в общий статус «обработано» и считать это доказательством обновления. Повтор того же учебного набора должен сохранить выбранную политику. Так оператор понимает, что нужно исправить в источнике, а что уже соответствует ожиданию и не требует новой записи.

Подготовить матрицу переходов

СценарийКритерий
Пустая ячейка без операцииНе трактуется случайной очисткой
Новое индивидуальное содержимоеПоявляется по выбранному приоритету
Возврат к шаблонуСтарое переопределение снято
Повтор файлаНет дублей и непредсказуемой потери
Ручная правка после импортаДействует политика конфликта
Частичный отказИзвестны подтверждённые строки и остаток

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

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

Связанный разбор: Регламент обновления сайта: кто отвечает за контент, формы, аналитику и безопасность.

Документация и источники

  • RFC4180: CSV: Сериализация таблицы; операции пустых значений определяются отдельным бизнес-контрактом
  • MDN: innerHTML: Необходимость различать текст и разрешённую HTML-разметку при импорте