Я обновил magento с версии 1.9.1.1 до 1.9.2.1. Процесс оформления заказа всегда терпит неудачу и перенаправляет обратно на страницу корзины. Это ошибка, которую я нашел в журнале ошибок Apache:
PHP Fatal error: Undefined class constant 'CHECK_USE_CHECKOUT' in
/var/www/app/code/local/Lotusbreath/OneStepCheckout/Model/Type/Onepage.php
on line 108, referer: http://www.websitename.com/onestepcheckout/
Я думал, что расширение проверки было неисправно, поэтому я заменил его на оригинальный шаблон проверки Magento, появляется та же ошибка:
PHP Fatal error: Undefined class constant 'CHECK_USE_CHECKOUT' in
/var/www/app/code/core/Mage/Checkout/Model/Type/Onepage.php on line 653,
referer: http://www.website.com/checkout/onepage/
Я проверил оба PHP-файла на наличие CHECK_USE_CHECKOUT, и действительно, он там не определен. Вопрос в том, что раньше это нормально работало. Я не уверен, что это обновление что-то сломало или это последнее исправление, которое я применил. Я попытался вернуть патч, но это тоже не сработало.
Это фрагмент из PHP-файла Onepage.php, который содержит материал CHECK_USE:
$data['checks'] = Mage_Payment_Model_Method_Abstract::CHECK_USE_CHECKOUT
| Mage_Payment_Model_Method_Abstract::CHECK_USE_FOR_COUNTRY
| Mage_Payment_Model_Method_Abstract::CHECK_USE_FOR_CURRENCY
| Mage_Payment_Model_Method_Abstract::CHECK_ORDER_TOTAL_MIN_MAX
| Mage_Payment_Model_Method_Abstract::CHECK_ZERO_TOTAL;
Это причина, по которой платежи терпят неудачу и перенаправляют обратно на страницу корзины? Если это так, как бы я исправить это?
Заранее спасибо.
Сообщение об ошибке ссылается на этот класс Mage_Payment_Model_Method_Abstract. Я проверил это в основном файле, расположенном по адресу: app / code / core / Mage / Payment / Model / Method / Abstract.php. Этот файл имеет следующий фрагмент в классе Mage_Payment_Model_Method_Abstract:
/**
* Bit masks to specify different payment method checks.
* @see Mage_Payment_Model_Method_Abstract::isApplicableToQuote
*/
const CHECK_USE_FOR_COUNTRY = 1;
const CHECK_USE_FOR_CURRENCY = 2;
const CHECK_USE_CHECKOUT = 4;
const CHECK_USE_FOR_MULTISHIPPING = 8;
const CHECK_USE_INTERNAL = 16;
const CHECK_ORDER_TOTAL_MIN_MAX = 32;
const CHECK_RECURRING_PROFILES = 64;
const CHECK_ZERO_TOTAL = 128;
Теперь там был еще один файл Abstract.php, расположенный в локальном пуле по адресу: app / code / local / Mage / Payment / Model / Method / Abstract.php. Обратите внимание на (основное) и (локальное) различие в пути.
У этого файла в локальном пуле не было фрагмента, показанного выше. Файл также имел несколько других отличий. Итак, я сделал резервную копию файла Abstract.php в локальном пуле. Затем скопировал файл Abstract из ядра в локальный пул. Все снова заработало.
Надеюсь, это поможет кому-то!
Есть вероятность, что ваши основные файлы были изменены.
Во время обновления файлы ядра будут перезаписаны, что может привести к удалению некоторого кода (добавленного из-за нестандартного кодирования).
Так что, если у вас есть резервная копия, найдите недостающее определение и файл, в котором она была.
@ Посмотрите на ваши отзывы.
Помещение файла в локальный файл приведет к переопределению основного файла.
Это не стандартный подход Magenton, разработчик должен был расширить этот класс и изменить или добавить какую-то конкретную функцию.
Я предлагаю вам убедиться, что все файлы в локальной папке Mage удалены каким-либо расширенным модулем.