Views-sök med drop-down för taxonomitermer

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
wusty's picture

Hej,
Jag har skapat en exponerad sök-vy (som beskrivet på http://groups.drupal.org/node/60638) som funkar och jag har lagt till så man kan få med Taxonomitermer via en drop-down meny i sökningen också genom att lägga till taxonomi-id i Filters (och det verkar funka även det).

Just nu ser den ut som bifogade bilden.

Hur tar jag bort texten "Any" och ersätter med till exempel "Alla landsdelar" (namnet på taxonomi-vokabulären funkar också) på ena dropdownen och "Alla kategorier" på den andra? Jag är ganska grön på php kan vara värt att nämna (ifall en sådan lösning skulle krävas)

AttachmentSize
Skärmavbild.png10.15 KB

Comments

Du kan göra en egen modul och

markusbroman's picture

Du kan göra en egen modul och slänga in en form_alter-funktion i modul-filen, ungefär så här:

/**
* Implementation of hook_form_alter().
*/
function [din_modul]_form_alter(&$form, &$form_state, $form_id) {

  switch ($form_id) {
    case 'views_exposed_form':
    if (preg_match('/^views-exposed-form-[din_vy]-page-/', $form['#id'])) {
      $form['tid']['#options']['All'] = '<Alla landsdelar>';
      $form['tid_1']['#options']['All'] = '<Alla kategorier>';
    }
    break;
  }
}

Du kommer behöva ändra vissa saker från funktionen ovan för att det ska fungera:

    [din_modul] till din moduls namn.
    [din_vy] till namnet på vyn.
    tid samt tid_1 till de "filter identifiers" som du har i dina views-inställningar. Du kan även se dem i URL-en när du filtrerat på en term.

// Markus

Modulen

wusty's picture

Jag får det inte funka..

Jag har skapat en modul som heter Search Alter (i sites/all/modules/search_alter) med två filer: search_alter.info & search_alter.module

search_alter.info innehåller följande:

name = Search Alter
description = blargh
core = 7.x

dependencies[] = taxonomy
dependencies[] = views

search_alter.module innehåller följande:

<?php
/**
* Implementation of hook_form_alter().
*/
function search_alter_form_alter(&$form, &$form_state, $form_id) {

  switch ($form_id) {
    case 'views_exposed_form':
    if (preg_match('/^views-exposed-form-s_kresultat-page-/', $form['#id'])) {
      $form['tid']['#options']['All'] = '<Alla landsdelar>';
      $form['tid_1']['#options']['All'] = '<Alla kategorier>';
    }
    break;
  }
}

Jag har aktiverat modulen.

Har jag missat något?

"filter identifiers" är tid och tid_1 (har även dubbelkollat i URL:en för en sökning)
namnet på vyn är s_kresultat (Är det namnet för hela vyn som ska skrivas här?)

Tack för svar
/William

Fungerar det om du tar bort

markusbroman's picture

Fungerar det om du tar bort if-satsen?

Om det gör det så kanske det ska vara "views-exposed-form-s-kresultat-page" istället för "views-exposed-form-s_kresultat-page".

Du kan se vilket id du är ute efter om du lägger denna kod på raden innan if-satsen:

watchdog('form id', '%id', array('%id' => $form['#id']), WATCHDOG_NOTICE, $link = NULL);

Kolla sedan i "Recent log messages" om ditt id står där.

// Markus

watchdog

wusty's picture

Tack nu löste det sig,

efter att ha kört watchdog visade sig att id:et var "views-exposed-form-s-kresultat-page-1", slutkoden blev alltså som följande

<?php
/**
* Implementation of hook_form_alter().
*/
function search_alter_form_alter(&$form, &$form_state, $form_id) {

  switch ($form_id) {
    case 'views_exposed_form':
    if (preg_match('/^views-exposed-form-s-kresultat-page-1/', $form['#id'])) {
      $form['tid']['#options']['All'] = '<Alla landsdelar>';
      $form['tid_1']['#options']['All'] = '<Alla kategorier>';
    }
    break;
  }
}

Tack för hjälpen, hade aldrig klarat det annars :)

Du kan också förenkla det där

pontus_nilsson's picture

Du kan också förenkla det där lite, och tänk på att alltid köra via t() funktionen och sedan översätta strängar istället för att skriva dem direkt på svenska, best practice. Vem vet du kanske vill ha sajten på fler språk senare :)

Ett tips är också att ha alla vyer på engelska som maskinnamn.

Om du är osäker på vad din vy heter så kan du installera modulen Devel och sedan i hook_form_alter() köra dsm($form_id); för att få reda på vilket id just ditt formulär har.

/**
* Implementation of hook_form_alter().
*/
function search_alter_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'views-exposed-form-s-kresultat-page-1') {
    $form['tid']['#options']['All'] = t('<All areas>');
    $form['tid_1']['#options']['All'] = t('<Alla kategorier>');
  }
}

//Pontus Nilsson, Digitalist

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week