วิธีแสดงสรุป (ทีเซอร์) เหนือเนื้อหาในมุมมองเนื้อหาแบบเต็ม


11

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

  1. หัวข้อ
  2. ทีเซอร์ (สรุปบทความ)
  3. ภาพ
  4. ร่างกาย

นอกจากนี้ทีเซอร์ควรมีการจัดรูปแบบของตัวเอง (เช่นตัวเอียงและแบบอักษรขนาดใหญ่)

ฉันไม่พบวิธีการใด ๆ โดยไม่ต้องแก้ไขไฟล์ tpl หรือไฟล์หลัก

วิธีแก้ไขคือเพิ่มฟิลด์ "article_teaser" ใหม่ให้กับประเภทเนื้อหาของฉันจากนั้นจัดการจอแสดงผลเพื่อรับเลย์เอาต์ของฉันในมุมมอง“ เนื้อหาเต็ม” ใช้งานได้ แต่ฉันไม่ต้องการมีสองทีเซอร์ฟิลด์ในแบบฟอร์มเนื้อหาอินพุตของฉันเพราะฉันควรพิมพ์ข้อความเดียวกันสองครั้ง

ดูเหมือนว่าฉันไม่สามารถแยกส่วนเนื้อหาในส่วน "ข้อความ" และ "สรุป" ของมันได้ แต่ฉันสามารถแสดงหนึ่งหรืออื่น ๆ แต่ไม่ใช่ทั้งสองอย่าง!

มีวิธีใดบ้างที่จะทำเช่นนั้น?

(สภาพแวดล้อมของฉัน: Drupal 7 พร้อมธีมย่อย Zen)

คำตอบ:


10

คุณสามารถทำได้ด้วย Views สร้างมุมมองที่แทนที่เส้นทางสำหรับประเภทเนื้อหาของคุณ ตั้งค่าการแสดงผลเป็นฟิลด์แล้วเพิ่มฟิลด์ร่างกายสองครั้ง ตั้งค่าอินสแตนซ์แรกเพื่อแสดงทีเซอร์และอินสแตนซ์ที่สองเพื่อแสดงเนื้อหา คุณสามารถเพิ่มภาพในระหว่าง Views ยังช่วยให้คุณสามารถปรับแต่ง CSS ของฟิลด์ทีเซอร์ / เนื้อหาได้อย่างง่ายดาย (โดยค่าเริ่มต้น Views จะมีคลาสจำนวนมากและคุณสามารถเพิ่มคลาสเพิ่มเติมได้หากจำเป็น)

สำหรับการอ้างอิง: โหนดหนึ่ง screencasts วิดีโอชุดเกี่ยวกับการใช้มุมมอง


ขอบคุณมาก. ลิงค์มีประโยชน์มากและฉันกำลังเรียนรู้มากมายเกี่ยวกับมุมมอง: ฉันได้รับมุมมองที่ทำสิ่งนั้น แต่จำนวนการดูจะแสดงรายการโหนดในขณะที่ประเภทเนื้อหาของฉัน (หน้าหนังสือ) เป็นหน้าเดียว: ฉันจะแทนที่หน้าหนังสือเล่มเดียว (โหนด) ด้วยรายการของโหนดได้อย่างไร (มุมมองที่ฉันสร้าง) ฉันอาจขาดอะไรบางอย่างเกี่ยวกับมุมมองบางทีวิธีการแทนที่หน้าหนังสือเริ่มต้นด้วยตัวเอง
gingo

@gingo หากต้องการแทนที่หน้าหนังสือทั้งหมดคุณต้องกำหนดค่าเส้นทางดูด้วยวิธีพิเศษ ตัวอย่างเช่นดูที่มุมมองคำศัพท์อนุกรมวิธานซึ่งจัดทำโดย Views ตามค่าเริ่มต้น (ปิดใช้งาน) เส้นทางถูกตั้งค่าเป็น/taxonomy/term/%; หากคุณแก้ไขมุมมองนั้นคุณสามารถดูว่าข้อโต้แย้ง (ตัวกรองเชิงบริบท) ถูกดึงเข้ามาอย่างไรเพื่อให้คุณสามารถแก้ไขการแสดงผลสำหรับคำศัพท์ทางภาษี คุณสามารถตั้งค่าสิ่งที่คล้ายกันสำหรับหน้าหนังสือในเว็บไซต์ของคุณ
Patrick Kenny

ฉันต้องมองลึกลงไปในตัวกรองเชิงบริบท แต่ฉันคิดว่าฉันกำลังถูกทาง ขอขอบคุณ.
gingo

3

มุมมองสามารถทำงานได้อย่างแน่นอน แต่ฉันคิดว่ามันเกินความเป็นไปได้เล็กน้อยสำหรับข้อกำหนดนี้

