Вопрос

Magento 1.9.4 не работает с PHP 7, отображается ошибка, как показано ниже:

Fatal error: Uncaught Error: Function name must be a string in 
app\code\core\Mage\Core\Model\Layout.php:555 Stack trace: #0 
app\code\core\Mage\Core\Controller\Varien\Action.php(390): Mage_Core_Model_Layout->getOutput() #1 
app\code\core\Mage\Cms\Helper\Page.php(137): Mage_Core_Controller_Varien_Action->renderLayout() #2 
app\code\core\Mage\Cms\Helper\Page.php(52): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'home') #3 
app\code\core\Mage\Cms\controllers\IndexController.php(45): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'home') #4 
app\code\core\Mage\Core\Controller\Varien\Action.php(418): Mage_Cms_IndexController->indexAction() #5 
app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index') #6 
app\code\core\Mage\Core\Model\Layout.php on line 555
Это было полезно?

Решение

Это происходит потому, что в PHP 7 вам необходимо уточнить, что вы собираетесь позвонить $callback переменная как метод (функция).Итак, исходная строка кода выглядит следующим образом (файл app/code/core/Mage/Core/Model/Layout.php):

$out .= $this->getBlock($callback[0])->$callback[1]();

Чтобы заставить его работать в последней версии PHP, нам нужно заменить этот фрагмент кода следующим:

$out .= $this->getBlock($callback[0])->{$callback[1]}();

Ссылаться этот блог для дополнительной информации.

Другие советы

Если вы хотите запустить свой веб-сайт Magento 1.x на PHP7, вам нужно внести некоторые небольшие изменения в некоторые файлы Magento 1.x, чтобы он работал без каких-либо проблем.

Большая часть кода Magento все еще действительна в PHP 7, есть несколько несовместимостей, перечисленных ниже:

1.Проблемы с единообразным синтаксисом переменных:

1.1 приложение/ код/ ядро/Mage/Core/Модель/Макет.php:555

Этот файл вызывает неустранимую ошибку, которая приводит к сбою Magento.Переопределите файл и замените

$out .= $this->getBlock($callback[0])->$callback[1]();

с

$out .= $this->getBlock($callback[0])->{$callback[1]}();

1.2 приложение\код\ядро\Mage\Импортэкспорт\Модель\Импорт\Загрузчик.php:135

Этот файл влияет на импортер Magento CSV.Переопределите файл, затем переопределите функцию _validateFile() и замените строку 135 на заменить

$params['object']->$params['method']($filePath);

с

$params['object']->{$params['method']}($filePath);

1.3 приложение\код\ядро\Mage\Импортэкспорт\Модель\Экспорт\Сущность\Продукт\Тип\Аннотация.php:99

Эта проблема влияет на функциональность экспорта Magento.Magento расширяет три класса из вышеуказанного абстрактного класса, поэтому основной причиной ошибки внутри нижеприведенного класса является строка # 99 в вышеприведенном классе.

mage_importexport_model_export_entity_product_type_figurable Mage_ImportExport_Model_Export_Entity_Product_Type_Grouped Mage_ImportExport_Model_Export_Entity_Product_Type_Simple

Нам нужно переопределить вышеупомянутые три класса в нашем локальном пуле кода и переопределить функцию overrideAttribute(), заменив строку #99

$data['filter_options'] = $this->$data['options_method']();

с

$data['filter_options'] = $this->{$data['options_method']}();

1.4 app\code\core\Mage\ImportExport\Model\Export\Entity\Customer.php:250

Этот файл влияет на функциональность экспорта клиентов.Переопределите приведенный выше файл и измените строку # 250, как показано ниже

$data['filter_options'] = $this->$data['options_method']();

с

$data['filter_options'] = $this->{$data['options_method']}();

1.5 библиотека\Varien\File\Uploader.php:259

Загрузка файла не будет работать.Magento расширяет Mage_Core_Model_File_Uploader из вышеуказанного класса, поэтому нам нужно переопределить этот класс и переписать функцию _validateFile(), заменив строку ниже

$params['object']->$params['method']($this->_file['tmp_name']);

с

$params['object']->{$params['method']}($this->_file['tmp_name']);

2.Проблема с приведением типов

2.1 приложение\код\ядро\Mage\Core\Модель\Ресурс\Сессия.php:218

Сеансы Magento не работают на PHP 7, поэтому в результате вход пользователя в систему не работает.функция read($sessId) должна возвращать строку, поэтому введите возвращаемую переменную, как указано ниже

return $data;

с

return (string)$data;

3.Неверный Общий итог

Неправильные итоги получены из-за неправильного порядка сортировки промежуточных итогов, скидки, доставки и т.д. Исправьте порядок сортировки, создав расширение и вставив приведенный ниже код в config.xml расширения

<global>
    <sales>
        <quote>
            <totals>
                <msrp>
                    <before>grand_total</before>
                </msrp>
                <shipping>
                    <after>subtotal,freeshipping,tax_subtotal,msrp</after>
                </shipping>
            </totals>
        </quote>
    </sales>
</global>

Вот оригинальная ссылка на то, что я опубликовал выше:http://scriptbaker.com/tag/magento-1-9/

Если вы не можете найти какой-либо запрос в своем коде, это будет рассмотрено Magento, и, как я уже говорил ранее, большая часть кода допустима, поэтому вы можете просто проигнорировать его.Я верю, что это все, что может ответить на ваш вопрос.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top