Добавить в корзинуПозвонить
Найти в Дзене

Drupal 9 — Call to a member function render() on string

Начал ваять новую форму результатов поиска для сайта и столкнулся с ошибкой: Error: Call to a member function render() on string in C:\web\drupal8\themes\uikit_blog\includes\preprocess.inc on line 162 Ошибка в функции uikit_blog_preprocess_input препроцессинга. Данная функция написана автором темы Uikit Blog. Изначально я использовал именно эту тему для сайта, но потом модифицировал под свои нужды. Автор темы вносит обновления на сайт редко, поэтому пришлось вникать в код самому. Функция содержала код: // Add uk-button-* classes based on the value of the button. $value = $element['#value']->render(); В зависимости от полученного значения далее добавлялись классы uk-button к элементу ввода. Т.е. функция совершенно бесполезная, потому что в ней хардкодом внесены тексты кнопок, которые нужно подсвечивать разными цветами. Не самое лучшее решение. Для русского языка не будет работать всё равно. В данном коде ошибка происходила при попытке вызова функции render() к строке. Хм, ну давайте убе

Начал ваять новую форму результатов поиска для сайта и столкнулся с ошибкой:

Error: Call to a member function render() on string in C:\web\drupal8\themes\uikit_blog\includes\preprocess.inc on line 162

Ошибка в функции uikit_blog_preprocess_input препроцессинга. Данная функция написана автором темы Uikit Blog. Изначально я использовал именно эту тему для сайта, но потом модифицировал под свои нужды. Автор темы вносит обновления на сайт редко, поэтому пришлось вникать в код самому.

Функция содержала код:

// Add uk-button-* classes based on the value of the button. $value = $element['#value']->render();

В зависимости от полученного значения далее добавлялись классы uk-button к элементу ввода. Т.е. функция совершенно бесполезная, потому что в ней хардкодом внесены тексты кнопок, которые нужно подсвечивать разными цветами. Не самое лучшее решение. Для русского языка не будет работать всё равно.

В данном коде ошибка происходила при попытке вызова функции render() к строке. Хм, ну давайте уберём её:

// Add uk-button-* classes based on the value of the button. $value = $element['#value'];

Ну вот, другое дело. Шарманка заработала. Для красоты добавил в код:

case 'Применить':
case 'Поиск':

Если уж есть функция, пусть в формах поиска кнопки будут красивые. Итого получилось:

/**
* Implements hook_preprocess_HOOK() for input.html.twig.
*/
function uikit_blog_preprocess_input(&$variables) { $element = $variables['element'];
$submit = isset($element['#type']) && $element['#type'] == 'submit';

if ($submit) {
// Add the uk-button class. $variables['attributes']['class'] = ['uk-button'];

// Add uk-button-* classes based on the value of the button. // $value = $element['#value']->render(); $value = $element['#value'];
switch ($value) {
case 'Advanced search':
case 'Create new account':
case 'Log in':
case 'Save':
case 'Search':
case 'Send message':
case 'Submit':
case 'Применить':
case 'Поиск':
$variables['attributes']['class'][] = 'uk-button-primary';
break;

case 'Preview':
$variables['attributes']['class'][] = 'uk-button-warning';
break;

default:
$variables['attributes']['class'][] = 'uk-button-default';
}
}
}

Источник:
https://internet-lab.ru/drupal9_error_string_render

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.