Bagaimana saya bisa memasukkan kotak pencarian di page.tpl?

27

Bagaimana saya bisa memasukkan kotak pencarian (blok pencarian) di tema saya secara terprogram?

Nick.h
sumber

Jawaban:

39

Menurut tag Anda, Anda mencari solusi D7. The Drupal 7 page.tpl.php tidak memiliki variabel search_box $ lagi. Namun Anda dapat menambahkannya dalam fungsi preproses di template.php Anda:

<?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;
}

Maka Anda hanya perlu mencetak variabel di page.tpl.php Anda:

<?php print $search_box; ?>

Anda juga bisa menggunakan module_invoke, tetapi Anda seharusnya tidak memiliki logika php dalam file templat:

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>
ipwa
sumber
Terima kasih, Di mana saya harus meletakkan blok kode ketiga? (Langsung di page.tpl.php ATAU di template.php dan kemudian mengaksesnya dari page.tpl?)
Nick.h
1
Blok ketiga harus ditempatkan di page.tpl.php. Sebagai steno, Anda juga dapat menggunakan: "print render (module_invoke ('search', 'block_view', 'search'));"
Bala Clark
2
Untuk menghindari "Peringatan ketat: Hanya variabel yang harus dilewatkan dengan referensi di [theme-name] _preprocess_page () (baris xx dari [theme-name] /template.php)." peringatan theme_preprocess_page Anda harus sebagai berikut: / * * Menerapkan theme_preprocess_page (). * / function [theme-name] _preprocess_page (& $ variabel) {$ search_form = drupal_get_form ('search_form'); $ search_box = drupal_render ($ search_form); $ variable ['search_box'] = $ search_box; }
kbrinner
7

Sebaliknya, lakukan dengan cara yang benar dan gunakan blok.
Elemen hardcoding di dalam page.tpl, adalah IMHO salah satu hal yang masih mengambang sejak "masa lalu yang indah."

Gunakan sistem blok sebagai gantinya; itu memberi Anda jauh lebih banyak fleksibilitas di ujung jalan. Anda mungkin juga ingin memeriksa modul Blockify .

Modul ini memperlihatkan sejumlah elemen Drupal inti sebagai blok.

mortendk
sumber
2

Anda dapat menggunakan $search_boxvariabel yang tersedia untuk file page.tpl.php .

Nikola Kotur
sumber
1
Terima kasih, Tapi $ search_box dihapus di D7
Nick.h
Ups, tidak menyadari ini tentang D7.
Nikola Kotur
1

Anda juga dapat menggunakan sistem blok dan menambahkan blok formulir pencarian ke halaman di

Admin> Struktur> Blok: Formulir pencarian

mis. untuk menempatkan di menu navigasi, letakkan blok di wilayah tersebut

"Navigasi"

lalu sejajarkan dengan CSS.

mis. untuk meletakkan di sebelah kanan menu navigasi:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}
David Thomas
sumber
Ini akan berhasil, tetapi pertanyaannya merujuk pada solusi yang terprogram.
timofey.com