Score:0

ระบุธีมเมื่อสร้างเนื้อหา / นำเข้าเนื้อหาผ่าน Feeds

ธง cn

ฉันต้องการบังคับให้สร้างเนื้อหาทั้งหมดโดยใช้ธีมหลักของเว็บไซต์ ฉันต้องการทำเช่นนี้เพราะฉันใช้โปรแกรมเรนเดอร์ใน MYMODULE_node_presave() แบบนี้:

ฟังก์ชัน MYMODULE_node_presave (NodeInterface $node) {
  $renderer = \Drupal::service('เรนเดอร์');

  $content_type = $node->getType();
  ถ้า ($content_type == 'หน้า') {
    $viewmode_render = $node->get('field_text_main_to_render')
      -> ดู ('rendered_output');
    $processed_display = $renderer->renderPlain($viewmode_render);
    $node->set('field_text_main_display', "$processed_display");
    $node->field_text_main_display->format = 'ประมวลผลแล้ว';
}

เว็บไซต์ของฉันใช้ Bartik เป็นธีมหลักและ Seven เป็นธีมสำหรับผู้ดูแลระบบ

ภายใต้การตั้งค่าลักษณะที่ปรากฏ (/admin/ลักษณะที่ปรากฏ) ฉันได้ตรวจสอบการตั้งค่าแล้ว ใช้ธีมการดูแลระบบเมื่อแก้ไขหรือสร้างเนื้อหา. สิ่งนี้ทำให้มั่นใจได้ว่าโหนดจะแสดงผลใน Bartik เมื่อสร้างใน UI

อย่างไรก็ตาม เมื่อฉันเปิดโหนดอีกครั้ง /ผู้ดูแลระบบ/เนื้อหาโหนดจะถูกบันทึกใหม่ด้วย Seven แทนที่จะเป็น Bartik ดังนั้นฉันจึงเพิ่ม หัวข้อ นักเจรจาต่อรอง:

/**
 * เลือกธีมที่ถูกต้องสำหรับเส้นทางต่างๆ
 */
คลาส ThemeNegotiator ใช้ ThemeNegotiatorInterface {

  /**
   * {@inheritDoc}
   */
  ใช้ฟังก์ชันสาธารณะ (RouteMatchInterface $route_match) {
    ส่งคืน $this->negotiateRoute($route_match) ? ถูกผิด;
  }

  /**
   * {@inheritDoc}
   */
  ฟังก์ชันสาธารณะกำหนด ActiveTheme (RouteMatchInterface $route_match) {
    ส่งคืน $this->negotiateRoute($route_match) ?: NULL;
  }

  /**
   * เลือกธีมสำหรับกรณีพิเศษ
   *
   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
   * เส้นทางที่ตรงกันในปัจจุบัน
   *
   * @return บูล|สตริง
   * ชื่อธีมที่จะใช้ (สตริง) หรือเท็จ (บูล)
   */
  ฟังก์ชันส่วนตัวการเจรจาเส้นทาง (RouteMatchInterface $route_match) {
    $route_name = $route_match->getRouteName();
    // หน้าเนื้อหาของผู้ดูแลระบบต้องใช้ธีมการเรนเดอร์โหนด
    // ทำไม: การดำเนินการ "บันทึกเนื้อหา" จะใช้ธีมของหน้านี้
    ถ้า ($route_name === 'system.admin_content') {
      กลับ 'bartik';
    }
    อื่น {
      กลับ FALSE;
    }
  }

}

ตอนนี้เมื่อฉันรันโหนดจำนวนมากอีกครั้ง /ผู้ดูแลระบบ/เนื้อหาโหนดแสดงผลอย่างถูกต้องด้วย Bartik

ต่อไปฉันติดตั้งไฟล์ ฟีด โมดูล. ตอนนี้ เมื่อฉันนำเข้าโหนดผ่าน CSV โดยใช้ฟีด โหนดเหล่านั้นจะแสดงผลโดยใช้ Seven ไม่ใช่ Bartik ฉันต้องการบังคับให้โหนดเหล่านี้แสดงผลโดยใช้ Bartik แต่ฉันไม่รู้ว่าต้องทำอย่างไร (เช่นถ้ามีวิธีใช้ เจรจาเส้นทาง ใน หัวข้อ นักเจรจาต่อรองก็น่าจะใช้ได้ แต่ฉันไม่รู้วิธีตั้งค่า) มีความคิดเห็นอย่างไร

4uk4 avatar
cn flag
ฉันจะใช้ตัวเจรจาธีมในคำขอย่อย ซึ่งตัวควบคุมส่งคืนการตอบกลับพร้อมกับโหนดที่แสดงผล ดูตัวอย่างวิธีสร้างคำขอย่อยและวิธีหลีกเลี่ยงข้อผิดพลาดหลัก: https://drupal.stackexchange.com/questions/303396/making-an-http-subrequest-causes-currentroutematch-to-have- เส้นทางที่ไม่ถูกต้อง
Score:0
ธง de

เนื้อหาสามารถแสดงผลในธีมใดก็ได้ และแสดงผลในธีมปัจจุบันตามเวลาที่กำหนด คุณไม่ได้บันทึกเนื้อหาที่เป็นของธีม แต่ถ้าคุณต้องการให้ธีมต่างๆ แสดงเนื้อหา คุณสามารถลองใช้ สลับโมดูลธีมหน้า.

cn flag
"คุณไม่ได้บันทึกเนื้อหาที่เป็นของธีม" ใช่ โดยทั่วไปจะเป็นเช่นนี้ แต่ตามที่ระบุไว้ในคำถามของฉัน ฉันใช้ `hook_node_presave()` เพื่อแสดงฟิลด์บางฟิลด์และบันทึกผลลัพธ์ที่แสดงผล ซึ่งเป็นการบันทึกเนื้อหาที่เป็นของธีมเฉพาะ ฉันจึงต้องควบคุมว่าจะใช้ธีมใดเพื่อแสดงเนื้อหาสำหรับการบันทึกเนื้อหาเฉพาะนี้
Jaypan avatar
de flag
องค์ประกอบเหล่านั้นจะแสดงผลในธีมปัจจุบัน ณ เวลาที่แสดงผล ในกรณีของคุณ นั่นอาจอยู่บนเส้นทางที่การนำเข้าเกิดขึ้น ดังนั้นคุณจึงสามารถใช้โมดูลด้านบนเพื่อตั้งค่าธีมสำหรับเส้นทางฟีด ที่กล่าวว่า ดูเหมือนว่าการออกแบบสถาปัตยกรรมจะไม่ค่อยดีนักที่จะจัดเก็บ HTML ที่แสดงผลแล้ว จะทำอย่างไรถ้าคุณต้องการเปลี่ยนธีมของคุณในอนาคต หรือค้นหาในฟิลด์นั้น โดยปกติแล้ว คุณจะต้องจัดเก็บข้อมูลและแสดงผลบนเอาต์พุต แคชเอาต์พุตที่แสดงผลหากเป็นบิลด์ที่มีค่าใช้จ่ายสูง โดยส่วนตัวแล้วฉันจะพิจารณาการปรับโครงสร้างสถาปัตยกรรมมากกว่าการปรับเปลี่ยนธีม

โพสต์คำตอบ

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