อีกวิธีในการทำให้บรรลุผลนั่นคือการนำ hook_field_extra_fields () และ hook_node_view () ในโมดูลที่กำหนดเองของคุณ

/**
 * Implements hook_field_extra_fields().
 */
function mymodule_field_extra_fields() {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  $extra['node'][$content_type]['display']['body_summary'] = array(
    'label' => t('Body summary'),
    'description' => t('Display body summary.'),
    'weight' => 0,
  );

  return $extra;
}

/**
 * Implements hook_node_view().
 */
function mymodule_node_view($node, $view_mode, $langcode) {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  if ($node->type == $content_type) {
    $summary = field_view_field('node', $node, 'body', array(
      'type' => 'text_summary_or_trimmed',
    ));

    $node->content['body_summary'] = array(
      '#markup' => $summary,
      '#weight' => 0,  
    );
  }
}

ล้างแคชและคุณสามารถไปที่ประเภทการตั้งค่า "จัดการจอแสดงผล" เพื่อลากและวางเพื่อวางฟิลด์ "เนื้อหาสรุป" admin/structure/types/manage/page/displayเช่น


หืมฉันคิดว่านี่ใกล้ แต่เนื้อหาภาคสนามไม่แสดงArrayขึ้นมา
arjan

สวัสดี @ arjan คุณตรวจสอบข้อมูล Array แล้วและคัดลอกที่นี่ได้ไหม
eric.chenchao

จุดที่สร้างตัวแปรคือ 1 บรรทัดเหนือสถานที่เดียวที่มันถูกใช้เพียงแค่ใส่สตริงในคำสั่ง if
Kiee

สวัสดี @ Kii คุณพูดถูก แต่ตัวอย่างนี้ใช้เป็นตัวอย่างพร้อมความคิดเห็น;)
eric.chenchao

3

ใน drupal 7:

ในฟิลด์เนื้อหาคุณสามารถใช้ 'เขียนผลลัพธ์ใหม่' และใช้ใน 'รูปแบบการแทนที่' สิ่งนี้:

[body-summary]

และนี่จะแสดงข้อมูลสรุปแบบเต็ม


คุณเป็นอัจฉริยะ Javier คำอธิบาย overkill อื่น ๆ ทั้งหมดของคุณเป็นคำที่ใช้งานได้ดีที่สุดโดยไกลและเรียบง่ายมาก!
Bruno Vincent

0

สำหรับการกำหนดประเภทเนื้อหาซ้ำคุณต้องดูที่ Panels เพราะหนึ่งในฟังก์ชั่นของ Panels คือการกำหนดลักษณะพื้นฐานของประเภทเนื้อหาบางอย่าง (หรือข้อมูลตามเกณฑ์การเลือกอื่น ๆ ) Csaba


0

ในฐานะที่เป็น Arjan สังเกตเห็นตัวอย่างของ Cityreader สร้างผลลัพธ์ แต่มันแสดงผลไม่ถูกต้อง

รูปแบบนี้เหมาะกับฉัน:

 /**
 * Implements hook_field_extra_fields().
 */
function mymodule_field_extra_fields() {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  $extra['node'][$content_type]['display']['body_summary'] = array(
    'label' => t('Body summary'),
    'description' => t('Display body summary.'),
    'weight' => 0,
  );

  return $extra;
}

/**
 * Implements hook_node_view().
 */
function mymodule_node_view($node, $view_mode, $langcode) {
  // Put the content type you want to display summary field here.
  $content_type = 'page';

  if ($node->type == $content_type) {
    $summary = field_view_field('node', $node, 'body', array(
      'type' => 'text_summary_or_trimmed',
    ));

    $node->content['body_summary'] = array(
      '#markup' => $summary['#items'][0]['safe_summary'],
      '#weight' => 0,  
    );
  }
}

0

หากคุณสนใจโซลูชันที่ไม่มีรหัสโดยใช้โมดูล Views และDisplay Suiteคุณสามารถ:

  1. สร้างบล็อก Views ด้วยฟิลด์สรุป ภายใต้ตัวเลือกการกรองบริบทในการตั้งค่าขั้นสูงคุณสามารถตั้งค่าตัวเลือก "ระบุค่าเริ่มต้น" ด้วยประเภท ID เนื้อหาจาก URL

  2. ภายใต้ประเภทเนื้อหา -> [ประเภทเนื้อหาของคุณ] -> จัดการจอแสดงผลเลือกตัวเลือกฟิลด์ที่กำหนดเอง (เมนูที่ด้านล่าง) และสร้างฟิลด์บล็อกแบบกำหนดเองจากมุมมองที่คุณสร้างในขั้นตอนที่ 1

  3. เมื่อบันทึกฟิลด์ที่กำหนดเองจะปรากฏในรายการเขตข้อมูลชนิดโหนดที่คุณสามารถเลือกได้ว่าจะปรากฏในพื้นที่ใด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.