b2bon.ru

модуль companies

Публикации: обзор

Модуль публикаций реализован в js/cybervela.companies.js внутри класса company. Он позволяет:

  • Отображать, создавать, редактировать, скрывать, удалять и просматривать публикации в модальном окне
  • Хранить данные в localStorage через core.getFromStorage/core.setToStorage
  • Инициализировать дефолтный набор при первом запуске

Где отображаются публикации

Публикации рендерятся в контейнерах с селектором .wrap[data-key="publications"]. Отрисовка вызывается методом renderPublications(publications, root).

Атрибуты контейнера

  • data-date-sort — порядок сортировки по дате: asc/desc (по умолчанию desc)
  • data-quantity — ограничение числа карточек на вывод (число)
  • data-maxlength — максимальная длина текста (по умолчанию 140)
  • data-action — если true, отображается блок действий (карандаш, корзина, глаз)

Структура записи публикации

{
  "id": number,          // числовой идентификатор
  "title": string,       // заголовок
  "content": string,     // текст
  "date": "YYYY-MM-DD",// дата публикации
  "hidden": boolean      // флаг скрытия из списка
}

Жизненный цикл данных

  1. При загрузке модуля формируется дефолтный массив публикаций и записывается в localStorage ключом publications, если там ещё ничего нет
  2. Если сохранённые публикации существуют, они подменяют дефолтные
  3. Любые изменения (создание/редактирование/скрытие/удаление) сохраняются обратно в localStorage через savePublicationsToStorage()

Действия пользователя и обработчики

  • Сортировка по дате: Клик по иконке в .data_sort i переключает data-date-sort между asc/desc, перерисовывает список. Переключаются классы иконки icon-sort-amount-ascicon-sort-amount-desc.
  • Скрыть публикацию: Клик по .publication_action .icon-eye ставит hidden = true, обновляет список и сохраняет состояние.
  • Показать вкладку со всеми публикациями: Клик по .view_all_publications переключает активный таб на .tab.all_publications.
  • Редактировать: Клик по .publication_action .icon-pencil открывает модальное окно с префиллом полей. После сохранения вызывается upsertPublication(payload, pubId).
  • Удалить: Клик по .publication_action .icon-bin удаляет запись по id, перерисовывает список и сохраняет состояние.
  • Читать далее: Клик по .publication-read-more открывает модальное окно с полной публикацией. Ссылка появляется автоматически, если content был обрезан по data-maxlength.
  • Добавить публикацию: Клик по .add_publication открывает модальное окно создания. По сохранению вызывается upsertPublication(payload, null).

Отрисовка публикаций

renderPublications применяет фильтр по hidden, сортирует по дате согласно data-date-sort, ограничивает количество по data-quantity и обрезает текст по data-maxlength. Для каждой публикаации может отображаться блок действий:

  • Заголовок: .publication-title
  • Дата: .publication-date
  • Текст: .publication-content
  • Действия: .publication_action с иконками icon-pencil, icon-bin, icon-eye
  • Ссылка «Читать далее»: .publication-read-more

Программные точки расширения

  • renderPublications(publications, root?) — переотрисовать блок(и) публикаций
  • openPublicationModal(initial, onSave) — открыть модалку для создания/редактирования
  • upsertPublication(data, existingId?) — создать или обновить запись
  • savePublicationsToStorage() — сохранить массив публикаций

Замечания по интеграции

  • Для корректной работы UI требуется разметка табов и контейнеров .wrap[data-key="publications"]
  • Иконки действий зависят от шрифта иконок (см. css/icomoon.css)
  • Данные хранятся локально в браузере; серверных методов для публикаций в текущей реализации пока нет