แบ่งฟิลด์เนื้อหาออกเป็นภูมิภาคต่างๆ


11

สถานการณ์ของฉันมีดังนี้: ฉันมีสัมมนาประเภทเนื้อหาที่มีฟิลด์ A, B และ C ฉันมีพื้นที่ส่วนหัวท้ายกระดาษเนื้อหาและแถบด้านข้างซ้าย มีบางฟิลด์ในสัมมนาที่ฉันต้องการแสดงในพื้นที่เนื้อหา แต่ยังอยู่ในพื้นที่ด้านซ้ายของแถบด้านข้าง

ฉันจะทำสิ่งนี้ได้อย่างไร ขออภัยหากสิ่งนี้ได้รับการตอบก่อนหน้านี้แล้ว ฉันเป็นนักพัฒนาและไม่ลังเลที่จะดำดิ่งสู่ฟังก์ชั่น hook และ preprocessor ฉันได้ติดตั้งโมดูล Views แล้ว แต่ไม่เคยใช้เลย (นี่เป็นเว็บไซต์ Drupal แรกของฉันถ้าคุณบอกไม่ได้: P)

ไชโย

แก้ไข: นี้สำหรับDrupal 7


Drupal รุ่นใด
keva

ขออภัยนี่สำหรับ Drupal 7 ฉันได้เพิ่มข้อมูลนั้นไปยังคำถามเดิมของฉัน
เลสเตอร์พีบอดี

ฉันจะยอมรับคำตอบทันทีที่ฉันได้รับการแก้ไขปัญหา ขณะนี้ฉันกำลังหาวิธีตั้งค่าคำแนะนำของฉันเพื่อแสดงเนื้อหาอย่างเหมาะสม ...
Lester Peabody

คำตอบ:


11

ไม่มีวิธีที่ง่ายในการเพิ่มเนื้อหาของโหนดไปยังส่วนต่างๆของเพจ มีหลายวิธีในการแก้ไขปัญหานี้

วิธีการไม่เข้ารหัส: การดูและบล็อก

สร้างมุมมอง

  • ประเภท: บล็อค
  • ตัวกรองบริบท: เนื้อหา: หมายเลข
    • ค่าเริ่มต้น: คว้าจากหน้าปัจจุบัน
  • ฟิลด์: แล้วแต่จำนวนใดที่คุณต้องการ
  • กรอง:
    • ประเภทเนื้อหา: สัมมนา

(รวมถึงการตั้งค่าเพิ่มเติมที่คุณต้องการ)

จากนั้นไปที่หน้าบล็อกผู้ดูแลระบบย้ายบล็อกมุมมองสร้างใหม่ไปยังพื้นที่ที่คุณต้องการให้แสดง ควรแสดงบนหน้าโหนดการสัมมนาเท่านั้น

ทำซ้ำสำหรับทุกภูมิภาค

วิธีการเข้ารหัสด้วย theme_preprocess_region ():

รหัสจะมีลักษณะเช่นนี้

MYTHEME_preprocess_region(&$variables) {
  if (isset($node) && ($node->type == 'seminar' )) {
     //add new variable here.     
  }
}

นี่สำหรับ Drupal 7 เท่านั้น ตอนนี้มีให้บริการใน region.tpl.php ของคุณ


1
จริง ๆ แล้ววิธีการดู / บล็อกนั้นเป็นวิธีที่ฉันชอบ แต่ Display Suite ที่แนะนำเนื่องจากบางคนคิดว่ามันเข้าถึงได้ง่ายกว่า
jhedstrom

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

เป็นบ้าที่ฉันถามมาเกือบเดือนแล้วตอบคำตอบ แต่ตอนนี้ฉันเพิ่งเริ่มใช้คำตอบนี้ (แม้ว่าฉันจะเคยใช้ Views a ton มาแล้ว) คุณช่วยอธิบายการใช้ Views ของ Drupal 7 ได้หรือไม่? ดูเหมือนว่าอาร์กิวเมนต์: nid ไม่มีอยู่ใน Views 3 สำหรับ Drupal 7 ขอบคุณ
Lester Peabody

