Filter Criteria - URL: Taxonomy Name statt TID
Eingetragen von tsc_a (26)
am 16.09.2015 - 22:40 Uhr in
am 16.09.2015 - 22:40 Uhr in
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?
- Anmelden oder Registrieren um Kommentare zu schreiben
Die URL Pfade kannst du mit
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
Parameter-URL
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
Beziehung zum Taxonomy-Term
am 17.09.2015 - 08:55 Uhr
Beziehung zum Taxonomy-Term ("node has taxonomy") eintragen. Dann kannst über diese Beziehung auf den Namen zugreifen.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Hm, das versteh ich jetzt
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
Mit Bordmitteln geht das
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?
Wenn Du CleanURLs und beim
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
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Danke, aber ich glaube wir
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"...
Sorry, die Beziehung heißt
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.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Ja, dacht ich mir schon und
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?