Небольшая ошибка PHP Слишком мало аргументов для работы на php72

Мне нужна помощь в устранении небольшой проблемы с моим скриптом 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">

Сколько параметров вы передаете smarty_function_gravatar()? В сообщении предлагается либо 0, либо 1, а не 2.

ggdx 19.12.2018 08:56
1 passed and exactly 2 expected Один ... Думаю, ошибка довольно понятная.
ArtisticPhoenix 19.12.2018 08:59

@ggdx я обновил сообщение

Hendra Setyawan 19.12.2018 09:11

Возможный дубликат Мой код PHP не работает с PHP 7.1 или 7.2

Martin Zeitler 19.12.2018 09:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
3 371
2

Ответы 2

см. kevinpapst.de (на немецком языке); это с 2008 года, и синтаксис тоже ...

тем временем документация говорит кое-что еще о «Написании плагинов»:

As a general rule, the currently evaluated template's Smarty_Internal_Template object 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 так, чтобы скрыть информацию об ошибках - что-то, что больше не полезно для фатальных ошибок, потому что они все равно прерывают выполнение.

Поскольку вы никогда не используете второй аргумент функции, просто избавьтесь от него полностью.

Извините, я не очень понимаю, предлагаете ли вы удалить код или добавить код

Hendra Setyawan 19.12.2018 09:15

Пожалуйста, проверьте ответ Мартина. Я предполагаю, что это не пользовательская функция, а какой-то плагин Twig, который был разработан для более старой версии.

Álvaro González 19.12.2018 13:07

Другие вопросы по теме