Мне нужна помощь в устранении небольшой проблемы с моим скриптом php для работы на php7.2, приведенный ниже код работает на php7.0, но не работает на php7.1 или 7.2 :(
Ошибка при отладке:
ArgumentCountError: Too few arguments to function smarty_function_gravatar(), 1 passed and exactly 2 expected in public_html/includes/hooks/custom-function.php: Line 91
Stack trace:
#0 /public_html/includes/hookfunctions.php(0): smarty_function_gravatar(Array)
#1 /public_html/includes/clientareafunctions.php(0): run_hook('ClientAreaPage', Array)
#2 /public_html/login.php(0): outputClientArea('login', false, Array)
#3 /public_html/member/viewticket.php(0): unknown()
#4 {main}
Мой исходный код в строке 91:
function smarty_function_gravatar($params, &$smarty) {
$email = (isset($params['email']) ? trim(strtolower($params['email'])) : '');
$rating = (isset($params['rating']) ? $params['rating'] : 'R');
$url = "https://www.gravatar.com/avatar/".md5($email) . "?r = ".$rating;
if (isset($params['default']))
$url .= "&d = ".urlencode($params['default']);
if (isset($params['size']))
$url .= "&s = ".$params['size'];
if (isset($params['assign'])) {
$smarty->assign($params['assign'], $url);
return;
}
return $url;
}
На шаблоне .tpl
<img src = "{gravatar email = "{if $reply.name eq 'Admin 1'}[email protected]{elseif $reply.name eq 'Admin 2'}[email protected]{elseif $reply.name eq 'Admin 3'}[email protected]{elseif $reply.name eq 'Admin 4'}[email protected]{/if}" size = "140"}" height = "60" width = "60">
{elseif $reply.contactid} <img src = "{gravatar email = "$replyemail" size = "140"}" height = "60" width = "60">
{elseif $reply.userid}
<img src = "{gravatar email = "$replyemail" size = "140" default = "/default-avatar.png"}" height = "60" width = "60">
{else}
<img src = "{gravatar email = "$replyemail" size = "140" default = "/default-avatar.png"}" height = "60" width = "60">
1 passed and exactly 2 expected Один ... Думаю, ошибка довольно понятная.
@ggdx я обновил сообщение
Возможный дубликат Мой код PHP не работает с PHP 7.1 или 7.2






см. kevinpapst.de (на немецком языке); это с 2008 года, и синтаксис тоже ...
тем временем документация говорит кое-что еще о «Написании плагинов»:
As a general rule, the currently evaluated template's
Smarty_Internal_Templateobject is always passed to the plugins as the last parameter with two exceptions:
модификаторы вообще не передаются объекту Smarty_Internal_Template.
блоки передаются $ repeat после объекта Smarty_Internal_Template, чтобы сохранить обратную совместимость со старыми версиями Smarty.
Например:
function smarty_function_gravatar(array $params, Smarty_Internal_Template $template) {
$email = (isset($params['email']) ? trim(strtolower($params['email'])) : '');
$rating = (isset($params['rating']) ? $params['rating'] : 'R');
$url = "https://www.gravatar.com/avatar/".md5($email) . "?r = ".$rating;
if (isset($params['default'])) {
$url .= "&d = ".urlencode($params['default']);
}
if (isset($params['size'])) {
$url .= "&s = ".$params['size'];
}
if (isset($params['assign'])) {
$template->smarty->assign($params['assign'], $url);
return;
}
return $url;
}
для использования одинаково:
{gravatar email = "[email protected]" size = "60" rating = "X" assign = "gravatarURL" default = "http://www.example.com/default_gravatar.jpg"}
<img src = "{$gravatarURL}" height = "60" width = "60">
Отсутствие аргументов вызывает предупреждение только до PHP / 7.0, но начиная с PHP / 7.1 они вызывают фатальную ошибку (демонстрация). От 7.0 руководство по миграции:
Previously, a warning would be emitted for invoking user-defined functions with too few arguments. Now, this warning has been promoted to an Error exception. This change only applies to user-defined functions, not internal functions.
Скорее всего, это никогда не работало, но вы настроили PHP так, чтобы скрыть информацию об ошибках - что-то, что больше не полезно для фатальных ошибок, потому что они все равно прерывают выполнение.
Поскольку вы никогда не используете второй аргумент функции, просто избавьтесь от него полностью.
Извините, я не очень понимаю, предлагаете ли вы удалить код или добавить код
Пожалуйста, проверьте ответ Мартина. Я предполагаю, что это не пользовательская функция, а какой-то плагин Twig, который был разработан для более старой версии.
Сколько параметров вы передаете
smarty_function_gravatar()? В сообщении предлагается либо 0, либо 1, а не 2.