Puncte:-1

Cum pot înlocui programatic un șir de pe prima pagină?

drapel la

Creez un modul personalizat care înlocuiește un șir de caractere pe prima pagină. Pentru noduri, funcționează corect, dar nu funcționează pe prima pagină. Am scris acest cod.

funcția my_module_preprocess_page(&$variabile) {
  dacă (\Drupal::routeMatch()->getRouteName() == 'view.frontpage.page_1') {
    $generateBlock = 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 = randare($block_build);
      
    $bloc = \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);
    // Nu știu cum redau noul conținut modificat din $newContent.
    returnează $variabile;
  }
}

Trebuie să modific conținutul cu un șir nou $newContent, dar nu pot salva acest conținut în variabile. Conținutul meu nu este modificat.

Jaypan avatar
drapel de
Ne puteți spune cazul dvs. de utilizare? Mă îndoiesc că a face acest lucru în preprocess_page este cel mai bun loc pentru a o face, dar nu ne-ați spus care este scopul dvs.
apaderno avatar
drapel us
Bun venit la Drupal Answers! De asemenea, nu este nevoie să randați un bloc în `hook_preprocess_page()`, care este probabil locul greșit pentru a face acest lucru, deoarece nucleul Drupal redă deja blocuri proprii. Dacă trebuie să modificați un bloc, există un cârlig pentru asta.
ridd avatar
drapel la
Cazul meu de utilizare este - acel utilizator creează bloc în administrare. Conținutul acestui bloc are șir special ---*blok*--- - acest șir spune unde în bloc utilizatorul dorește să genereze conținut dintr-un alt bloc „id_block” Așa că trebuie să găsesc acest șir pe prima pagină și să-l înlocuiesc cu blocul meu de randare. Funcționează corect în preprocess_node, dar nu în preprocess_page, deoarece nu pot salva conținut - acest lucru nu funcționează $variables['page']['content']['kontakt'] = $mynewcontent
Puncte:0
drapel in

Te-ai gândit să folosești Token personalizat și Filtru de jetoane module împreună?

Există, de asemenea, acest scurt tutorial despre implementarea propriilor jetoane personalizate: https://codimth.com/blog/web/drupal/how-create-custom-token-drupal-8-9

Și aici este Readme-ul Token Filter: https://git.drupalcode.org/project/token_filter/-/blob/8.x-1.x/README.txt

ridd avatar
drapel la
Mulțumiri. Tokenul personalizat a fost o soluție bună. Eu l-am creat și acum este mult mai bine decât înainte :)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.