## Какие именно места ломались
### 1. Картинки товара
Лог:
- line 1262 — `popup`
- line 1263 — `thumb`
- line 1273 — `images`
Причина: модуль напрямую обращался к индексам массива без `isset()` / `!empty()`.
### 2. Атрибуты
Лог:
- line 1771 — `attribute_groups`
- line 1771 — `Invalid argument supplied for foreach()`
Причина: `foreach($data['attribute_groups'] as ...)` выполнялся даже когда `attribute_groups` отсутствует или не массив.
### 3. Отзывы и остатки
Лог:
- line 1796 — `product_id`
- line 1821 — `product_id`
- line 1822 — `stock_status_id`
Причина: код делает SQL-запросы по `product_id`, даже когда `product_id` не передан.
Плюс обращение к `$ss_id_query->row['stock_status_id']` без проверки.
### 4. Цена
Лог:
- line 1845 — `special`
- line 1846 — `price`
Причина: цена и спеццена не всегда присутствуют в массиве `$data`.
### 5. Данные товара
Лог:
- line 1638 — `model`
- line 1639 — `manufacturer`
Причина: на некоторых страницах эти поля отсутствуют.
---
## Что я исправил
Я внёс защитные проверки:
- заменил прямой доступ к индексам на безопасный:
- `isset(...)`
- `!empty(...)`
- добавил проверки, что данные являются массивом перед `foreach`
- добавил значения по умолчанию для:
- `price`
- `special`
- `model`
- `manufacturer`
- `reviewCount`
- `rating`
- защитил запросы к БД, если нет `product_id`
- защитил чтение `stock_status_id`
- защитил обработку галереи товара, если `images` отсутствует
---
## Суть правок по коду
### Было
```php
$mdp['image'] = $this->clearImage($data['popup']);
$mdp['thumb'] = $this->clearImage($data['thumb']);
```
### Стало
```php
$mdp['image'] = !empty($data['popup']) ? $this->clearImage($data['popup']) : '';
$mdp['thumb'] = !empty($data['thumb']) ? $this->clearImage($data['thumb']) : '';
```
---
### Было
```php
if($this->mdp->mdc('product_gallery') && $data['images']){
foreach($data['images'] as $image){
```
### Стало
```php
if($this->mdp->mdc('product_gallery') && !empty($data['images']) && is_array($data['images'])){
foreach($data['images'] as $image){
```
---
### Было
```php
foreach($data['attribute_groups'] as $attribute_group){
```
### Стало
```php
if($this->mdp->mdc('product_attribute') && !empty($data['attribute_groups']) && is_array($data['attribute_groups'])){
foreach($data['attribute_groups'] as $attribute_group){
```
---
### Было
```php
$reviews_query = $this->db->query("... product_id = '" . (int)$data['product_id'] . "'");
```
### Стало
```php
if($this->mdp->mdc('product_reviews') && !empty($data['product_id'])){
$reviews_query = $this->db->query("... product_id = '" . (int)$data['product_id'] . "'");
```
---
### Было
```php
$data['special'] = strip_tags(str_replace(",",".",$data['special']));
$data['price'] = strip_tags(str_replace(",",".",$data['price']));
```
### Стало
```php
$data['special'] = isset($data['special']) ? strip_tags(str_replace(",",".",$data['special'])) : '';
$data['price'] = isset($data['price']) ? strip_tags(str_replace(",",".",$data['price'])) : '';
```
---
### Было
```php
$mdp['model'] = $this->clearText($data['model']);
$mdp['brand'] = $this->clearText($data['manufacturer']);
```
### Стало
```php
$mdp['model'] = isset($data['model']) ? $this->clearText($data['model']) : '';
$mdp['brand'] = isset($data['manufacturer']) ? $this->clearText($data['manufacturer']) : '';
```
---