Question

Magento 1.9.4 ne fonctionne pas avec PHP 7, il affiche l'erreur ci-dessous :

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
Était-ce utile?

La solution

Cela arrive parce que dans PHP 7 vous devez préciser que vous allez appeler le $callback variable comme méthode (fonction).Ainsi, la ligne originale du code ressemble à ce qui suit (fichier app/code/core/Mage/Core/Model/Layout.php):

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

Afin que cela fonctionne sur la dernière version de PHP nous devons remplacer ce bout de code par celui-ci :

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

Référer ce blog pour plus d'informations.

Autres conseils

Si vous souhaitez exécuter votre site Web Magento 1.x sur PHP7, vous devez faire de petits modifications dans vos fichiers magento 1.x pour le faire fonctionner sans aucun problème.

La plupart du code Magento est toujours valide dans PHP 7, il existe peu d'incompatibilités énumérées ci-dessous:

1. Problèmes de syntaxe variable uniformes:

1.1 App / code / noyau / mage / core / modèle / layout.php: 555

Ce fichier provoque une erreur et une erreur fatale qui se bloque Magento. Remplacer le fichier et remplacer

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

avec

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

1.2 APP \ Code \ Core \ Mage \ ImportExport \ Modèle \ Import \ Upploader.php: 135

Cet importateur de CSV Magento Effets. Remplacer le fichier, puis remplacer la fonction _validatefile () et remplacez la ligne 135 avec remplacer

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

avec

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

1.3 App \ Code \ CORE \ MAGE \ ImportExport \ Modèle \ Exporter \ Entity \ Produit \ Type \ Abstract.php: 99

Ce problème Effet Exportation fonctionnalité de Magento. Magento étend trois classes de la classe abstraite ci-dessus, la ligne n ° 99 de la classe ci-dessus est donc la principale cause d'erreur.

mage_importexport_model_export_entity_product_type_configurable MAGE_IMPORTEXPORT_MODEL_EXPORT_ENTITY_PRODUCT_TYPE_GROUPED MAGE_IMPORTEXPORT_MODEL_EXPORT_ENTITY_PRODUCT_TYPE_SIMPLE

Nous devons remplacer au-dessus de trois classes dans notre piscine de code local et remplacer la fonction NurseatTribute (), remplacer la ligne n ° 99

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

avec

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

1.4 App \ Code \ Core \ Mage \ ImportExport \ Modèle \ Export \ Entity \ Customer.PHP: 250

Ce fichier fait des effets de la fonctionnalité des clients exportateurs. Remplacer ci-dessus le fichier et modifier la ligne 250 comme indiqué ci-dessous

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

avec

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

1.5 LIB \ VARIEN \ FICHIER \ UPLOADER.PHP: 259

Le téléchargement de fichier ne fonctionnera pas. Magento étend mage_core_model_file_uploader de la classe ci-dessus, nous devons donc remplacer cette classe et réécrire la fonction _validatefile () remplacer ci-dessous la ligne

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

avec

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

2. Type de jeux de coulée

2.1 app \ code \ core \ mage \ core \ modèle \ ressource \ session.php: 218

Les sessions Magento ne fonctionnent pas sur PHP 7, de sorte que la connexion utilisateur ne fonctionne pas. Lire la fonction ($ sessid) doit renvoyer une chaîne afin de taper la variable de retour indique ci-dessous

return $data;

avec

return (string)$data;

3. Total total incorrect

Les totaux incorrects sont dus à un mauvais ordre de tri de sous-total, de réduction, d'expédition, etc. Corrigez l'ordre de tri en créant une extension et mettez le code ci-dessous dans config.xml de l'extension

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

Voici la référence initiale à ce que j'ai affiché ci-dessus: http://scriptbaker.com/tag/magento-1-9/

Si vous ne trouvez aucune requête dans votre code, cela sera donc couvert par Magento et comme je l'ai déjà dit auparavant, la plupart du code est valide afin que vous puissiez simplement l'ignorer. Je crois que tout peut répondre à votre question.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top