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.
Kategorie: Web | Keine Kommentare »





