Рейтинг:-1

Как я могу программно заменить строку на первой странице?

флаг la

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

функция my_module_preprocess_page(&$variables) {
  если (\Drupal::routeMatch()->getRouteName() == 'view.frontpage.page_1') {
    $сгенерироватьблок = NULL;
    $block_manager = \Drupal::service('plugin.manager.block');
    $block_config = [];
    $block_plugin = $block_manager->createInstance('id_block', $block_config);
    $block_build = $block_plugin->build();
    $block_content = визуализация ($ block_build);
      
    $block = \Drupal\block_content\Entity\BlockContent::load(4);
    $render = \Drupal::entityTypeManager()->getViewBuilder('block_content')->view($block);
    $body = $render['body'][0]['#text'];
    $newContent = str_replace('---*block*---', $block_content, $body);
    // Я не знаю, как визуализировать новый измененный контент из $newContent.
    вернуть $переменные;
  }
}

Мне нужно изменить содержимое с новой строкой в $newContent, но я не могу сохранить это содержимое в переменных. Мой контент не изменен.

Jaypan avatar
флаг de
Можете ли вы рассказать нам свой вариант использования? Я сомневаюсь, что делать это в preprocess_page — лучшее место для этого, но вы не сказали нам, какова ваша цель.
apaderno avatar
флаг us
Добро пожаловать в Drupal Ответы! Также нет необходимости рендерить блок в `hook_preprocess_page()`, что, вероятно, является неправильным местом для этого, так как ядро ​​Drupal уже рендерит блоки самостоятельно. Если вам нужно переделать блок, для этого есть крючок.
ridd avatar
флаг la
Мой вариант использования - этот пользователь создает блокировку в администрировании. Содержимое этого блока имеет специальную строку ---*блок*--- - эта строка указывает, где в блоке пользователь хочет сгенерировать контент из другого блока 'id_block' Поэтому мне нужно найти эту строку на главной странице и заменить ее моим блоком рендеринга. Это работает правильно в preprocess_node, но не в preprocess_page, потому что я не могу сохранить контент - это не работает $variables['page']['content']['kontakt'] = $mynewcontent
Рейтинг:0
флаг in

Рассматривали ли вы возможность использования Пользовательский токен и Фильтр токенов модули вместе?

Также есть краткое руководство по реализации ваших собственных токенов: https://codimth.com/blog/web/drupal/how-create-custom-token-drupal-8-9

А вот и Readme Token Filter: https://git.drupalcode.org/project/token_filter/-/blob/8.x-1.x/README.txt

ridd avatar
флаг la
Спасибо. Пользовательский токен был хорошим решением. Я создал его, и теперь он намного лучше, чем раньше :)

Ответить или комментировать

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