1

I am using a customised version of search-theme-form.tpl When I use the search box, I do get transferred to the search page. But the search does not actually take place. The search box on the search results page does work though. This is my search-them-form.tpl.php file (demo :

<input type="text" name="search_theme_form_keys" id="edit-search-theme-form-keys" value="Search" title="Enter the terms you wish to search for" class="logininput" height="24px" onblur="restoreSearch(this)" onfocus="clearInput(this)" />
  <input type="submit" name="op" id="edit-submit" value="" class="form-submit" style="display: none;" />
  <input type="hidden" name="form_token" id="edit-search-theme-form-form-token" value="<?php print drupal_get_token('search_theme_form'); ?>" />
  <input type="hidden" name="form_id" id="edit-search-theme-form" value="search_theme_form" />

There is also a javascript file involved. I guess it's use is pretty clear from the code:

 function trim(str) {  
     return str.replace(/^\s+|\s+$/g, '');  
 }  

 function clearInput(e) {  

        e.value="";                // clear default text when clicked  
    e.className="longininput_onfocus"; //change class

 }  

 function restoreSearch(e) {  
    if (trim(e.value) == '') {  
        {
   e.value="Search";             // reset default text onBlur 
         e.className="logininput";        //reset class
  } 
    }  
 }

What can be the problem and how can I fix it?

bcosynot
  • 4,617
  • 9
  • 33
  • 44
  • do you mean `search-theme-form.tpl.php` (instead of `...-from.tpl`)? do you get search results with the default template? do you have a cron job set up to index your site? did you set permission for users to be able to search? see http://drupal.org/handbook/modules/search . – ax. May 22 '10 at 11:31
  • sorry it is search-theme-form.tpl.php. my bad. yes, the users have permission to search and the site properly indexed. i tried the garland theme and that seems to work perfectly. – bcosynot May 22 '10 at 14:01
  • Looking at your example, at least the form action ('/whackk/') is questionable, as the original Drupal search form points to 'search/[searchTerm]'. The main problem is that you are building your own form from scratch via HTML markup, completely circumventing the Drupal Forms API. This is not recommended. What changes to the standard Drupal search do you want to achieve? (There are plenty methods to twist and tweak any Drupal form to your liking, but for a proper answer, I'd need more info regarding your goal) – Henrik Opel May 24 '10 at 20:20
  • well. the action part is THE problem here. anyways, i am not completely circumventing the drupal api (atleast, i dont think so). I am over riding the default template - thats all. i am using a different class for the input text box and using onFocus and onBlur events to change the class of the input text box. – bcosynot May 26 '10 at 17:58

1 Answers1

5

Apparently, you cannot directly modify the HTML in search-theme-form.tpl.php since thats not the right way to do it. So my adding the class and onFocus and onBlur attributes was the problem.

The correct way to do it is to modify the themes template.php file. Basically we will be using form_alter() to modify the form elements. Since using the HTML way is wrong. Take a look at the code below (taken from : here )

<?php
/**
* Override or insert PHPTemplate variables into the search_theme_form template.
*
* @param $vars
*   A sequential array of variables to pass to the theme template.
* @param $hook
*   The name of the theme function being called (not used in this case.)
*/
function yourthemename_preprocess_search_theme_form(&$vars, $hook) {
  // Note that in order to theme a search block you should rename this function
  // to yourthemename_preprocess_search_block_form and use
  // 'search_block_form' instead of 'search_theme_form' in the customizations
  // bellow.

  // Modify elements of the search form
  $vars['form']['search_theme_form']['#title'] = t('');

  // Set a default value for the search box
  $vars['form']['search_theme_form']['#value'] = t('Search this Site');

  // Add a custom class and placeholder text to the search box
  $vars['form']['search_theme_form']['#attributes'] = array('class' => 'NormalTextBox txtSearch', 
                                                              'onfocus' => "if (this.value == 'Search this Site') {this.value = '';}",
                                                              'onblur' => "if (this.value == '') {this.value = 'Search this Site';}");

  // Change the text on the submit button
  //$vars['form']['submit']['#value'] = t('Go');

  // Rebuild the rendered version (search form only, rest remains unchanged)
  unset($vars['form']['search_theme_form']['#printed']);
  $vars['search']['search_theme_form'] = drupal_render($vars['form']['search_theme_form']);

  $vars['form']['submit']['#type'] = 'image_button';
  $vars['form']['submit']['#src'] = path_to_theme() . '/images/search.jpg';

  // Rebuild the rendered version (submit button, rest remains unchanged)
  unset($vars['form']['submit']['#printed']);
  $vars['search']['submit'] = drupal_render($vars['form']['submit']);

  // Collect all form elements to make it easier to print the whole form.
  $vars['search_form'] = implode($vars['search']);
}
?>

In yourthemename_preprocess_search_theme_form - 'yourthemename' will obviously reflect the name of your custom theme. Basically the code is self-explanatory. what with the comments and all.

So, basically thats the way it works.

bcosynot
  • 4,617
  • 9
  • 33
  • 44