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 - 22: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 - 01: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 - 08: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 (9461)
am 17.09.2015 - 08: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 - 11: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 - 11: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 (9461)
am 18.09.2015 - 11: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 - 12: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 (9461)
am 18.09.2015 - 12: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 - 13: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

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 1 Woche 5 Tagen
  • Hey danke
    vor 1 Woche 5 Tagen
  • Update: jetzt gibt's ein
    vor 1 Woche 6 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 1 Tag
  • In der entsprechenden View
    vor 3 Wochen 1 Tag
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 1 Tag
  • gelöst
    vor 5 Wochen 5 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 5 Wochen 5 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20451

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
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