Перейти к основному содержанию

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

Drupal 9

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

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';
	}
  }
}

Теги

 

Похожие материалы

Обновление Drupal 9 до Drupal 10 в Windows

Пока не закончились новогодние праздники нужно успеть сделать одно хорошее дело. А именно, обновить движок сайта с Drupal 9 на Drupal 10. Посетителей не много, все отдыхают. Так что самое время.

Drupal 9 — модуль Ludwig, ручная альтернатива Composer

Выделяю время на обслуживание сайта, потом кучу статей на тему Drupal приходится писать. И людям помочь, и самому не забыть. Вашему вниманию представляется незаменимый в некоторых случаях модуль Ludwig.

Теги