Здравствуй, уважаемый друг!

Кажется, ты используешь AdBlock. Этот проект развивается и существует за счет доходов от рекламы.
Добавь, пожалуйста, нас в исключения.

Спасибо за понимание.

Создание сайтов Харьков

Не отправляются письма Virtuemart 2.0.x. Не происходит подтверждение заказа

7 марта 2012 в 14:54 Автор: Nikita_Sp в категории Плагины и модули, Статьи о php 4 комментария

Доброе время суток, Уважаемые читатели и подписчики!

Сегодня расскажу вам о том, как решить проблему, с которой я столкнулся во время работы с новым Virtuemart 2.0.2. Проблема заключалась в том, что после того как человек вводит свои данные и нажимает на кнопочку «Подтвердить заказ» загружается абсолютно пустая страница,  но сам заказ сохраняется в администраторской панели, и не отправляются письма, уведомляющие пользователя и администратора о заказе через Virtuemart.

Немного покопавшись в коде, я нашел решение этой проблемы.

Я гуглил, но ничего не смог найти, потом оклеветал хостинг, т.к. на Denwer’e все работало нормально, начал настраивать почту, пробовать разные варианты отправки php mail(); SMTP, sendmail. Но ничего не помогало. И тут я увидел что  в начале письма, которое отправляется пользователю (у Denver’a сохраняются письма, отправленные через php mail(); в папке WebServers\tmp\!sendmail ), выводится сообщение об ошибке. Оповещение говорит о том, что что-то не так с передаваемым параметром в функцию substr(); в файле

administrator/components/com_virtuemart/models/orders.php на строке 997

Открыв файл, я нашел нужную строку. Она находилась в условии:

if(empty($data['invoice_number'])) {

//$variable_fixed=sprintf("%05s",$num_rows);

$data['invoice_number'] = str_replace('-', '', substr(JFactory::getDate(),2,8)).substr(md5($orderDetails['order_number'].$orderDetails['order_status']),0,3).'0'.$count;

}

Там есть два вызова функции substr(); и на один из них ругается сервер.

$data['invoice_number'] = str_replace('-', '', substr(JFactory::getDate(),2,8)).substr(md5($orderDetails['order_number'].$orderDetails['order_status']),0,3).'0'.$count;

Удаление первого выражения:

str_replace('-', '', substr(JFactory::getDate(),2,8))

привело к тому, что ошибка пропала, и все нормально начало работать. Не знаю чем чревато такого рода изменение, но сайт начал работать нормально. Отправляются все письма: администратору и пользователю, грузится страничка с подтверждением оформления заказа.

Вот в конечном итоге что у меня получилось на строке 997:

$data['invoice_number'] = substr(md5($orderDetails['order_number'].$orderDetails['order_status']),0,3).'0'.$count;

Вообще, это функция присвоения номера/кода заказа к нему же. Условие проверяет указан ли уже номер/код, если нет, то формирует его из двух строк: первая часть — цифры текущей даты, вторая — md5(); от номера заказа и от его статуса.

Т.е. в принципе мы ничего критического не сделали, но если у вас есть более элегантное и красивое решение данной проблемы — милости просим в комментарии.

Удачного кодинга!

4 комментария

  • Здравствуйте! Проблема не решилась. Так же не приходят уведомления. Если вручную сменить статус заказа, то уведомление приходит только клиенту. В чем может быть причина?

Добавить комментарий для Nikita_Sp Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вверх!

Меню блога

Категории блога

Облако тегов