Drupal - مربع البحث لا يعمل - قالب موضوع مخصص
-
04-10-2019 - |
سؤال
أنا أستخدم إصدارًا مخصصًا من Search-tyme-form.tpl عندما أستخدم مربع البحث ، أحصل على نقل صفحة البحث. لكن البحث لا يحدث بالفعل. مربع البحث في صفحة نتائج البحث يعمل على الرغم من. هذا هو ملف Search-them-form.tpl.php (العرض التوضيحي :
<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" />
يوجد أيضًا ملف JavaScript. أعتقد أنه استخدام واضح تمامًا من الكود:
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
}
}
}
ماذا يمكن أن تكون المشكلة وكيف يمكنني إصلاحها؟
المحلول
على ما يبدو ، لا يمكنك تعديل HTML مباشرة في search-theme-form.tpl.php
لأن هذا ليس هو الطريقة الصحيحة للقيام بذلك. لذلك كانت المشكلة الخاصة بي في الفصل و onfocus و onblur هي المشكلة.
الطريقة الصحيحة للقيام بذلك هي تعديل الموضوعات template.php
ملف. في الأساس ، سنستخدم form_alter () لتعديل عناصر النموذج. منذ استخدام طريقة HTML خاطئة. ألقِ نظرة على الكود أدناه (مأخوذة من: هنا )
<?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']);
}
?>
في yourthemename_preprocess_search_theme_form
- من الواضح أن "yourthemename" سيعكس اسم السمة المخصصة الخاصة بك. في الأساس الرمز هو محسوس ذاتي. ماذا مع التعليقات وكل شيء.
لذلك ، هذه هي الطريقة التي تعمل بها.