Doku-Hotline

Birgit Grossmann über Texte, Technik und technische Dokumentation

Search und Reset Buttons für exposed filter Views

Montag 8. Februar 2010 von bgrossmann

Bei Views in Drupal gibt es zwei beliebte Fragestellungen, die vom Module selbst nicht gelöst werden:

a) Der Apply-Button sollte besser ein Search-Button sein.

b) Es sollte einen Reset-Button geben, der die Suche zurücksetzt.

Meine ursprüngliche Lösung für den Search-Button war eine Implementation über die template.php.

function theme_preprocess_views_exposed_form(&$vars, $hook) {
// Change the text on the submit button
$vars['form']['submit']['#value'] = t(’Search’);
// Rebuild the rendered version (submit button, rest remains unchanged)
unset($vars['form']['submit']['#printed']);
$vars['button'] = drupal_render($vars['form']['submit']);
}

Die Frage des Reset-Buttons kam später auf, und ich beschloss, lieber ein eigenes Custom-Module dafür zu nutzen.  Dabei war natürlich erstmal nichts sichtbar - logisch, wenn Module und template.php versuchen, das gleiche zu überschreiben. Also löschte ich den Search-Button aus der template.php und implementierte beide Buttons über ein Custom Module views_formalter.

Das folgende wäre der Code, um für alle Views einen Reset-Button zu liefern:

<?php
/**
* Implementation of hook_form_alter().
*/
function views_formalter_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'views_exposed_form') {
$reset_button_value = t('Reset');
$current_display = $form_state['view']->current_display;
$form['submit']['#value'] = t(’Search’);
$form['reset'] = array(
‘#type’ => ‘markup’,
‘#value’ => ‘<input class=”form-button” type=”reset”
value=”‘. $reset_button_value . ‘ ” onClick=”javascript:window.location=\”.$GLOBALS['base_url'] .’?q=’. $form_state['view']->display[$current_display]->
display_options['path'] .’\';” />’,
);
}
}
?>

Bei onclick wird der Pfad des Views aufgerufen. Sah zunächst prima aus - dann fiel mir auf, dass das Suchfeld in organic groups ebenfalls ein exposed filter view ist, nämlich og_search. Also eine zusätzliche Abfrage eingebaut:

$exposed_views = array('og_search');
if (!in_array($form_state['view']->name, $exposed_views)) {
$reset_button_value = t(’Reset’);

}

Ursprünglich war diese Abfrage so formuliert, dass explizit diejenigen Views angegeben werden mussten, für die ein Reset-Button gezeigt werden sollte. Da in meinem Projekt die meisten Views den Button zeigen sollten, habe ich die Abfrage umgedreht.

Share/Save/Bookmark

Dieser Beitrag wurde erstellt am Montag 8. Februar 2010 um 08:02 und abgelegt unter Web. Kommentare zu diesen Eintrag im RSS 2.0 Feed. Sie können einen Kommentar schreiben, oder einen Trackback auf Ihrer Seite einrichten.

Kommentar schreiben