Het Drupal-zoekveld heeft standaard een label 'Zoek door deze site' (en in het Engels 'Search this site'. Nu zijn de meeste mensen wel bekend met de bedoeling van een zoekveld en kan deze toelichting wel achterwege blijven. Het aanpassen van formulieren in Dupal is niet eenvoudige maar in deze situatie is er ook een 'quick and dirty' oplossing mogelijk. In dit artikel beschrijf ik beide methodes.
Met een eenvoudige vervangfunctie wordt de tekst 'Search this site' en de dubbele punt vervangen door een lege string. De tekst is nu uit het formulier verwijderd.
De eerste regel code verwijderd de titel van het zoekveld. De volgende regels zorgen voor het opnieuw opbouwen van het formlier. drupal_render() heeft voor interngebruik een vlag #printed waarmee onthouden wordt welke delen van een array al zijn verwerkt. Door deze vlag te verwijderen kunnen drupal_render() het formulier-array opnieuw laten opbouwen.
De code in dit artikel kan je toevoegen aan het template.php-bestand van je eigen template. 'MYTHEME' vervang je daarbij door de naam van het thema.
Formulier aanpassen met str_replace()
Met behulp van een preprocess-functie kunnen we de inhoud van het formulier aanpassen. De preprocess-functie wordt aangeroepen nadat de Search-module het formulier heeft opgebouwd en voordat het formulier in de HTML-template search-theme-form.tpl.php het formulier wordt opgenomen.<?php
/**
* Override preprocess_search_theme_form().
*
* Changes:
* - Remove label from search field.
*/
function MYTHEME_preprocess_search_theme_form(&$vars) {
// Remove the label from the search field.
$vars['search_form'] = str_replace(t('Search this site') .':', '', $vars['search_form']);
}
?>Formulier aanpassen en opnieuw renderen
De andere manier van vervangen is 'by the book'. Juist omdat het hier om een kleine formulieraanpassing gaat, is het een ideaal voorbeeld van het aanpassen van een formulier.<?php
/**
* Override preprocess_search_theme_form().
*
* Changes:
* - Remove label from search field.
*/
function MYTHEME_preprocess_search_theme_form(&$vars) {
// Remove search field title.
unset($vars['form']['search_theme_form']['#title']);
// Render the altered form array.
// Remove the #printed flag first to enable us to re-render the form.
unset($vars['form']['search_theme_form']['#printed']);
$vars['search']['search_theme_form'] = drupal_render($vars['form']['search_theme_form']);
$vars['search_form'] = implode($vars['search']);
}
?>Zoekveld in een blok
Van het zoekveld bestaan twee versies. Een die standaard in de page.tpl.php zit (met de variabele $search) en een die met behulp van een blok beschikbaar komt. De bovenstaande code voorbeelden zijn voor de eerste variant. Wil je het 'Search this site'-label verwijderen van het zoekveld in een blok, dan vervang je 'search_theme_form' door 'search_block_form'. Zowel in de functienaam als in de code.<?php
/**
* Override preprocess_search_block_form().
*
* Changes:
* - Remove label from search field.
*/
function MYTHEME_preprocess_search_block_form(&$vars) {
// Remove search field title.
unset($vars['form']['search_block_form']['#title']);
// Render the altered form array.
// Remove the #printed flag first to enable us to re-render the form.
unset($vars['form']['search_block_form']['#printed']);
$vars['search']['search_block_form'] = drupal_render($vars['form']['search_block_form']);
$vars['search_form'] = implode($vars['search']);
}
?>
Drupalversie:
Drupal 6
Reactie toevoegen