ฉันจะกำหนดหน้าผลการค้นหาได้อย่างไร


39

ฉันปรับแต่งมุมมองทีเซอร์ของประเภทเนื้อหาของฉันและมุมมองหน้า ตอนนี้ฉันต้องใช้มุมมองทีเซอร์สำหรับหน้าผลการค้นหา ตามค่าเริ่มต้น Drupal จะแสดงข้อความที่ยุ่งเหยิงแบบเต็มสำหรับแต่ละผลลัพธ์ฉันต้องสามารถปรับแต่งลักษณะของแต่ละรายการตามประเภทเนื้อหา ฉันไม่ต้องการเปลี่ยนวิธีการ drupal ได้รับผลลัพธ์เพียงวิธีที่จะแสดงพวกเขา

คำตอบ:


28

คุณสามารถแทนที่ theme_search_results () หรือ theme_search_result ()

แรกคือฟังก์ชันชุดรูปแบบที่เรียกใช้สำหรับหน้าผลลัพธ์การค้นหาในขณะที่ฟังก์ชันที่สองคือชุดรูปแบบที่เรียกใช้เพื่อแสดงผลลัพธ์เดียว ทั้งสองฟังก์ชั่นชุดรูปแบบใช้ไฟล์เทมเพลต ( search-results.tpl.phpในกรณีแรกsearch-result.tpl.phpในกรณีที่สอง)

search-result.tpl.php จะใช้$info_split['type']ใน Drupal 6 ซึ่งมีประเภทโหนด ในเวอร์ชันล่าสุดของ Drupal 7 $info_split['type']จะไม่ถูกส่งผ่านอีกต่อไป แต่ search-result.tpl.php ยังคงได้รับ$result['node']ในกรณีที่การค้นหาเสร็จสิ้นสำหรับโหนด $result['node']->typeเป็นชนิดเนื้อหาของโหนด

หากต้องการแจ้งให้ทราบว่า Drupal 7 และสูงกว่าอนุญาตให้โมดูลใช้hook_search_page ()แต่เป็นฮุกที่ใช้โดยโมดูลที่ทำงานร่วมกับโมดูลการค้นหาไม่ใช่จากโมดูลที่ต้องการเปลี่ยนหน้าผลลัพธ์สำหรับผลลัพธ์ที่ส่งกลับโดยผู้อื่น โมดูล.
นอกจากนี้ใน Drupal 7 ฟังก์ชั่นแต่ละชุดรูปแบบการใช้ฟังก์ชั่น preprocess ซึ่งในกรณีนี้จะเป็นhook_preprocess_search_results ()และhook_preprocess_search_result () มีประโยชน์ในกรณีที่คุณเพียงแค่ต้องแก้ไขค่าของสิ่งที่ส่งผ่านไปยังไฟล์แม่แบบ


มีวิธีในการกำหนดธีมผลการค้นหาโดยใช้มุมมองหรือพาเนลหรือไม่?
มกราคม

@jan คุณสามารถแทนที่หน้าการค้นหาด้วยมุมมองโดยใช้ตัวกรองแบบเปิดเผย
kiamlaluno

@ kiamlaluno ฉันหวังว่าฉันจะสามารถกำหนดรูปแบบตัวเลือกการค้นหาเริ่มต้นสำหรับ drupal โดยใช้มุมมอง เพราะฉันจะไม่ใช้ตัวกรองที่เปิดเผยและเพียงใช้ตัวเลือกการค้นหาเริ่มต้น
ม.ค.

@jan หากคุณใช้มุมมองหน้าการค้นหาทั้งหมดจะถูกแทนที่ด้วยมุมมอง นั่นคือเหตุผลที่คุณต้องเปิดเผยตัวกรองมุมมองอย่างน้อย: เป็นสิ่งที่ผู้ใช้จะใช้เพื่อป้อนคำค้นหา มุมมองเป็นเพียงรายการของโหนดและตัวกรองจะใช้ในการกรองโหนดที่จะแสดงในหน้า
kiamlaluno

@kiamlaluno คุณพูดถูก ทำไมฉันไม่คิดเรื่องนี้ !! ขอบคุณ
มกราคม

18

ใน Drupal 7 คุณใช้ ...

... เพื่อคนจรจัดด้วยข้อมูลที่แสดงในผลลัพธ์

และคุณใช้ ...

... เพื่อปรับแต่งมาร์กอัปของผลลัพธ์

ตัวอย่าง

นี่คือตัวอย่างของวิธีใช้ทีเซอร์ประเภทเนื้อหาเป็นผลการค้นหา ตัวอย่างถัดไปจะอยู่ในเทมเพลตของธีม

/**
 * Implements template_preprocess_search_result
 * @param type $vars
 */
function MYTHEME_preprocess_search_result(&$vars) {
  $node = $vars['result']['node'];
  if ($node->nid) { // if the result is a node we can load the teaser
    $vars['teaser'] = node_view($node, 'teaser'); 
  }
}

ตัวอย่างนี้เป็นไฟล์ search-result.tpl.php:

<article>
  <?php if ($teaser) : // for nodes we can use the teaser as search result ?>
    <?php print drupal_render($teaser); ?>
  <?php else : // for other results we use the default from core search module ?>  
    <?php print render($title_prefix); ?>
    <h3><a href="<?php print $url; ?>"><?php print $title; ?></a></h3>
    <?php print render($title_suffix); ?>
    <?php if ($snippet) : ?>
      <p><?php print $snippet; ?></p>
    <?php endif; ?>
  <?php endif; ?>
  <?php if ($info): ?>
    <footer><?php print $info; ?></footer>
  <?php endif; ?>
</article>

1
คำอธิบายที่ดีที่สุดในหัวข้อนี้
หลัก

9

เมื่อเร็ว ๆ นี้ฉันใช้เวลาทำงานกับผลการค้นหาในเว็บไซต์สถาปัตยกรรม Drupal 7 และใช้โมดูลDisplay Suite

โมดูล Display Suite มีวิธีการที่ยอดเยี่ยมในการควบคุมผลการค้นหา: มันจะช่วยให้คุณใช้ของเล่นพัฒนาสมองของคุณในผลการค้นหาได้อย่างง่ายดาย นี่คือการสอนโดยผู้ดูแลของโมดูลที่เน้นการใช้มันเพื่อผลการค้นหา

เช่นเดียวกับ Drupal มีหลากหลายวิธีในการทำสิ่งเดียวกัน ฉันชอบวิธีนี้เพราะทำให้ฉันสามารถแยกแยะผลลัพธ์ตามประเภทเนื้อหา


1
ฉันรู้ว่าคำตอบนี้มาจาก 2012 แต่ฉันสังเกตเห็นว่าในหน้าโมดูลนั้นระบุว่าตอนนี้ฟังก์ชั่นการค้นหาไม่รวมอยู่ใน Drupal 8 ซึ่งแนะนำว่านี่อาจไม่ใช่วิธีที่ดีที่สุดที่จะนำมาใช้สำหรับ Drupal 7 โดยสมมติว่าคุณต้องการพิสูจน์ในอนาคต . ที่ไม่ได้ทดสอบด้วยตัวเองว่าแค่หัวขึ้น
ja_him
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.