И так очередные баги в джумле при работе на PHP 5.3.x
Вы заходите в админке в управление каким то меню и видите красоту:
-
Warning: Parameter 4 to JHTMLMenu::treerecurse() expected to be a reference, value given in /libraries/joomla/html/html.php on line 88
-
-
Warning: array_slice() expects parameter 1 to be array, null given in/administrator/components/com_menus/models/list.php on line 143
-
-
Warning: Invalid argument supplied for foreach() in /administrator/components/com_menus/models/list.php on line 147
-
-
Warning: Invalid argument supplied for foreach() in /administrator/components/com_menus/views/list/view.php on line 65
-
Фильтр: Перейти Сбросить Максимальные уровни
-
-
Warning: Invalid argument supplied for foreach() in /administrator/components/com_menus/views/list/tmpl/default.php on line 69
И думаете вот блин где же мое меню, которое кстати не отображаеться, только выше приведеные варнинги.
Не бойтесь примем пилюлю и все вылечим :)
Лечиться легко, если делать всё правильно.
Вам нужно перейти по адрессу .../libraries/joomla/html/html.php
Открыть файлик html.php
И примерно на 88-й строке вы должны увидеть следующее
return call_user_func_array( array( $className, $func ), $args );
Нужно заменить на:
return call_user_func_array( array( $className, $func ), &$args );
Вообще вам нужно искать условие:
if (is_callable( array( $className, $func ) ))
Которое содержит:
-
if (is_callable( array( $className, $func ) ))
-
{
-
$args = func_get_args();
-
array_shift( $args );
-
return call_user_func_array( array( $className, $func ), $args );
-
}
-
else
Но вполне может выглядеть и вот так:
-
if (is_callable( array( $className, $func ) ))
-
{
-
$args = func_get_args();
-
array_shift( $args );
-
$temp = func_get_args();
-
array_shift( $temp );
-
$args = array();
-
foreach ($temp as $k => $v) {
-
$args[] = &$temp[$k];
-
}
-
return call_user_func_array( array( $className, $func ), $args );
-
}
-
else
В этом случае вам нужно его заменить на:
-
if (is_callable( array( $className, $func ) ))
-
{
-
$args = func_get_args();
-
array_shift( $args );
-
return call_user_func_array( array( $className, $func ), &$args );
-
}
-
else
Если не поможет то в старом коде (я имею в веду код который был до замены) поставить перед $args значок амперсанда & (вот так &$args)
С выздоровлением, надеюсь мое лечение вам помогло :)
Комментарии
В PHP 5.5 исправляется иначе
Большое спасибо за Ваше решение.
Однако в версиях PHP 5.5.x проблема исправляется иначе.
Приведенное решение в PHP 5.5.x приведет к: “Fatal error: Call-time pass-by-reference has been removed” (или к пустой странице как описала выше Светлана, поскольку в ее случае отключен вывод ошибок в браузер).
Таком образом, что бы исправить проблему в файле .../libraries/joomla/html/html/menu.php находим и меняем строку:
function treerecurse( $id, $indent, $list, &$children, $maxlevel=9999, $level=0, $type=1 )
на:
function treerecurse( $id, $indent, $list, $children, $maxlevel=9999, $level=0, $type=1 )
То есть удаляем амперсанд перед &$children -> $children.
Найдено здесь: http://www.itoctopus.com/menu-item-manager-empty-in-joomla
Спасибо!
Огромное спасибо!
Огромное спасибо!
Помогло!
Спасибо, Просто и эффективно! В самый раз, для новичка, осваивающего сайтостроение))
ОГРОМНОЕ СПАСИБО!!!
Заменил на
if (is_callable( array( $className, $func ) ))
{
$args = func_get_args();
array_shift( $args );
return call_user_func_array( array( $className, $func ), &$args );
}
else
И все заработало!
СПАСИБО!!!
Спасибо!
Спасибо!
Светлана
Отличная статья!
Вот только при попытке осуществить написанное здесь, почему-то столкнулась с новой проблемой. При открытии %имясайта%/libraries/joomla/html/html.php загружается пустая страничка. Что это может быть, или просто я туплю?))
Заранее спасибо за ответ!
Скажем так второй из
Скажем так второй из предложенных вами материалов.
Открывать нужно в каком не будь редакторе, хотя бы в блокноте. Вам же нужно изменить в файле строки, значит его нужно редактировать, а не пытаться открыть через браузер.
Thanks
Thank you, It really helped me :)
Warning: Parameter 4 to JHTMLMenu::treerecurse() ...
Большое спасибо! Помогло.
Ура
Помогло
Спасибо!
Спасибо Ваша статья очень помогла!
Спасибо! Помогла замена $args
Спасибо! Помогла замена $args на &$args.
В главном меню не выводится пункт "Что нового в 1.5?".
Если возможно, то подскажите где искать?
С уважением, Игорь.
Вот чего не знаю того не
Вот чего не знаю того не знаю. Нужно проводить вскрытие.
Спасибо! Помогла замена $args на &$args.
Большое спасибо! Блин, полдня код ковырял, не мог понять почему!? Вроде правильно все написано...
Большое спасибо за помощь!
Большое спасибо за помощь!
Отправить комментарий