ฉันคิดออก แนวคิดของอาร์กิวเมนต์ถูกแทนที่ด้วยตัวกรองบริบทภายใต้ขั้นสูง
Lester Peabody

D7, บริบท Fitler: เนื้อหา: NID แก้ไข: เห็นคุณพบมันก่อนที่ฉันจะตอบ
iStryker

7

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


5

ฉันมีปัญหาเดียวกัน การแก้ปัญหาค่อนข้างง่าย คุณสามารถยึดความจริงที่ว่าใน Drupal 7 เราสามารถกำหนด view_mode ของเราเองไม่เพียง แต่ FULL และ TEASER (เท่าที่เราทราบจากเวอร์ชั่นเก่าที่สุด) ดังนั้นกำหนดอีก view_mode สำหรับใช้ในภูมิภาคของคุณ: เช่น LEFTHAND Drupal แสดง FULL view_mode ในขอบเขตเนื้อหา ดังนั้นคุณต้องพูดกับ Drupal เพื่อแสดง LEFTHAND ในแถบด้านข้างซ้ายของภูมิภาค

  1. ใน template_preprocess_page ()

    if ($vars['node']) {
    $vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
    }

  2. ใน node.tpl.php เพิ่มการแสดงผลใหม่สำหรับโหมดมุมมอง lefthand

    if ($view_mode == 'lefthand') {
    // render content fields here
    }


1
คำตอบนี้เป็นคำตอบที่ฉลาดมากและไม่ต้องการโมดูลภายนอกใด ๆ นอกเหนือจากการกำหนดโหมดการดู ทางเลือกที่ง่ายสำหรับ Display Suite คือโหมดมุมมองเอนทิตี: drupal.org/project/entity_view_mode
paul-m

ฉันชอบอันนี้จริงๆ ห่อไว้ในฟังก์ชัน if เพื่อให้ปรากฏในบางหน้าเท่านั้น ฉันเคยif (array_key_exists('block_14',$vars['page']['main_content'])){}ทำให้มันปรากฏบนหน้าเว็บที่มีบล็อกเฉพาะเท่านั้น
Dominic Woodman

3

หากการแสดงผลสวีทดูเหมือนว่ามากเกินไปสำหรับคุณต้องการ (มันเป็นโมดูลที่ดี แต่มันอาจจะ overkill ถ้าคุณเพียงแค่ต้องย้ายสาขาไม่กี่) มีโมดูลเพียงจุดประสงค์นี้ -> CCK บล็อก

ฉันรู้ว่ามันเรียกว่าบล็อก 'CCK' แต่ทำงานได้กับ Drupal 7 (ซึ่งนำการทำงานของ CCK มาสู่แกนกลาง)


1

การเปลี่ยนเล็กน้อยเป็นคำตอบ @Patrik Lucan if ($vars['node'])ทำให้ฉันมีปัญหาในหน้าเว็บที่ไม่ใช่โหนดเช่นหน้าแรกที่กำหนดเองพร้อมหน้าบล็อกหรือมุมมอง

เปลี่ยนไปเป็น:

if (array_key_exists('node', $vars))

ซึ่งดูเหมือนว่าจะมีการแก้ไขปัญหา


0

ในขณะเดียวกันก็มีโมดูลสำหรับสิ่งนี้ จากหน้าโมดูล:

Field as Blockเป็นวิธีที่ง่ายในการแสดงหนึ่งหรือหลายฟิลด์ของโหนดปัจจุบันในบล็อก

โมดูลนี้มีวัตถุประสงค์เพื่อเป็นทางเลือกที่มีน้ำหนักเบาสำหรับโมดูลเช่น Panels และ Display Suite หรือการใช้ Views เพื่อกำหนดบล็อกที่ดึงเพียงหนึ่งฟิลด์

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