[gelöst] View-Block: Related Content by Taxonomy Term funktioniert nicht
am 25.07.2023 - 15:44 Uhr in
Hallo,
ich versuche eine View als Block zu erstellen, die Nodes eines bestimmten Content-Typs beinhaltet und nur die anzeigt, die einer bestimmten Taxonomie zugeordnet sind. Diese Taxonomie soll von der Node vorgegeben werden, auf der der View-Block eingebunden ist - also nach dem Motto "Leser die sich für XY interessierten, interessierten sich auch für...".
Habe dazu einige Anleitungen über Google gefunden und bin auch danach vorgegangen. Es scheint sich dabei ja auch seit Drupal 7 in diesem Fall nichts oder kaum etwas geändert zu haben, laut den Anleitungen - das grundlegende Vorgehen bleibt offenbar gleich.
Beispiele:
(Drupal 9) https://www.hashbangcode.com/article/drupal-9-using-taxonomy-terms-creat...
(Drupal 8) https://www.youtube.com/watch?v=kAbU6ClVmiI
(Drupal 7) https://www.daymuse.com/blogs/drupal-guide-related-content-term-views
- Neue View erstellt: Content - Typ Alle
- Anzeigen: Content - Teaser
- Filterkriterien: Published (Ja), Content Type (spezieller Typ), Taxonomie-Vokabular A (Beispiel-Term A)
- Erweitert - Kontextfilter: "Besitzt eine Taxonimiebegriff-ID":
- Vorgabewert bereitstellen
- Taxonomiebegriff-ID aus der URL
- Standardfilter der Node-Seite laden (gut für verwandte Vokabular-Blöcke).
- Begriffe nach Vokabular begrenzen
- Taxonomie-Vokabular B
- Auf Elemente filtern, die einen beliebigen Begriff teilen
- Duplikate reduzieren
Es wird leider nichts angezeigt - die View bleibt leer.
Gibt auch keine Fehlermeldungen im Watchdog dazu.
Cache habe ich auch schon mehrfach gelöscht.
Das Taxonomie-Vokabular B ist in den betreffenden nodes als "Dynamische Entitätsreferenz" Feld angelegt und ist auch in keinem Fall leer.
Was mache ich falsch oder was übersehe ich hier?!
Verwende derzeit Drupal 9.5.9, PHP 8.1.20
Vielen Dank schon mal im Voraus für eure Hilfe.
Liebe Grüße
- Anmelden oder Registrieren um Kommentare zu schreiben
Das kann vom Grundsatz her so
am 25.07.2023 - 18:11 Uhr
Das kann vom Grundsatz her so nicht gehen. Du zeigst den Block auf einer Node-Seite. In der URL einer Node ist aber nicht die Term-ID sondern nur Die Node-ID vorhanden. Also kannst Du die Term-ID so nicht bekommen. Wenn Du das Modul PHP installierst (Vorsicht mit den Rechten!!), kannst Du den Vorgabewert für den Kontextfilter über PHP-Code generieren. Du holst Dir per Code die Node-ID aus der Url, lädst die Node und ermittelst aus der Node die gewünschte Term-ID, die Du dann als Wert zurück gibst, damit nach der ID gefiltert werden kann.
Machbar, aber Bastelarbeit.
Bitte diesen Code in ein eigenes Modul auslagern und die entsprechende Funktion in der View aufrufen. Du zerschießt Dir nämlich die Seite, wenn im Kontextfilter fehlerhafter Code eingetragen wird. Das kann dann nur noch über direkten Eingriff in der Datenbank behoben werden!!
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Sollte eigentlich funktionieren, auch ohne PHP
am 26.07.2023 - 06:56 Uhr
Habe es gerade selber ausprobiert. Das sollte so funktionieren, auch ohne PHP wie von Werner vorgeschlagen. Vielleicht schießt dir aber der Filter "Taxonomie-Vokabular A (Beispiel-Term A)" in die Quere? Du könntest diesen mal testhalber weglassen. Zeigt dir der View Ergebnisse an, wenn du eine Taxonomy-Id in das Feld "Vorschau mit Kontextfilter" eingibst?
Vielen Dank für deine Antwort
am 26.07.2023 - 10:35 Uhr
Vielen Dank für deine Antwort & deine Hinweise wla!
Ich geb zu, ich fand das auch etwas verwirrend, aber in den Anleitungen wurde immer genau dieser Weg vorgeschlagen.
Einer erklärte sogar, dass die View durch diese Auswahl aus der URL alle Infos zur node herauslesen könnte - so auch die Term-ID etc. Strange.
Dein vorgeschlagener Weg klingt sehr viel plausibler, aber ist sowas nicht auch eine "Standard-Anwendung" die ganz ohne Programmierung über Views abgewickelt werden könnte? Ich mein, diese "Related Posts" Geschichte müsste doch easy machbar sein mittels Taxonomie & Views. Versteh nur nicht warum das so kompliziert ist. Es muss doch "nur" eine Beziehung zu der angezeigten Node aufgebaut werden, dann vllt über Contextual Filters die Taxonomie abgleichen - aber ich krieg das einfach so nicht zum Laufen.
Weisst du einen "normalen" Weg mit Bordmitteln um Related Posts darzustellen?
Vielen Dank für deine
am 26.07.2023 - 10:40 Uhr
Vielen Dank für deine Hinweise schmittrich. Habe es mal versucht das ohne Taxonomie Vor-Filterung zu nutzen (also ohne Taxonomie-Vokabular A) und auch mal eine Taxonomie-ID eingegeben. Leider bleibt es so, dass es keine node damit findet. Allerdings zeigt es bei einer ID-Eingabe wenigstens an, dass es angeblich nichts findet - also die Anzeige bleibt nicht "leer". Habe nämlich eigentlich unter "VERHALTEN, WENN KEINE ERGEBNISSE VORLIEGEN" ein Textbereich definiert - dieser wird angezeigt, wenn eine (vergebene/vorhandene) ID eingegeben wird - aber nicht generell im View-Block des Frontends, der bleibt einfach leer.
Ich tippe darauf, dass der Fehler woanders liegt
am 26.07.2023 - 11:05 Uhr
Wenn auch bei händischer Eingabe einer Taxonomy ID nichts angezeigt wird, dann liegt der Fehler wahrscheinlich woanders. Ich hänge dir mal zum Abgleich die config Datei meines Views an, mit dem es erfolgreich funktioniert.
uuid: d46fe4cf-8084-433a-9c9b-ee0f5ad345aa
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.node.teaser_short_list
- taxonomy.vocabulary.media_tags
module:
- node
- taxonomy
- user
id: you_could_also_like
label: 'You could also like'
module: views
description: ''
tag: ''
base_table: node_field_data
base_field: nid
display:
default:
id: default
display_title: Default
display_plugin: default
position: 0
display_options:
title: 'You could also like'
fields:
title:
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
plugin_id: field
label: ''
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: string
settings:
link_to_entity: true
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
pager:
type: some
options:
offset: 0
items_per_page: 5
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
access:
type: perm
options:
perm: 'access content'
cache:
type: tag
options: { }
empty: { }
sorts:
created:
id: created
table: node_field_data
field: created
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: created
plugin_id: date
order: DESC
expose:
label: ''
field_identifier: ''
exposed: false
granularity: second
arguments:
tid:
id: tid
table: taxonomy_index
field: tid
relationship: none
group_type: group
admin_label: ''
plugin_id: taxonomy_index_tid
default_action: default
exception:
value: all
title_enable: false
title: All
title_enable: false
title: ''
default_argument_type: taxonomy_tid
default_argument_options:
term_page: '1'
node: true
limit: true
vids:
media_tags: media_tags
anyall: +
default_argument_skip_url: false
summary_options:
base_path: ''
count: true
override: false
items_per_page: 25
summary:
sort_order: asc
number_of_records: 0
format: default_summary
specify_validation: false
validate:
type: none
fail: 'not found'
validate_options: { }
break_phrase: false
add_table: false
require_value: false
reduce_duplicates: true
filters:
status:
id: status
table: node_field_data
field: status
entity_type: node
entity_field: status
plugin_id: boolean
value: '1'
group: 1
expose:
operator: ''
operator_limit_selection: false
operator_list: { }
style:
type: default
row:
type: 'entity:node'
options:
relationship: none
view_mode: teaser_short_list
query:
type: views_query
options:
query_comment: ''
disable_sql_rewrite: false
distinct: false
replica: false
query_tags: { }
relationships: { }
header: { }
footer: { }
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url
- 'user.node_grants:view'
- user.permissions
tags: { }
block_1:
id: block_1
display_title: Block
display_plugin: block
position: 1
display_options:
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url
- 'user.node_grants:view'
- user.permissions
tags: { }
Vielen Dank! Probiere das
am 26.07.2023 - 12:55 Uhr
Vielen Dank!
Probiere das gleich mal aus: Also gleich sie mal ab mit meiner config und schau mal wo die Unterschiede liegen bzw. ändere mal Content Type & Taxonomien etc. so ab, dass es bei mir passen könnte und versuch das mal damit.
Melde mich dann gleich mal, was dabei raus kam.
Habe es nun ausprobiert und
am 27.07.2023 - 12:34 Uhr
Habe es nun ausprobiert und deine config importiert.
Erst hat es genau so wenig funktioniert.
Habe dann aber herausgefunden, dass das Feld, was das Taxonomie Vokabular referenziert, den "falschen" Typ hat, damit das funktionieren kann.
Habe dabei gelernt: Will man eine "Related Posts" View erstellen, die auf Taxonomien aufbaut, geht das nur dann, wenn in den Posts das Taxonomie-Feld vom Typ "Referenz - Taxonomy Term" ist anstelle von "Dynamische Referenzierung - Taxonomy Term".
Nachdem ich ein neues Feld mit diesem Typ angelegt hatte und in allen betreffenden Nodes mit den entsprechenden Werten gefüllt hatte, funktionierte auch die View perfekt.
Also nochmal vielen lieben Dank schmittrich!
Werde den Thread jetzt als gelöst markieren.
Perfekt
am 27.07.2023 - 13:30 Uhr
Perfekt, freut mich, dass du den Fehler gefunden hast. Ja, die Tücke steckt manchmal im Detail :-) Habe gerade nachgesehen - auch bei mir ist das entsprechende Feld vom Typ "entity reference" - "taxonomy term."