ฉันมีมุมมองที่แสดงเป็นสองทาง เมื่อฉันแสดงเป็นบล็อกปกติและใช้งานครั้งเดียว views_embed_view() ร่วมกับอาแจ็กซ์
สำหรับบล็อกปกติฉันสร้างไฟล์ views-view-list.html.twig เทมเพลตในธีมของฉันเพิ่ม แผนก กระดาษห่อ สไตล์ของฉันขึ้นอยู่กับ div ที่เพิ่มเข้ามานี้
สำหรับบล็อคฝังนี้ views-view-list.html.twig บล็อกจะถูกเพิกเฉย ดังนั้นสไตล์จึงถูกปิด
โดยใช้ views_embed_view() ภายใน พรีโพรเซส ทำงานตามที่คุณคาดหวัง แต่การใช้กับ Ajax จะละเว้นเทมเพลต
ฉันจะแน่ใจได้อย่างไรว่าเทมเพลตไม่ถูกละเว้น หรือมีวิธีเพิ่มเทมเพลตอื่นที่เห็นเมื่อฝังมุมมองหรือไม่
ฉันมีโมดูลที่กำหนดเอง my_view_ajax
ฉันแนบไฟล์ js ในไฟล์ .โมดูล ไฟล์:
ฟังก์ชัน my_view_ajax_preprocess_node(&$variables) {
$node = $variables['โหนด'];
// ตรวจสอบประเภทเนื้อหา
ถ้า ($node->getType() == 'บทความ' || $node->getType() == 'ปัญหา' ) {
$variables['#attached']['library'][] = 'my_view_ajax/my_view_ajax__js';
}
}
ในของฉัน .js ฉันใช้ Ajax เพื่อบล็อกการดูของฉัน
const routing_url = '/custom/ajax/articles';
$.ajax({
ประเภท: 'รับ',
url: routing_url,
ข้อมูล: 'nid='+nid,
ประเภทข้อมูล: 'html',
async: จริง,
สมบูรณ์: ฟังก์ชัน (ข้อมูล) {
$containerContent.empty().html(data.responseText);
$containerContent.fadeIn();
$ajaxLoader.fadeOut();
}
});
ในของฉัน routing.yml ฉันสร้างเส้นทาง Ajax
my_view_ajax.articles:
เส้นทาง: '/custom/ajax/articles'
ค่าเริ่มต้น:
_title: 'บทความ'
_controller: '\Drupal\my_view_ajax\Controller\viewsajaxController::issueArticles'
ความต้องการ:
_permission: 'เข้าถึงเนื้อหา'
และในที่สุดของฉัน viewsajaxController.php
เนมสเปซ Drupal\my_view_ajax\Controller;
ใช้ Drupal\Core\Controller\ControllerBase;
ใช้ Drupal\node\Entity\Node;
ใช้ \Symfony\Component\HttpFoundation\Response;
คลาส viewsajaxController ขยาย ControllerBase {
ปัญหาฟังก์ชั่นสาธารณะบทความ () {
$nid = 11;
$markup = \Drupal::service('renderer')->render(views_embed_view('ccr_overview', 'block_articles_view', $nid));
ส่งคืนการตอบกลับใหม่ ($ มาร์กอัป);
}
}