page.tpl에 검색 창을 삽입하려면 어떻게해야합니까?


27

프로그래밍 방식으로 테마에 검색 창 (검색 블록)을 삽입하려면 어떻게해야합니까?

답변:


39

태그에 따르면 D7 솔루션을 찾고 있습니다. 드루팔 7 page.tpl.php는 더 이상 $의 search_box 변수가 없습니다. 그러나 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 () ([theme-name] /template.php의 xx 행)에서 변수 만 참조로 전달해야합니다." theme_preprocess_page 경고는 다음과 같아야합니다. / * * theme_preprocess_page ()를 구현합니다. * / 함수 [theme-name] _preprocess_page (& $ variables) {$ search_form = drupal_get_form ( 'search_form'); $ search_box = drupal_render ($ search_form); $ variables [ 'search_box'] = $ search_box; }
kbrinner

7

대신 올바른 방법으로 블록을 사용하십시오.
page.tpl 내부의 하드 코딩 요소는 "좋은 옛날"이후 여전히 떠 다니는 것 중 하나입니다.

대신 블록 시스템을 사용하십시오. 더 많은 유연성을 제공합니다. Blockify 모듈 을 확인하십시오 .

이 모듈은 많은 핵심 Drupal 요소를 블록으로 노출합니다.



1

블록 시스템을 사용하여 검색 폼 블록을 페이지의 페이지에 추가 할 수도 있습니다

관리> 구조> 블록 : 검색 양식

예 : 내비게이션 메뉴에 배치하려면 해당 지역에 블록을 넣습니다.

"항해"

그런 다음 CSS와 정렬하십시오.

예를 들어 탐색 메뉴 오른쪽에 놓으려면

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

이것은 효과가 있었지만 문제는 프로그래밍 솔루션을 참조하는 것이 었습니다.
timofey.com
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.