Алексей Костюк

Как в шаблоне Unishop 2 Opencart 3 сделать, чтобы дополнительные изображения выводились первыми в карточке товара?

Появилась задача от клиента сделать так, чтобы дополнительные изображения показывались первыми, а главное изображение в конце карточки товара. Шаблон Unishop 2 Opencart 3.

Решение. Редактируем контроллер /catalog/controller/product/product.php и меняем всё что между:

$this->load->model('tool/image');
  ...
   if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {

На этот код:

$results = $this->model_catalog_product->getProductImages($this->request->get['product_id']);

            $data['images'] = array();

            if (count($results) == 0) {
                // Если нет дополнительных изображений, используем только основное
                if ($product_info['image']) {
                    $data['popup'] = $this->model_tool_image->resize($product_info['image'],
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'),
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')
                    );

                    $data['thumb'] = $this->model_tool_image->resize($product_info['image'],
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_width'),
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_height')
                    );

                    $data['small'] = $this->model_tool_image->resize($product_info['image'],
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_width'),
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_height')
                    );
                } else {
                    $data['popup'] = '';
                    $data['thumb'] = '';
                    $data['small'] = '';
                }
            } else {
                // Если есть дополнительные изображения, загружаем их первыми
                $im = 0;
                foreach ($results as $result) {
                    $im++;
                    if ($im > 1) {
                        $data['images'][] = array(
                            'popup' => $this->model_tool_image->resize($result['image'],
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'),
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')
                            ),
                            'thumb' => $this->model_tool_image->resize($result['image'],
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_width'),
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_height')
                            ),
                            'small' => $this->model_tool_image->resize($result['image'],
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_width'),
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_height')
                            )
                        );
                    } else {
                        // Первое доп. изображение становится основным
                        $data['popup'] = $this->model_tool_image->resize($result['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')
                        );

                        $data['thumb'] = $this->model_tool_image->resize($result['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_height')
                        );

                        $data['small'] = $this->model_tool_image->resize($result['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_height')
                        );
                    }
                }

                // Если основное изображение не совпадает с первым доп. изображением, добавляем его в конец
                if ($product_info['image'] && $product_info['image'] != $results[0]['image']) {
                    $data['images'][] = array(
                        'popup' => $this->model_tool_image->resize($product_info['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')
                        ),
                        'thumb' => $this->model_tool_image->resize($product_info['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_height')
                        ),
                        'small' => $this->model_tool_image->resize($product_info['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_height')
                        )
                    );
                }
            }

Результат:

Видим, что доп. изображение стало первым Видим, что доп. изображение стало первым

В админке:

Для чего это нужно? В категории товара клиенту необходимо было показать своё главное изображение, а в карточке товара сразу реальное фото. После изменений контроллера не забываем очистить модификаторы иначе изменений. Сразу скажу, что решение не подойдет для стандартного и других шаблонов.

Для стандартного шаблона Opencart 3 решение примерно таким же, только без переменной small:

$results = $this->model_catalog_product->getProductImages($this->request->get['product_id']);

            $data['images'] = array();

            if (count($results) == 0) {
                // Если нет дополнительных изображений, используем только основное
                if ($product_info['image']) {
                    $data['popup'] = $this->model_tool_image->resize($product_info['image'],
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'),
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')
                    );

                    $data['thumb'] = $this->model_tool_image->resize($product_info['image'],
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_width'),
                        $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_height')
                    );

                    
                } else {
                    $data['popup'] = '';
                    $data['thumb'] = '';
                   
                }
            } else {
                // Если есть дополнительные изображения, загружаем их первыми
                $im = 0;
                foreach ($results as $result) {
                    $im++;
                    if ($im > 1) {
                        $data['images'][] = array(
                            'popup' => $this->model_tool_image->resize($result['image'],
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'),
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')
                            ),
                            'thumb' => $this->model_tool_image->resize($result['image'],
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_width'),
                                $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_height')
                            )
                           
                        );
                    } else {
                        // Первое доп. изображение становится основным
                        $data['popup'] = $this->model_tool_image->resize($result['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')
                        );

                        $data['thumb'] = $this->model_tool_image->resize($result['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_thumb_height')
                        );

                    }
                }

                // Если основное изображение не совпадает с первым доп. изображением, добавляем его в конец
                if ($product_info['image'] && $product_info['image'] != $results[0]['image']) {
                    $data['images'][] = array(
                        'popup' => $this->model_tool_image->resize($product_info['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_popup_height')
                        ),
                        'thumb' => $this->model_tool_image->resize($product_info['image'],
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_width'),
                            $this->config->get('theme_' . $this->config->get('config_theme') . '_image_additional_height')
                        )
                      
                    );
                }
            }

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

0
2
0
0
0
Алексей Костюк
Привет Username! Я Алексей Костюк
16 лет занимаюсь тем, что помогаю людям создавать сайты и дизайн, настраивать рекламу, продвигать проекты в Интернете. Я создал этот блог, чтобы делиться своим опытом и мыслями, а если вы хотите, то можете меня поддержать, это поможет мне создавать больше полезных статей для вас.