ฉันจะโหลดเทมเพลตจากโมดูลที่กำหนดเองในบางหน้าได้อย่างไร
เราจัดเตรียมเนื้อหาของเราผ่านทาง API บางครั้งเราใช้วิธี Views Restful และในบางครั้งใช้ JSONAPI
เราจำเป็นต้องเพิ่มฟิลด์ API บนโหนดที่มีการเรนเดอร์ HTML แบบเต็มของหน้าโหนดนั้นตามธีม (ในทางเทคนิคแล้วฉันแค่ต้องการ ... แต่ฉันจะใช้เอกสารทั้งหมดหากหาได้)
ฉันได้ลองหลายวิธี:
ฉันพยายามใช้บริการเรนเดอร์ มันแสดง html แบบเต็มจากเทมเพลต html.html.twig แต่ไม่มีรายการเช่นบล็อกในหน้า ฉันคิดว่ามันไม่มีบริบททั้งหมดที่ต้องการ
$view_builder = \Drupal::entityTypeManager()->getViewBuilder('โหนด');
$content = $view_builder->view($node);
$ สร้าง = [
'#type' => 'html',
'หน้า' => [
'#type' => 'หน้า',
'#theme' => 'หน้า',
'#title' => $node->get("title")->value,
'เนื้อหา' => $เนื้อหา,
]
];
$page = \Drupal::service('renderer')->renderPlain($build);
ในทำนองเดียวกัน ฉันลองใช้ twig_render_template มันแสดง html แบบเต็มในทำนองเดียวกัน แต่รายการเช่นบล็อกในหน้านั้นหายไป
$markup = twig_render_template(drupal_get_path('theme', 'neato') . '/templates/base/html.html.twig', อาร์เรย์(
'หน้า' => [
'#type' => 'หน้า',
'#theme' => 'หน้า',
'#title' => $node->get("title")->value,
'เนื้อหา' => $เนื้อหา,
]
// จำเป็นเพื่อป้องกันการแจ้งให้ทราบเมื่อเปิดใช้งานการดีบัก Twig
'theme_hook_original' => 'ไม่เกี่ยวข้อง',
));
$body = (สตริง) $markup;
ในแนวทางที่แยกจากกัน ฉันพยายามสร้าง 'คำขอย่อย' ด้วยวิธีนี้ ฉันได้รับ HTML ที่เรนเดอร์แล้ว แต่ทำให้เกิดข้อผิดพลาดร้ายแรงในการแสดงผลในช่วงต้น เช่น "การร้องขอ renderRoot() ที่หลงทางทำให้เนื้อหาที่แนบมาแตกเป็นฟอง"
$kernel = \Drupal::service('http_kernel.basic');
$sub_request = \Symfony\Component\HttpFoundation\Request::create("/node/".$value->_entity->id(), 'GET');
$subResponse = $kernel->handle($sub_request, \Symfony\Component\HttpKernel\HttpKernelInterface::SUB_REQUEST);
$html = $subResponse->getContent();
ฉันยังพยายามเลียนแบบ 'bootstrap' ของ drupal แบบเต็ม
$autoloader = ต้องการ '/app/web/autoload.php';
$sub_request = คำขอ::create("/node/".$node->id(), 'GET');
$site_path = DrupalKernel::findSitePath($sub_request);
$kernel = DrupalKernel::createFromRequest($sub_request, $autoloader, 'prod');
$sub_response = $kernel->handle($sub_request, HttpKernelInterface::SUB_REQUEST);
$html = $sub_response->getContent();