@Defoger

Почему периодически появляется ошибка: «Call to a member function toArray() on null» и как ее решить?

Периодически рандомная страница компонента меток joomla 3.8.11 в версии php 7.2.5 выдает ошибку: [HTML]Call to a member function toArray() on null[/HTML] . Пытался выставлять более старые версии php, вплоть до 5.6,но проблема не исчезла, лишь ошибок стало больше:
Notice: Trying to get property of non-object in /public_html/components/com_tags/views/tags/view.html.php on line 114 Warning: Creating default object from empty value in /public_html/components/com_tags/views/tags/view.html.php on line 115 Notice: Undefined property: Joomla\Registry\Registry::$title in /public_html/components/com_tags/views/tags/view.html.php on line 196 Notice: Undefined property: Joomla\Registry\Registry::$metadesc in /public_html/components/com_tags/views/tags/view.html.php on line 224 Notice: Undefined property: Joomla\Registry\Registry::$metakey in /public_html/components/com_tags/views/tags/view.html.php on line 233 Notice: Undefined property: Joomla\Registry\Registry::$created_user_id in /public_html/components/com_tags/views/tags/view.html.php on line 249 Notice: Undefined property: stdClass::$metadata in /public_html/components/com_tags/views/tags/view.html.php on line 252 Fatal error: Call to a member function toArray() on null in public_html/components/com_tags/views/tags/view.html.php on line 252

Сделал выводы, что основная проблема находится в файле view.html.php on line 252 в котором расположен следующий код:
$mdata = $this->item->metadata->toArray();

				foreach ($mdata as $k => $v)
				{
					if ($v)
					{
						$this->document->setMetadata($k, $v);
					}
				}

Но, так как в php не силен решить проблему так и не смог, может кто сталкивался с подобной проблемой? В интернете никаких решений не нашел. Из компонентов установлен joomsef, вывод материалов com_content.
  • Вопрос задан
  • 1193 просмотра
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега PHP
Видимо, в случае отсуствтия метаданных в некоторых случаях в перемнную metadata попадает null, а не класс, у которого есть метод toArray.
В принципе, в этом нет ничего криминального и эту ошибку можно смело игнорировать, так как она не влияет на работоспособность. Желательно также написать об этом разработчикам Joomla, чтобы они проблему все же исправили.

Также, можете исправить ошибку самостоятельно (учтите, что при обновлении исправление может "слететь")
$mdata = !empty($this->item->metadata) ? $this->item->metadata->toArray() : [];
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Defoger Автор вопроса
$mdata = !empty($this->item->metadata) ? $this->item->metadata->toArray() : [];

Да в принципе код проблему решает, но лишь частично, вместо ошибки:
Call to a member function toArray() on null
Загружается страница сайта, однако вместо содержимого страницы: заголовок, описание и список материалов текущей метки. Загружается список всех меток, при этом yrl не меняется, проще говоря joomla выдает не ту страницу, которую должна. Можно ли это как-то исправить?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы