Необходима консультационная помощь в исправлении следующей ошибки. При выборе в меню админки пункта "Каталог->Управление категориями"страница отображается не полностью. Выводится только HTML код блока с id="catalog_category_products". Остального контента страницы просто нет, как если бы я вызывал этот контент через AJAX в обход формирования страницы. Как следствие нет ни ссылок на CSS файлы, ни на JS. То есть формирование header и footer страницы не исполняется. Дистрибутив взят с сайта Magento 1.5.1 англоязычный, с последующей установкой русификации. Все остальные страницы и фронтенд и бэкенд формируются нормально. Ссылку на страницу с проблемой дать не могу, все установлено в локальном режиме. Подскажите где искать ошибку если не переустанавливать. Я пока не очень знаком с механизмом формирования страницы в Magento. Насколько я понимаю формирование строится на основе XML макета с общим описанием распределения контентных блоков по структурным и шаблонов формирования контентых блоков. Но вот как строится страница в целом, где определяется конкретное содержание конкретной страницы, где определяется необходимость включения или отключения формирования header и footer страницы пока не нашел. Подскажите пожалуйста где искать?
При выборе в меню админки пункта "Каталог->Управление категориями"страница отображается не полностью
25.07.2011 09:53
Причиной ошибки, скорей всего, является сбой интерпретатора PHP в процессе формирования страницы.
Вам нужно последовательно сделать:
1) Включить отображение ошибок интерпретатора PHP на экране (display_errors, error_reporting).
2) Включить запись системных сообщений Magento в журнал.
3) Посмотреть, что пишет Magento в журнал
4) Посмотреть исходный код проблемной страницы (после выполнения пункта 1 там могут быть диагностические сообщения интерпетатора PHP)
Вам нужно последовательно сделать:
1) Включить отображение ошибок интерпретатора PHP на экране (display_errors, error_reporting).
2) Включить запись системных сообщений Magento в журнал.
3) Посмотреть, что пишет Magento в журнал
4) Посмотреть исходный код проблемной страницы (после выполнения пункта 1 там могут быть диагностические сообщения интерпетатора PHP)
25.07.2011 11:27
Спасибо за оперативную реакцию Дмитрий.
Я уже сообразил, что проблема возможно в дефектах базы данных. Я установил версию Magento 1.6 с сайта и натравил на ту же базу, что и предыдущую. Ошибка повторилась в точности. Похоже сбой возникает при чтении данных из базу об имеющихся категориях (хотя база и пуста), потому что на экран выводится только та часть HTML кода страницы, которая формирует фильтр категорий, а та которая должна содержать данные о категориях уже не появляется, хотя тогда по идее браузеру все равно должен был быть уже возвращен заголовок страницы, поэтому вопрос последовательности формирования страницы и порядок ее передачи на клиента остается открытым.
P.S. С методикой трассировки ошибок обязательно разберусь. Спасибо.
Я уже сообразил, что проблема возможно в дефектах базы данных. Я установил версию Magento 1.6 с сайта и натравил на ту же базу, что и предыдущую. Ошибка повторилась в точности. Похоже сбой возникает при чтении данных из базу об имеющихся категориях (хотя база и пуста), потому что на экран выводится только та часть HTML кода страницы, которая формирует фильтр категорий, а та которая должна содержать данные о категориях уже не появляется, хотя тогда по идее браузеру все равно должен был быть уже возвращен заголовок страницы, поэтому вопрос последовательности формирования страницы и порядок ее передачи на клиента остается открытым.
P.S. С методикой трассировки ошибок обязательно разберусь. Спасибо.
25.07.2011 12:38
Оказывается ошибка возникает в после создания первого товара. Пока товаров в базе нет редактирование категорий работает, как товар появляется -возникают указанные выше проблемы. Точнее проблемы появляются после первого же добавления товара в какую нибудь категорию. Удаление товара из категории не дает желаемого результата. Редактирование категорий восстанавливается после удаления товара, добавленного в категорию (видимо срабатывает какой то механизм контроля целостности данных и товар вычищается из категории только после его удаления). Вы не знаете случайно странички в Интернете где указаны ограничения и требования, которые надо обязательно соблюдать при создании и редактировании товара?
25.07.2011 13:31
Отображение ошибок в PHP включил
display_errors = On
error_reporting = E_ALL & ~E_NOTICE
На клиента ни чего не выводится.
Ведение логов Magento включил. Судя по записи {{base_dir}}/var/log должны были появиться файлы system.log и exeptions.log в каталоге var/log от корня сайта (каталог имеется и права на доступа на него полные). Лог-файлы не появляются при возникновении ошибки с отображением редактора категорий при наличии в одной из категорий хоть одного товара.
Где можно отследить результат исполнения запроса к БД при формировании страницы? (или хотя бы получить отправляемый при ее формировании SQL запрос, чтобы можно провести его отладку отдельно). Думаю проблема именно там.
display_errors = On
error_reporting = E_ALL & ~E_NOTICE
На клиента ни чего не выводится.
Ведение логов Magento включил. Судя по записи {{base_dir}}/var/log должны были появиться файлы system.log и exeptions.log в каталоге var/log от корня сайта (каталог имеется и права на доступа на него полные). Лог-файлы не появляются при возникновении ошибки с отображением редактора категорий при наличии в одной из категорий хоть одного товара.
Где можно отследить результат исполнения запроса к БД при формировании страницы? (или хотя бы получить отправляемый при ее формировании SQL запрос, чтобы можно провести его отладку отдельно). Думаю проблема именно там.
27.07.2011 15:55
Под отладчиком выдавил наконец следующее сообщение об ошибке.
Fatal error: Call to undefined method Mage_Adminhtml_Block_Widget::getrowurl() in Z:\home\localhost.com\www\app\code\core\Mage\Adminhtml\Block\Widget\Grid.php on line 1622
Там как раз запускается формирование таблиц товаров в категориях судя по тому что параметром процедуры является объект класса Mage_Catalog_Model_Product или Varien_Object
IDE ZendStudio 7.1 Prof. Edition
Все вопрос снимается. Заработало. В классе предке (в Mage_Adminhtml_Block_Widget) действительно отсутствует метод getrowurl(). Отсюда и сообщение об ошибке. Закоментировал parent::getrowurl() на строке 1622 в файле app\code\core\Mage\Adminhtml\Block\Widget\Grid.php и все пошло. Вот только интересно как все это у других работает. Или они редактором не пользуются а только заливкой. Или в версиях до 1.5 такая проблема отсутствовала? И интересно что дальше будет, а то я с Магентой только второй день работаю и уже на грабли наступил :-). Хорошо еще что ZF знаком, а то совсем туго было бы.
Fatal error: Call to undefined method Mage_Adminhtml_Block_Widget::getrowurl() in Z:\home\localhost.com\www\app\code\core\Mage\Adminhtml\Block\Widget\Grid.php on line 1622
Там как раз запускается формирование таблиц товаров в категориях судя по тому что параметром процедуры является объект класса Mage_Catalog_Model_Product или Varien_Object
IDE ZendStudio 7.1 Prof. Edition
Все вопрос снимается. Заработало. В классе предке (в Mage_Adminhtml_Block_Widget) действительно отсутствует метод getrowurl(). Отсюда и сообщение об ошибке. Закоментировал parent::getrowurl() на строке 1622 в файле app\code\core\Mage\Adminhtml\Block\Widget\Grid.php и все пошло. Вот только интересно как все это у других работает. Или они редактором не пользуются а только заливкой. Или в версиях до 1.5 такая проблема отсутствовала? И интересно что дальше будет, а то я с Магентой только второй день работаю и уже на грабли наступил :-). Хорошо еще что ZF знаком, а то совсем туго было бы.
06.08.2011 15:17
Здравствуйте Дмитрий.
Сегодня обновил версию PHP до 5.2.14 и с сожалением убедился, что я оказался прав. Прерывание скрипта в том же месте с теми же последствиями. В результате не работает редактирование категорий товара в бэкенд.
Я обнаружил что подобный вопрос уже обсуждался в разделе по установки Магенты и именно с версией 1.5
Кстати может если у вас есть какой то отработанный комплект ПО для работы с Магентой, его стоит выложить по аналогии с Denwer (Может это упростило бы жизнь многим начинающим разработчикам и повысило бы ваши продажи русской версии Magento). Я например перепробовал версии половины архива PHP пока нашел работоспособный комплект, у которого все необходимые расширения в наличии и работают. (версию 5.2.17 поставил так в ней php5apache2_2.dll вообще не грузился с простейшим сообщением об ошибке что Апач не смог его загрузить и все, без трассировки в логах).
Что обновление версии не поможет в общем было и так ясно. Я просмотрел по иерархии классов Магенты и не нашел объявления соответствующего метода __call. Я не работал с __call но по аналогии с __autoload не трудно догадаться, что при отсутствии запускаемого метода (класса применительно к __autoload) если callback функция (а __call как и __autoload и есть такие функции) обработки ошибки не определена специально, то работает алгоритм по умолчанию, а это как раз и есть выдача сообщение об ошибке с прерыванием исполнения скрипта.
Так что пока иного решения кроме правки соответствующего кода я не нашел. Может кто подскажет.
Среда для Магенто:
Базовый комплект Денвера 3 с перенастроенным для поддержки innoDB MySQL и замененным PHP.
В общем как то так :-)
Сегодня обновил версию PHP до 5.2.14 и с сожалением убедился, что я оказался прав. Прерывание скрипта в том же месте с теми же последствиями. В результате не работает редактирование категорий товара в бэкенд.
Я обнаружил что подобный вопрос уже обсуждался в разделе по установки Магенты и именно с версией 1.5
Кстати может если у вас есть какой то отработанный комплект ПО для работы с Магентой, его стоит выложить по аналогии с Denwer (Может это упростило бы жизнь многим начинающим разработчикам и повысило бы ваши продажи русской версии Magento). Я например перепробовал версии половины архива PHP пока нашел работоспособный комплект, у которого все необходимые расширения в наличии и работают. (версию 5.2.17 поставил так в ней php5apache2_2.dll вообще не грузился с простейшим сообщением об ошибке что Апач не смог его загрузить и все, без трассировки в логах).
Что обновление версии не поможет в общем было и так ясно. Я просмотрел по иерархии классов Магенты и не нашел объявления соответствующего метода __call. Я не работал с __call но по аналогии с __autoload не трудно догадаться, что при отсутствии запускаемого метода (класса применительно к __autoload) если callback функция (а __call как и __autoload и есть такие функции) обработки ошибки не определена специально, то работает алгоритм по умолчанию, а это как раз и есть выдача сообщение об ошибке с прерыванием исполнения скрипта.
Так что пока иного решения кроме правки соответствующего кода я не нашел. Может кто подскажет.
Среда для Магенто:
Базовый комплект Денвера 3 с перенастроенным для поддержки innoDB MySQL и замененным PHP.
В общем как то так :-)
07.08.2011 10:56
Прошу прощения Дмитрий, но я в Zend Server человек темный (как и многие посетители вашего сайта, заинтересовавшиеся Magento). PHP входит в его комплект? То есть поставил Zend Server и имеешь полноценную среду разработки (ну не считая MySQL)? И входит ли туда отладчик (хотя судя по тому что вы писали статью о настройке XDebug - нет) Кстати, а у вас был опыт настройки ZendDebuggera в сочетании с Optimizer. Утверждается что они могут работать вместе, но если с установкой оптимайзера нет проблем, то ZendDebugger запустить мне так и не удалось. Просто я думаю начинающим важно иметь готовое решение для развертывания Magento, что называется "в один клик" (я поэтому и предлагал выложить рабочий, настроенный комплект среды :-)). Кроме того, возможно я ошибаюсь, но я похоже столкнулся с проблемой конфликта XDebug и Optimizer. Для нормальной работы отладчика, оптимайзер пришлось отключить (от остался у меня от работы над проектами с платными CMS NetCat, Amiro и прочей ерундой). Возможно это кому нибудь поможет :-).