---
title: Страница «Фабрики»
section: pages
theme: mebelidomanet
framework: bootstrap
redesign_status: done
last_updated: 2026-07-18
files:
  php_inline: []
  php_partials:
    - views/factory/index.php
    - views/factory/detail.php
    - views/site/_factory-card.php
  scss:
    - src/client/factory-md/style.scss
    - src/client/catalog-nav-md/style.scss
  js: []
  widgets: []
  shared: []
deps_on:
  - catalog/category-page
  - catalog/aside-menu
  - catalog/sorting-bar
  - catalog/product-card
themes_with_analog:
  - mebelmall
  - dommebeli
  - mebelmart
  - freshshop
  - mebelmag
  - mebelbazar
  - hormebel
  - cartzilla
  - mebelmarket
  - stolkomebeli
---

# Page Factory

## Назначение

Каталог фабрик-производителей (`/factory`) + страница одной фабрики (`/factory/<url>`).

## Где живёт

- **HTML:** `views/factory/index.php`, `views/factory/detail.php`.
- **Карточка:** `views/site/_factory-card.php` — общая с блоком «Партнёры» на главной.
- **SCSS:** `src/client/factory-md/style.scss` (сетка + карточка + фолбэк), `src/client/catalog-nav-md/style.scss` (сайдбар).

## Редизайн

**Выполнен** (2026-07-18) в стиле ../mebel-landing на чистом BS4+SCSS.

- **Заголовки** обеих страниц → `.md-cat-head` из [category-page](../catalog/category-page.md).
- **Сетка фабрик** — `.md-factory__grid.md-factory__grid--page`. Карточка `.md-factory__item` **переиспользуется с главной** (блок «Партнёры»), новый только модификатор сетки: на главной `auto-fill minmax(200px)` даёт на телефоне одну колонку, на полной странице нужны фиксированные 2 → 3 (sm) → 4 (lg). Было: `col-6 col-sm-3` + `.factory__item` с рамкой и подписью 0.85rem.
- **Листинг товаров на detail** → `.md-listing` (`col-6 col-lg-4`, 2 в ряд на телефонах). Было `col-md-4`.
- **Описание фабрики** → `.md-factory-intro`.
- Легаси `src/client/factory/index.scss` (`.factory`, `.factory__item`) не тронут — бандл общий на все темы.

## Данные: фильтр по url и фолбэк логотипа

Две проблемы, из-за которых страница выглядела сломанной, а не просто старой:

1. **97 фабрик из 180 не имеют `url`.** Их карточки вели на `/factory/` (битая ссылка), а detail-страницы не существует. Ниже сетки получалось ~100 пустых плиток. Исправлено фильтром в `FactoryController::actionIndex` — `url IS NOT NULL AND url <> ''`. Фильтр в контроллере, а не во вьюхе, поэтому **действует во всех темах** (контроллеры не входят в `pathMap`).
2. **`https://via.placeholder.com/200x100` — мёртвый сервис.** Подставлялся фабрикам без логотипа, картинки просто не грузились. Заменён на текстовую плитку `.md-factory__fallback` (название фабрики крупным Fraunces на `$md-bg`). Заодно чинит тот же латентный баг на главной, т.к. partial общий.
   - Название берётся из `fullTitle` с фолбэком на `title`: у части фабрик с рабочим url `fullTitle` пуст, а `title` заполнен.

На домене localhost после фильтра: 69 карточек (пересечение с `factorySaleDepartment`), 0 битых картинок, 0 битых ссылок.

## Форма предоплаты

В сайдбаре `/factory` была рукописная `<form method="POST" class="feedback">` без `action`. **Она не работала**: `FactoryController::actionIndex` POST не обрабатывает, submit просто перезагружал страницу. Заменена на `Component::render('payment/index.mustache')` — тот же виджет и тот же флаг `$domain->showPrepayForm`, что на [category-page](../catalog/category-page.md) и в `views/page/payment.php`.

**Флаг `showPrepayForm` = 0 на всех 159 активных доменах**, т.е. блок сейчас не отображается нигде. Сам виджет `payment/index.mustache` ещё не редизайнен (`border-light`, uppercase h6, `btn-success`) — отдельный блок в очереди.

## Скоупинг: заморозка других тем

Темы **cartzilla, helloworld, hormebel, mebelbazar, mebelmarket, stolkomebeli** не имели своих `views/factory/` и через `pathMap` (`config/web.php:42`) фолбэкались на корневые — редизайн прилетел бы и им. Перед правкой корня в каждую скопированы прежние `index.php` / `detail.php` / `_item.php` (18 файлов), поэтому **разметка** у них не изменилась.

Заморозка касается только вьюх: фильтр по `url` из контроллера действует и на них (см. выше) — там он тоже убирает битые плитки. Фолбэк логотипа до них не доходит, они рендерят свой `_item.php` со старым placeholder-ом.

Темы dommebeli, freshshop, mebelmag, mebelmall, mebelmart имели свои вьюхи и не затронуты вовсе.

Корневой `views/factory/_item.php` больше не используется (`index.php` рендерит `../site/_factory-card`), но оставлен: все 11 тем имеют собственные копии. Можно удалить отдельным коммитом.

## Сайдбар категорий

`.menu-catalog-sidebar` (виджет `MenuCategorys`) — общий с `/search`. Редизайн вынесен в `src/client/catalog-nav-md/style.scss` на **opt-in классе**: `md-catalog-nav` добавляется в `parentClass` только на переверстанных страницах (`views/search/{index,detail}.php`, `views/factory/{index,detail}.php`). Селектор `.menu-catalog-sidebar.md-catalog-nav` (0,2,0) перебивает легаси (0,1,0) из `src/client/menu-catalog-sidebar/index.scss`, который не трогаем — бандл общий на все темы.

`overflow: hidden` на контейнере намеренно не ставится: выпадающий подсписок категорий позиционирован абсолютно и был бы обрезан.
