Aktualizacja magento pod szyldem PHP Fatal error – rozwiązanie problemu

Dodane przez | 29 marca 2011 o godzinie 11:13 | Brak komentarzy | Jak to naprawić?, Magento | Tagi: , , , ,

W momencie pojawienia się Magento w wersji 1.4.x, wiele osób po dokonaniu aktualizacji z wersji 1.3.x zamiast ujrzeć swoją stronę prawdopodobnie trafiało na biały ekran. Sytuacja taka zdarzała się zwykle w momencie, gdy nie zmieniliśmy przed aktualizacją własnej skórki na domyślną, używaną przez Magento.

PHP Fatal error: Call to a member function toHtml() on a non-object in …/Layout.php on line 529 i co teraz?

Pierwszym krokiem, który należy wykonać to włączyć debugowanie poprzez odkomentowanie poniższych linii kodu w pliku „index.php”:

[cc lang=”php”] ini_set(‘display_errors’, 1);
[/cc]

Po odświeżeniu strony nadal pozostaje ona biała, jednak gdy sprawdzimy error_log na naszym serwerze zobaczymy mniej więcej coś takiego:

[cc lang=”php”] [error][client 127.0.0.1]PHP Fatal error: Call to a member function toHtml() on a non-object in /www/www.twojadomena.pl/magento/app/code/core/Mage/Core/Model/Layout.php on line 529
[error][client 127.0.0.1]PHP Stack trace:
[error][client 127.0.0.1]PHP 1. {main}() /www/www.twojadomena.pl/magento/index.php:0
[error][client 127.0.0.1]PHP 2. Mage::run() /www/www.twojadomena.pl/magento/index.php:78
[error][client 127.0.0.1]PHP 3. Mage_Core_Model_App->run() /www/www.twojadomena.pl/magento/app/Mage.php:596
[error][client 127.0.0.1]PHP 4. Mage_Core_Controller_Varien_Front->dispatch() /www/www.twojadomena.pl/magento/app/code/core/Mage/Core/Model/App.php:304
[error][client 127.0.0.1]PHP 5. Mage_Core_Controller_Varien_Router_Standard->match() /www/www.twojadomena.pl/magento/app/code/core/Mage/Core/Controller/Varien/Front.php:177
[error][client 127.0.0.1]PHP 6. Mage_Core_Controller_Varien_Action->dispatch() /www/www.twojadomena.pl/magento/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php:254
[error][client 127.0.0.1]PHP 7. Mage_Cms_IndexController->indexAction() /www/www.twojadomena.pl/magento/app/code/core/Mage/Core/Controller/Varien/Action.php:418
[error][client 127.0.0.1]PHP 8. Mage_Cms_Helper_Page->renderPage() /www/www.twojadomena.pl/magento/app/code/core/Mage/Cms/controllers/IndexController.php:45
[error][client 127.0.0.1]PHP 9. Mage_Cms_Helper_Page->_renderPage() /www/www.twojadomena.pl/magento/app/code/core/Mage/Cms/Helper/Page.php:52
[error][client 127.0.0.1]PHP 10. Mage_Core_Controller_Varien_Action->renderLayout() /www/www.twojadomena.pl/magento/app/code/core/Mage/Cms/Helper/Page.php:130
[error][client 127.0.0.1]PHP 11. Mage_Core_Model_Layout->getOutput() /www/www.twojadomena.pl/magento/app/code/core/Mage/Core/Controller/Varien/Action.php:389
[/cc] Jeżeli spojrzymy na 529 linię w pliku „Layout.php” zobaczymy iterację na kilka obiektów ($this->_output) i tworzenie sumowanego wyjścia, które później może zostać wyświetlone na ekranie.

[cc lang=”php”] 519 /**
520 * Get all blocks marked for output
521 *
522 * @return string
523 */
524 public function getOutput()
525 {
526 $out = ”;
527 if (!empty($this->_output)) {
528 foreach ($this->_output as $callback) {
529 $out .= $this->getBlock($callback[0])->$callback[1]();
530 }
531 }
532
533 return $out;
534 }
[/cc]

Magento 1.4.x zostało przebudowane pod względem szablonów, tak więc skórka przygotowana pod wersję 1.3.x z dużym prawdopodobieństwem nie zadziała bez drobnych poprawek w kodzie. Aby pozbyć się tego problemu, należy znaleźć i poprawić plik „page.xml”, który powinien się znajdować w: ./app/design/frontend/default/{twoj_szablon}/layout/page.xml.

Odnajdujemy linijkę:

[cc lang=”xml”] [/cc]

i zmieniamy ją na:

[cc lang=”xml”] [/cc]

Teraz pozostaje już tylko wyczyścić cache Magento, odświeżyć stronę i jeśli wszystko przebiegło prawidłowo powinniśmy ponownie zobaczyć nasz szablon.

W momencie kiedy powyższe działania nie pomogły lub nasz katalog szablonów nie zawiera lokalnej kopii pliku „page.xml”, należy sprawdzić czy w trakcie aktualizacji Magento uaktualnione zostały domyślne pliki. Potrzebny nam plik znajdziemy w:

./app/design/frontend/default/default/layout/page.xml
./app/design/frontend/default/modern/layout/page.xml
./app/design/frontend/base/default/layout/page.xml

O autorze:

Piotr

Facet, który z zawodu jest prezesem. Większość czasu spędza na poskramianiu platformy magento i przygotowywaniu materiałów do druku. Najchętniej pracuje ułożony w pozycji horyzontalnej na kanapie. Perfekcjonista w każdym calu.

Komentarze

© 2011 Web Designer Magazine. All rights reserved.