Skip to content

Issue #78: выбор количества строк, кнопки в начало/конец, хеш в чанках#80

Merged
biz87 merged 3 commits intobetafrom
feat/issue-78-rows-per-page-and-pagination
Feb 16, 2026
Merged

Issue #78: выбор количества строк, кнопки в начало/конец, хеш в чанках#80
biz87 merged 3 commits intobetafrom
feat/issue-78-rows-per-page-and-pagination

Conversation

@Ibochkarev
Copy link
Copy Markdown
Member

Описание

  • Issue [Feature] Управление количеством показа ресурсов в таблице каталога #78: В таблице товаров категории добавлен выбор количества строк на странице: выпадающий список «Показывать по» с вариантами 10, 20, 25, 50, 100. Выбор сохраняется в localStorage (ms3_category_products_rows). При смене значения выполняется перезагрузка списка с первой страницы.
  • Пагинация: Добавлены кнопки перехода в начало списка (двойная стрелка влево) и в конец (двойная стрелка вправо).
  • Сборка: В имена чанков Vite добавлен хеш ([name]-[hash].min.js), чтобы избежать загрузки устаревших чанков после пересборки и ошибки «export named 'u'».

Затронутые файлы: CategoryProductsGrid.vue, лексиконы vue.inc.php (en/ru), контроллер category/update.class.php, vite.config.js.

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите):

Связанные Issues

Closes #78

Как это было протестировано?

  • Ручное тестирование (категория в админке: пагинация, выбор «Показывать по», переход в начало/конец)
  • Автоматические тесты (ESLint, Prettier, Stylelint в vueManager)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: 1.4.1-beta1
  • MODX:
  • PHP:

Скриншоты (если применимо)

До После
image image
Только «Назад» / «Вперёд», 20 строк «В начало» / «Назад» / «Вперёд» / «В конец» + «Показывать по» 10/20/25/50/100

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en): rows_per_page, first_page, last_page
  • PHPStan проходит без новых ошибок
  • ESLint проходит без ошибок (для JS/Vue изменений)
  • Обновлён CHANGELOG.md (для значимых изменений)

Дополнительные заметки

  • Контроллер передаёт в config category_products_rows (опциональная настройка ms3_category_products_default_rows, по умолчанию 20).
  • Чанки с хешем: после npm run build имена вида index-XXXX.min.js; entry-точки (category-products.min.js и т.п.) без хеша.

@Ibochkarev Ibochkarev self-assigned this Feb 13, 2026
@Ibochkarev Ibochkarev requested a review from biz87 February 13, 2026 03:54
@biz87
Copy link
Copy Markdown
Member

biz87 commented Feb 13, 2026

Ревью PR #80

PR решает issue #78 и в целом сделан хорошо — лексиконы на двух языках, валидация значений, сброс на первую страницу при смене количества строк. Есть несколько замечаний:

1. Приоритет config vs localStorage (критично)

Сейчас приоритет: config > localStorage > default(20).

const configRows = ms3Config?.category_products_rows
if (configRows && rowsPerPageOptions.includes(Number(configRows))) {
  rows.value = Number(configRows)
} else {
  const saved = parseInt(localStorage.getItem(ROWS_STORAGE_KEY), 10)
  ...
}

Если админ задал ms3_category_products_default_rows = 25, то выбор пользователя из localStorage всегда игнорируется. Пользователь выбирает 50, перезагружает страницу — снова 25. Сохранение в localStorage становится бесполезным.

Правильный приоритет: localStorage (выбор пользователя) > config (дефолт от админа) > 20

2. Хеш в чанках — накопление старых файлов

chunkFileNames: 'assets/.../[name]-[hash].min.js'

Vite не чистит outDir вне корня проекта (есть warning при сборке). Каждый npm run build создаёт новые файлы с новыми хешами, а старые остаются на диске. Папка vue-dist/ будет расти.

Нужно добавить очистку перед сборкой, например:

"prebuild": "rimraf ../assets/components/minishop3/js/mgr/vue-dist/index*.min.js"

3. Конфликт с PR #79

Изменение в _variables.scss (добавлена пустая строка) идентично тому, что уже влито в PR #79. Будет конфликт при мерже.

4. Нет try/catch при чтении localStorage в onMounted

saveRowsPreference обёрнут в try/catch, а localStorage.getItem в onMounted — нет. В приватном режиме Safari может выбросить исключение. Стоит обернуть для консистентности.

@biz87 biz87 merged commit 68bb510 into beta Feb 16, 2026
@biz87 biz87 deleted the feat/issue-78-rows-per-page-and-pagination branch February 16, 2026 20:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Управление количеством показа ресурсов в таблице каталога

2 participants