2010-05-22 12 views
1

J'utilise une version personnalisée de search-theme-form.tpl Lorsque j'utilise la boîte de recherche, je suis transféré à la page de recherche. Mais la recherche n'a pas réellement lieu. Le champ de recherche sur la page de résultats de recherche fonctionne cependant. Ceci est mon fichier de recherche-les-form.tpl.php (demo.Drupal - Boîte de recherche ne fonctionne pas - modèle de thème personnalisé

<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" /> 

Il y a aussi un fichier javascript impliqué Je suppose que son utilisation est assez clair à partir du 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 
    } 
    } 
} 

Qu'est-ce que peut être le problème et comment puis-je résoudre ce problème?

+0

voulez-vous dire 'search-theme-form.tpl.php' (au lieu de' ...- from.tpl')? obtenez-vous des résultats de recherche avec le modèle par défaut? Avez-vous un travail cron mis en place pour indexer votre site? avez-vous donné aux utilisateurs la permission de faire des recherches? voir http://drupal.org/handbook/modules/search. –

+0

désolé, c'est search-theme-form.tpl.php. ma faute. oui, les utilisateurs ont l'autorisation de rechercher et le site correctement indexé. J'ai essayé le thème de la guirlande et cela semble fonctionner parfaitement. – bcosynot

+0

En regardant votre exemple, au moins le formulaire action ('/ whackk /') est discutable, comme le formulaire de recherche Drupal original pointe vers 'search/[searchTerm]'. Le problème principal est que vous construisez votre propre formulaire à partir de zéro via le balisage HTML, contournant complètement l'API Drupal Forms. Ceci n'est pas recommandé. Quels changements à la recherche standard de Drupal voulez-vous réaliser? (Il existe de nombreuses méthodes pour tordre et modifier n'importe quelle forme Drupal à votre goût, mais pour une réponse correcte, j'ai besoin de plus d'informations concernant votre objectif) –

Répondre

5

Apparemment, vous ne pouvez pas modifier directement le code HTML dans search-theme-form.tpl.php depuis thats pas la bonne façon de le faire. donc, ma ajoutant la classe et onFocus et onBlur attributs était le problème.

La manière correcte de le faire est de modifier le fichier thèmes template.php. Fondamentalement, nous allons utiliser form_alter() pour modifier les éléments de formulaire. Depuis l'utilisation de la manière HTML est faux. Jetez un oeil sur le code ci-dessous (extrait de: 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']); 
} 
?> 

Dans yourthemename_preprocess_search_theme_form - « yourthemename » reflète évidemment le nom de votre thème personnalisé. Fondamentalement, le code est explicite. quoi avec les commentaires et tout.

Donc, fondamentalement, c'est comme ça que ça fonctionne.

+1

+1 pour le suivi/réponse à votre propre question –

Questions connexes