ฉันจะแทรกช่องค้นหาใน page.tpl ได้อย่างไร


27

ฉันจะแทรกช่องค้นหา (บล็อกการค้นหา) ในชุดรูปแบบของฉันโดยทางโปรแกรมได้อย่างไร

คำตอบ:


39

ตามแท็กของคุณคุณกำลังมองหาโซลูชัน D7 Drupal 7 page.tpl.phpไม่มีตัวแปร $ search_box อีกต่อไป อย่างไรก็ตามคุณสามารถเพิ่มในฟังก์ชัน preprocess ใน template.php ของคุณ:

<?php
/*
 *  Preprocess page.tpl.php to inject the $search_box variable back into D7.
 */
function MYTHEME_preprocess_page(&$variables){
  $search_box = drupal_render(drupal_get_form('search_form'));
  $variables['search_box'] = $search_box;
}

จากนั้นคุณเพียงแค่ต้องพิมพ์ตัวแปรใน page.tpl.php ของคุณ:

<?php print $search_box; ?>

คุณสามารถใช้ module_invoke ได้ แต่คุณไม่ควรมีตรรกะ php ในไฟล์เทมเพลต:

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>

ขอบคุณฉันควรวางบล็อคโค้ดตัวที่สามไว้ที่ไหน (โดยตรงใน page.tpl.php หรือใน template.php จากนั้นเข้าถึงจาก page.tpl?)
Nick.h

1
ควรวางบล็อกที่สามไว้ใน page.tpl.php นอกจากนี้คุณยังสามารถใช้: "print render (module_invoke ('search', 'block_view', 'search'));"
Bala Clark

2
เพื่อหลีกเลี่ยง "คำเตือนที่เข้มงวด: ควรส่งผ่านตัวแปรโดยอ้างอิงใน [theme-name] _preprocess_page () (บรรทัด xx ของ [theme-name] /template.php)" เตือน theme_preprocess_page ของคุณควรเป็นดังนี้: / * * ใช้งาน theme_preprocess_page () * / function [theme-name] _preprocess_page (& $ ตัวแปร) {$ search_form = drupal_get_form ('search_form'); $ search_box = drupal_render ($ search_form); $ ตัวแปร ['search_box'] = $ search_box; }
kbrinner

7

ทำตามวิธีที่ถูกต้องแทนและใช้บล็อก
องค์ประกอบ Hardcoding ใน page.tpl เป็น IMHO หนึ่งในสิ่งที่ยังคงลอยไปมาตั้งแต่ "วันเก่าดี"

ใช้ระบบบล็อกแทน มันช่วยให้คุณมีความยืดหยุ่นในการเดินทางมากขึ้น คุณอาจต้องการตรวจสอบโมดูลBlockify

โมดูลนี้จะเปิดเผยองค์ประกอบหลักของ Drupal เป็นบล็อก


2

คุณสามารถใช้$search_boxตัวแปรที่มีให้สำหรับไฟล์page.tpl.php


1
ขอบคุณ แต่ $ search_box จะถูกลบออกใน D7
Nick.h

โอ๊ะโอไม่ได้สังเกตว่านี่เกี่ยวกับ D7
Nikola Kotur

1

คุณยังสามารถใช้ระบบบล็อกและเพิ่มบล็อกแบบฟอร์มการค้นหาไปยังหน้าใน

ผู้ดูแลระบบ> โครงสร้าง> บล็อก: แบบฟอร์มการค้นหา

เช่นเพื่อวางในเมนูนำทางใส่บล็อกในภูมิภาค

"นำร่อง"

แล้วจัดแนวกับ CSS

เช่นวางไว้ทางด้านขวาของเมนูนำทาง:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}

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