Score:-1

ฉันจะแทนที่สตริงในหน้าแรกโดยทางโปรแกรมได้อย่างไร

ธง la

ฉันสร้างโมดูลที่กำหนดเองซึ่งแทนที่สตริงบางส่วนในหน้าแรก สำหรับโหนดนั้นทำงานได้อย่างถูกต้อง แต่ไม่ทำงานบนหน้าแรก ฉันเขียนรหัสนี้

ฟังก์ชัน my_module_preprocess_page(&$ตัวแปร) {
  ถ้า (\Drupal::routeMatch()->getRouteName() == 'view.frontpage.page_1') {
    $generateBlock = โมฆะ;
    $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::โหลด(4);
    $render = \Drupal::entityTypeManager()->getViewBuilder('block_content')->view($block);
    $body = $render['body'][0]['#text'];
    $newContent = str_replace('---*block*----', $block_content, $body);
    // ฉันไม่รู้ว่าแสดงเนื้อหาที่แก้ไขใหม่จาก $newContent อย่างไร
    ส่งคืนตัวแปร $;
  }
}

ฉันต้องการแก้ไขเนื้อหาด้วยสตริงใหม่ใน $เนื้อหาใหม่แต่ฉันไม่สามารถบันทึกเนื้อหานี้ไปยังตัวแปรได้ เนื้อหาของฉันไม่ถูกดัดแปลง

Jaypan avatar
de flag
คุณช่วยบอกเราถึงกรณีการใช้งานของคุณได้ไหม? ฉันสงสัยว่าการทำเช่นนี้ใน preprocess_page จะเป็นที่ที่ดีที่สุด แต่คุณยังไม่ได้บอกเราว่าเป้าหมายของคุณคืออะไร
apaderno avatar
us flag
Welcome to Drupal Answers! There is also no need to render a block in `hook_preprocess_page()`, which is probably the wrong place to do it, since Drupal core already renders blocks of its own. If you need to alter a block, there is a hook for that.
ridd avatar
la flag
กรณีการใช้งานของฉันคือ - ผู้ใช้รายนั้นสร้างบล็อกในการดูแลระบบ เนื้อหาบล็อกนี้มีสตริงพิเศษ ---*blok*--- - สตริงนี้บอกว่าผู้ใช้ต้องการสร้างเนื้อหาจากบล็อกอื่น 'id_block' ที่ใดในบล็อก ดังนั้นฉันต้องค้นหาสตริงนี้ในหน้าแรกและแทนที่ด้วยบล็อกการแสดงผลของฉัน มันทำงานได้อย่างถูกต้องใน preprocess_node แต่ไม่ใช่ใน preprocess_page เพราะฉันไม่สามารถบันทึกเนื้อหาได้ - มันใช้งานไม่ได้ $variables['page']['content']['kontakt'] = $mynewcontent
Score: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 flag
ขอบคุณ. โทเค็นที่กำหนดเองเป็นทางออกที่ดี ฉันสร้างมันขึ้นมา และตอนนี้ดีขึ้นกว่าเดิมมาก :)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา