Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Views ›

Filter Criteria - URL: Taxonomy Name statt TID

Eingetragen von tsc_a (26)
am 16.09.2015 - 23:40 Uhr in
  • Views
  • Drupal 7.x

Hallo,

ich möchte meinen Content filtern auf einer Views-Seite nach einer bestimmten Kategorie mit einem Filter Criterium (exposed, dropdown) -Term Reference. Die Ausgabe ist wie erwartet.
Nur möchte ich in der URL nicht die TID, sondern den (aliased) Namen der Kategorie sehen. Also müßte ja das Dropdown die URL entsprechend bereitstellen.
Geht das nicht, oder übersehe ich da eine einfache Konfiguration?
Oder wie könnte das gehen?

‹ Merkliste für eine Liste von Inhaltstypen Filter Criteria - URL: Taxonomy Name statt TID ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Die URL Pfade kannst du mit

Eingetragen von Jenna (1883)
am 17.09.2015 - 02:02 Uhr

Die URL Pfade kannst du mit https://www.drupal.org/project/pathauto exakt bestimmen für jeden Bereich.

Mit https://www.drupal.org/project/token kannst du weitere Variablen einbauen falls nötig.

Grüße Jenna

  • Anmelden oder Registrieren um Kommentare zu schreiben

Parameter-URL

Eingetragen von tsc_a (26)
am 17.09.2015 - 09:23 Uhr

Danke für die Antwort, aber das bringt mich jetzt überhaupt nicht weiter.
Es geht ja nicht um die URLs für die Terms, sondern um die parametrisierte URL, die aufgerufen wird, wenn ich meine View via Dropdown filtere.

Aktuell ist die URL so:
/buecher?genre=1234
Was ich aber gerne hätte wäre so:
/buecher?genre=lyrik

  • Anmelden oder Registrieren um Kommentare zu schreiben

Beziehung zum Taxonomy-Term

Eingetragen von wla (9466)
am 17.09.2015 - 09:55 Uhr

Beziehung zum Taxonomy-Term ("node has taxonomy") eintragen. Dann kannst über diese Beziehung auf den Namen zugreifen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hm, das versteh ich jetzt

Eingetragen von tsc_a (26)
am 17.09.2015 - 12:07 Uhr

Hm, das versteh ich jetzt auch wieder nich.

Ich hab eine View (Content & Teaser, nicht Taxonomy), die mir Bücher auflistet. Diese werden einem Term zugeordnet, nach dem ich in der View filtere. Das klappt ohne Contextual Filter und Relationships, indem ich einfach das Filter Criterion Genre "expose".
Die URLs im Dropdown-Filter sehen wie vorhin geschrieben derart aus: ?genre=1234 (TID)
Aus wohl eher kosmetischen Gründen möchte ich die aber so haben: ?genre=lyrik (aliased TermName)

Ansatzweise funktioniert das ja auch als Autocomplete-Filter. Da siehts so aus: ?genre=Lyrik

  • Anmelden oder Registrieren um Kommentare zu schreiben

Mit Bordmitteln geht das

Eingetragen von tsc_a (26)
am 18.09.2015 - 12:15 Uhr

Mit Bordmitteln geht das nicht. Aber ich hab mir da was in mein Custom-Module zusammengegoogelt.
Zum einen müssen in hook_form_alter die Option-Keys des Dropdowns umgeschrieben werden ( statt TID nun NAME). In hook_views_query_alter wird dann eine Relation zur Tabelle 'taxonomy_term_data' hergestellt und die Condition ersetzt. Funktioniert mit Mehrfachauswahl, Pager & anderen, zusätzlichen Filtern.

for completeness:

/**
* Implements hook_form_alter().
*/

function yps_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'views_exposed_form' && isset($form['#info']['filter-field_genre_tid'])) {

    $dd_old = $form['genre']['#options'];
    $dd_new = array();

    foreach ($dd_old as $key => $name) {
      if (!is_numeric($key)) {
        $dd_new[$key] = $name;
      } else {
        $dd_new[$name] = $name;
      }
    }
    $form['genre']['#options'] = $dd_new;
  }
}

/**
* Implements hook_views_query_alter().
*/

function yps_views_query_alter(&$view, &$query) {

  if ($view -> name == 'buecher') {

    $conditions = $query -> where[1]['conditions'];
    $k = 0;
    foreach ($conditions as $cnd) {
      if ($cnd['field'] == 'field_data_field_genre.field_genre_tid') {

        $ga_join = new views_join();
        $ga_join -> table = 'taxonomy_term_data';
        $ga_join -> field = 'tid';
        $ga_join -> left_table = 'field_data_field_genre';
        $ga_join -> left_field = 'field_genre_tid';
        $ga_join -> type = 'LEFT';

        $query -> add_relationship('taxonomy_term_data_node', $ga_join, 'taxonomy_term_data', null);

        $replaced_condition = array(
          //'field' => 'field_data_field_genre.field_genre_tid',
          'field' => 'taxonomy_term_data_node.name',
          'value' => $cnd['value'],
          'operator' => $cnd['operator']
        );
        $query -> where[1]['conditions'][$k] = $replaced_condition;
        break;
      }
      $k++;
    }
  }
}

Man könnte das jetzt noch ergänzen um eine Art 'machine_name' des Taxonomy-Terms, ohne zusätzliche Queries wird das aber nicht gehen. Ohnehin ist mir das Ganze schon etwas zu hacky.
Aber falls jemand eine andere Idee hat?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wenn Du CleanURLs und beim

Eingetragen von wla (9466)
am 18.09.2015 - 12:36 Uhr

Wenn Du CleanURLs und beim View Kontextfilter zusammen mit der vorgeschlagenen Beziehung benutzt, geht das mit vorhanden Mitteln und benötigt kein eigenes Modul. Du solltest Dich einmal intensiv mit den Möglichkeiten von Views befassen. Damit geht so viel, daß man es manchmal nicht glaubt. Hier eine Tutorial-Serie: https://www.wunderkraut.se/blogg/taming-beast-learn-views-wunderkraut

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke, aber ich glaube wir

Eingetragen von tsc_a (26)
am 18.09.2015 - 13:19 Uhr

Danke, aber ich glaube wir reden aneinander vorbei. CleanUrls, Pathauto, Token, ja, alles soweit klar.
Was ich will, schreib ich nochmal: eine url MIT! Query-Parametern, also keine 'lesbare' URL im der Form von /buecher/lyrik sondern einen 'lesbare' Query-URL, die dann auch eine Mehrfachauswahl abbilden kann. Nur generiert der Exposed-Filter 'field_genre' IMMER nur die TID als Option.
Auch find ich keine Relation namens "node has taxonomy"...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sorry, die Beziehung heißt

Eingetragen von wla (9466)
am 18.09.2015 - 13:23 Uhr

Sorry, die Beziehung heißt "Taxonomy Terms on Node". Mehrfachauswahl mit "Oder"-Verknüpfung wird mit Kommata zwischen den Terms dargestellt, "Und"-Verknüpfung duch ein Plus-Zeichen zwischen den Terms.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, dacht ich mir schon und

Eingetragen von tsc_a (26)
am 18.09.2015 - 14:15 Uhr

Ja, dacht ich mir schon und habs auch damit erfolglos probiert.
Mir gehts doch ausschließlich um diesen 'lesbaren' Query-String und ich seh da bislang keine Möglichkeit außer mit den beiden Hooks zu arbeiten. Keine Einstellung in der View sorgt für einen 'Rewrite' des ?genre-Arguments.

Könntest Du evtl. und beispielhaft den Pfad posten, der bei deiner Variante herauskäme?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Canvas Palette: Eine fertige Komponentenbibliothek für Drupal Canvas
  • Hilfe zu Updates oder Composer
  • Vergleich Drupal und Contao
  • [geloest] Blocks in Bootstrap nebeneinander darstellen und nicht untereinander
  • DrupalCamp Frankfurt 27-28 November 2026
  • Bitte mein Bentzerkonto löschen
  • Beim Aufruf einiger Inhalte erhalte ich folgende Fehlermeldung
  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
Weiter

Neue Kommentare

  • Danke ich werde mir die
    vor 1 Woche 3 Tagen
  • Vielen Dank für Ihren
    vor 1 Woche 5 Tagen
  • Composer ist sehr ratsam
    vor 2 Wochen 18 Stunden
  • Vielen Dank für den
    vor 2 Wochen 3 Tagen
  • Die alten CMS Vergleiche von contentmanager.de
    vor 2 Wochen 3 Tagen
  • Gut gemacht
    vor 2 Wochen 3 Tagen
  • Layout Builder etc. z.B. für Landing Pages
    vor 2 Wochen 3 Tagen
  • Links
    vor 2 Wochen 6 Tagen
  • Moin,wow, sehr gutes
    vor 3 Wochen 8 Stunden
  • Dass ist eine spannende
    vor 3 Wochen 15 Stunden

Statistik

Beiträge im Forum: 250316
Registrierte User: 20563

Neue User:

  • drupalthemes
  • rofilm
  • Cruzorerm

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 12 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association