Перейти к содержанию
snejzel

Warning: Division by zero in product.php on line 468

Рекомендуемые сообщения

Здравствуйте, подскажите у некоторых товаров выводится вот такая строчка

Warning: Division by zero in /system/storage/modification/catalog/controller/product/product.php on line 468

 

Кусок кода: 

 

                $data['products'][] = array(
'percent'     => sprintf($this->language->get('-%s'), (round((($result['price'] - $result['special'])/$result['price']) * 100 ,0 ))) . ' %',
                    'product_id'  => $result['product_id'],
                    'thumb'       => $image,
                    'name'        => $result['name'],
                    'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..',
                    'price'       => $price,
                    'special'     => $special,
                    'tax'         => $tax,
                    'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
                    'rating'      => $rating,
                    'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id'])
                );
            }

 

 

конкретно 468 строчка 

'percent'     => sprintf($this->language->get('-%s'), (round((($result['price'] - $result['special'])/$result['price']) * 100 ,0 ))) . ' %',

 

Пробовал перезаливать файлы из более старого бекапа, та же проблема. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тут вроде все понятно, ошибка деление на ноль, а именно как вы заметили в часте кода $result['special'])/$result['price']) * 100 ,0  - эту часть кода надо переписать наверное следующим образом 

'percent'     => ($result['price']) ? sprintf($this->language->get('-%s'), (round((($result['price'] - $result['special'])/$result['price']) * 100 ,0 ))) . ' %' : ''

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал поставить ваш код, без изменений, ошибка все равно отображается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
sprintf($this->language->get('-%s'), (round((($result['price'] - $result['special'])/$result['price']) * 100 ,0 ))) 

У Вас $result['special'] == 0

этот кусок Вам нужно вынести выше там где $special = ... а в массив прописать 'percent'  => $percent  

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

наоборот, result['price'] - 0

 

надо наверное так

 

'percent'     => ($result['price'] > 0) ? sprintf($this->language->get('-%s'), (round((($result['price'] - $result['special'])/$result['price']) * 100 ,0 ))) . ' %' : false,

 

Или как написали вынести выше, типа вынести в блок special

 

$percent = ($result['price'] > 0) ? sprintf($this->language->get('-%s'), (round((($result['price'] - $result['special'])/$result['price']) * 100 ,0 ))) . ' %' : false

а в вывод 

'percent'     => $percent,

Изменено пользователем spectre

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.