Начал ваять новую форму результатов поиска для сайта и столкнулся с ошибкой:
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';
}
}
}