Expertenfrage: Link aus Link-Contenttype in Taxonomy-View referenzieren
am 24.07.2008 - 23:13 Uhr in
Ich habe eine (zumindest für mich kniffelige) Frage, zu der ich allenfalls einen Ansatz, aber keine echte Lösung habe. Vielleicht ist ja jemand so freundlich, mir zu helfen. Ich selbst komme mit der etwas tiefer gehenden Materie der Argumente nicht besonders gut zurecht :-(
Ich habe einen Contenttype "Rezension". Dieser benutzt u. a. Taxonomy-Felder zur Erfassung des Herstellers des rezensierten Produktes.
Ich habe ebenfalls einen Contynttype "Links". Dieser umfasst u. a. auch Die Beschreibungen und Links zu den o. g. Herstellern.
Ich habe folgende Taxonomystruktur:
Vocabulary Link/Hersteller mit den Terms Hersteller A, B usw. sowie
Vocabulary Hersteller mit den Terms A, C usw.
Der Unterschied ist, dass eimal der gesamte Contenttype Link zum Vocabulary Link/Hersteller hinzugefügt wird, zum anderen ein in der Rezension gesetzter Term zum Vocabulary Hersteller.
Was ich nicht wollte, da ich viele und umfangreiche Vocabularies habe, die in der Rezension genutzt werden (Erfinder, Gattung, Mechanismen usw.), diese Vocabularies im Contenttype Link alle abzufragen. Denn analog gibt es auch Links zu Webseiten anderer Vocabularien.
Idee 1
Jetzt möchte ich entweder gerne, dass bei einem Klick auf den Herstellernamen in der Rezension nicht nur der Taxonomy-View mit der Liste der Rezension geöffnet wird, denen der Hersteller zugeordnet ist. Ich möchte, dass zumindest der Link zur Webseite des Herstellers über der Rezensionsliste angezeigt wird. Das könnte mit Views evtl. klappen, aber welche Argumente muss ich wo übergeben, dass der Link auf alle Fälle ganz oben steht und danach erst die Rezensionen kommen. Und wie bekomme ich diesen Link aus dem Typen Link überhaupt in den ja bereits mit einem Argument versehenen Standard-Taxonomy-View referenziert?
Idee 2
Oder ich möchte gerne, dass ich den Link zur Herstellerseite direkt in der Rezension als CKK-Feld referenziere. Natürlich möglichst automatisch. Das würde bedeuten, ich würde - so meine Idee - einen View erzeugen, der die Herstellerlinks enthält und in der Rezension diesen View als viewfield referenzieren. Welche Argument muss ich dann wo setzen, damit exakt nur dieser eine Link erscheint, der zum Taxonomyterm eines anderen Vocabulary passt?
Ich wäre äußerst dankbar, wenn mir hierbei jemand helfen könnte.
- Anmelden oder Registrieren um Kommentare zu schreiben
3. Idee
am 25.07.2008 - 18:52 Uhr
Noch eine Idee dazu. Könnte man per Datenbankabfrage mit php-Code am Seitenkopf des Standardtaxonomy-Views den Term (in dem Fall Titel des Link-Contenttypes, da identisch mit Term aus dem anderen Vocabulary) auslesen? Wenn ja, wie bekommt man das hin?
Oder ist die ganze Idee nicht praktikabel oder ist die Taxonomystrukltur nicht geeignet und sollte überarbeitet werden?
Eine Hilfe wäre wirklich sehr, sehr schön (und dringend nötig).
Ein Lösungsansatz wäre
am 25.07.2008 - 19:02 Uhr
Ein Lösungsansatz wäre Views und Conten mit Panels (drupal.org/project/panels) zu bündeln. Normalerweise sollte ein Panel-Kontext für Kategorien bereitstehen.
Zum anderen kannst Du natürlich per Views deine Taxonomy-Ansicht überschreiben und per Sortierung nach Nodetyp die Links zuerst anzeigen lassen.
Andererseits könntest Du statt mit einer taxonomy auch einfach mit NodeReference Arbeiten. Solange keine hierarchische Ordnung der Hersteller besteht, wäre dies auch insoweit ein Vorteil, dass Du quasi mit einem Node "Hersteller" ein Herstellerprofil hättest. Somit wäre vielleicht sogar der Nodetyp Link überflüssig.
Zum Zusammenführen von Informationen bietet sich neben Views aber auf jedenfall auch Panels an, daher werf da mal einen Blick rein ;)
Danke, damit werde ich mal
am 25.07.2008 - 22:10 Uhr
Danke, damit werde ich mal etwas experimentieren.
Zum anderen kannst Du natürlich per Views deine Taxonomy-Ansicht überschreiben und per Sortierung nach Nodetyp die Links zuerst anzeigen lassen.
Das würde aber erfordern, dass ich dem Type Link die Taxonomyrutsche hinzufüge. Da ich auch für die Links eine Menge relevanter Taxonomy-Vocabularies habe, wird das bei der Eingabe dann doch etwas mühsam und unübersichtlich. Ich hatte eher gehofft, dass man aus dem Link-Inhaltstypen den Titel in die Taxonomy-Ansicht reinprogrammieren kann, denn dieser entspricht dann exakt dem Taxonomyterm aus den Rezensionen un dwäre für alle anderen Vokabulyries gleich korrekt.
Andererseits könntest Du statt mit einer taxonomy auch einfach mit NodeReference Arbeiten. Solange keine hierarchische Ordnung der Hersteller besteht, wäre dies auch insoweit ein Vorteil, dass Du quasi mit einem Node "Hersteller" ein Herstellerprofil hättest. Somit wäre vielleicht sogar der Nodetyp Link überflüssig.
Das würde bedeuten, ich müsste bei jedem neuen Term ein Profilnode anlegen. OK, wäre bei den Links ja so ähnlich. Darüber muss ich, gaube ich, nachdenken, um die Möglichkeiten im Verhältnis zur jetztigen Logik meiner Seitenstruktur abzuschätzen. Taxonomy scheint mir grundsätzlich etwas eleganter zu sein.
Ich werde mir das mal ansehen. Für weitere Ideen bin ich sehr zu haben. Vor allem für welche, die mich nicht mit Argumenten und Codeschnippseln den Glauben an meine eh so gut wie nicht vorhandene Fähigkeiten verlieren lassen. ;-)
Zum Verständnis nochmal:
am 25.07.2008 - 22:24 Uhr
Zum Verständnis nochmal:
1) Du hast ein Vokabular für die Hersteller?
2) Du hast einen Nodetyp Link, der dem Hersteller über den Titel zugeordnet wird? (nicht über das bereits vorhandene Vokabular?
3) Du hast einen Nodetyp Rezension, der dem hersteller per Vokabular diese zuordnet?
Bei Deinen Überlegungen könnten vielleicht auch noch die Module NAT (http://drupal.org/project/nat) und Automatic Nodetitle (http://drupal.org/project/auto_nodetitle).
Letzteres um zum Beispiel für den Link nur Kategorie "Hersteller" und Linkaddresse eingeben zu müssen. Der Nodetitle könnte automatisch über AutoNodetitle erstellt werden.
Ersteres erzeugt mit einem Node eines betimmten Typs einen begriff in einer bestimmten Kategorie. Dadurch wird die Struktur jedoch sehr komplex, lohnt sich eigentlich nur, wenn man Nodes eines Typs hierarchsich strukturieren will - zum Beispiel Galerien.
Ja und anderes
am 26.07.2008 - 01:16 Uhr
1) Du hast ein Vokabular für die Hersteller?
Ja.
2) Du hast einen Nodetyp Link, der dem Hersteller über den Titel zugeordnet wird? (nicht über das bereits vorhandene Vokabular?
Jein. Ich habe einen Inhaltstypen Link, der aus Titel, Kommentar und URL besteht, aber keine Taxonomybegriffe nutzt. Der Titel dieser Nodes wäre also eigentlich unabhängig von Taxonomy, aber eben durch den Herstellernamen tatsächlich identisch mit dem Term des Vocabulary.
Es gibt außerdem viele andere Links in anderen Unterkategorien, weshalb es hier am sinnvollsten wäre, für die Lösung anzusetzen, da ich diesen Inhaltstypen eh anlegen müsste. Bisher habe ich aber keine harten Daten eingegeben.
3) Du hast einen Nodetyp Rezension, der dem hersteller per Vokabular diese zuordnet?
Ja.
Im Grunde benötige ich so etwas wie einen überschriebenen Taxonomy-View, der zusätzlich aus dem Linkverzeichnis den passenden Node auswählt und in Vollansicht über die Taxonomy-Liste setzt.
Vielleicht wäe auch ein Computedfield die Lösung. Mein Problem ist, dass es aufgrund meiner Kenntnisse bei dieser Überlegung stockt, weil ich schon Argumente nicht so gut verstehe, dass ich sie mal eben einfach nutzen kann.
Noderefferer und Node-Reference sind in der Tat ein Ansatz, aber passen nicht zur bisherigen Seitenstruktur (Taxonomy gestützt).
NAT schau ich mir mal an. Automatic Nodetitle ist evtl. ein netter Helfer, bringt aber für mein Problem meiner Meinung nach eher keinen Fortschritt.
Ohne in das View-Template
am 26.07.2008 - 09:06 Uhr
Ohne in das View-Template gehen zu müssen, könntest Du für den Seitenkopf im View ein PHP-Format nutzen.
Etwas in der Art:
<?php
$term = arg(2); //taxonomy=0/term=1/*var*=2
$linknode = node_load(array('title'=>$term,'type'=>'link));
print $linknode->link; //bzw die Formatierung dazu als Link
?>
Des weiteren könnte man per Panels wahrscheinlich die Taxonomie-Ansicht überschreiben und dann entsprechende Views kombinieren.
Einen Rundumeinstieg zu Views kann ich Dir mit meinem Workshop empfehlen: http://work.derhasi.de/views-workshop
Der richtige Weg
am 26.07.2008 - 12:11 Uhr
Danke schon einmal für die klasse Hilfe.
Der Code scheint mir der richtige Weg zu sein für das, was ich möchte. Ich habe aber noch ein Problem, ihn richtig anzupassen.
Ich habe ihn in den Standard-Taxonomy-View eingefügt (und bei Eingabeformat auf php gestellt). Wenn ich bei Argumente "alle Werte anzeigen" einstelle und dann auf die bereit gestellte Seite klicke (Pfad: taxonomy/term), dann erscheint der erste angelegte Link ("Hersteller 1") über der Liste mit allen Texten, denen irgendein Term zugeordnet ist. Soweit wohl korrekt.
Wenn ich aber auf den Termnamen/Tag "Hersteller 1" auf irgendeiner Seite klicke, dann kommt nur die Liste mit Texten zu diesem Term, ohne den Link-Node.
Zur Info: Ich habe es mit dem Originalschnippsel probiert und mit der Anpassung link = rdslink (ist der maschinenlesbare Contentype) eingefügt. Mein Inhaltstyp heißt Link (rdslink) und wird per Taxonomy in dem Fall zugeordnet dem Vocabulary "Links/Hersteller". Mein Vocabulary heißt Hersteller und ist auf der gleichen Ebene wie "Links". Gehört in der dritten Code-.zeile hinter dem hinteren Wort link nicht noch ein " ' " (was aber nichts ändert)?
Muss ich im php-Code noch etwas anpassen?
bekomme es nicht hin
am 12.08.2008 - 22:29 Uhr
Leider schaffe ich es nicht, das zum Funktionieren zu bringen. Kannst du oder jemand anders bitte noch einmal einen Tipp geben?
Ich habe noch ein wenig am
am 13.08.2008 - 19:57 Uhr
Ich habe noch ein wenig am Code geändert:
* wenn du als Linkfeld ein cck-Feld genommen hast, dann beginnen die Feldnamen immer mit
field_
* deinen typehab ich angpasst
* falls du dir über die struktur deines Linkfeldes nicht im klaren bist, entferne einfach die Kommentarstriche bei L1, falls danach nichts angezeigt wird, ist wohl die Feldbezeichnung nicht korrekt
* wenn du dir den kompletten Node in seiner Datenform ansehen willst kannst du L2 auskommentieren
<?php
$term = arg(2); //taxonomy=0/term=1/*var*=2
$linknode = node_load(array('title'=>$term,'type'=>'rdslink'));
print $linknode->field_link[0]['value']; //bzw die Formatierung dazu als Link
//print_r($linknode->field_link); //L1
//print_r($linknode);//L2
?>
Verzweifel ...
am 13.08.2008 - 23:47 Uhr
Argh. Ich bekomme es nicht hin. Langsam glaube ich, ich bin zu doof :-(
Hier mal meine Daten.
Mein View:
$view = new stdClass();
$view->name = 'taxonomy_term';
$view->description = 'Die Taxonomieansicht in einer Tiefe von 0.';
$view->access = array (
);
$view->view_args_php = '';
$view->page = TRUE;
$view->page_title = 'Taxonomie';
$view->page_header = '<?php
$term = arg(2); //taxonomy=0/term=1/*var*=2
$linknode = node_load(array(\'title\'=>$term,\'type\'=>\'rdslink\'));
print $linknode->field_rds_link[0][\'value\']; //bzw die Formatierung dazu als Link
//print_r($linknode->field_rds_link); //L1
//print_r($linknode);//L2
?>';
$view->page_header_format = '2';
$view->page_footer = '';
$view->page_footer_format = '3';
$view->page_empty = '';
$view->page_empty_format = '3';
$view->page_type = 'teaser';
$view->url = 'taxonomy/term';
$view->use_pager = TRUE;
$view->nodes_per_page = '10';
$view->sort = array (
array (
'tablename' => 'node',
'field' => 'sticky',
'sortorder' => 'DESC',
'options' => '',
),
array (
'tablename' => 'node',
'field' => 'created',
'sortorder' => 'DESC',
'options' => 'normal',
),
);
$view->argument = array (
array (
'type' => 'taxid',
'argdefault' => '1',
'title' => '%1',
'options' => '0',
'wildcard' => '',
'wildcard_substitution' => '',
),
array (
'type' => 'node_feed',
'argdefault' => '2',
'title' => '',
'options' => '',
'wildcard' => '',
'wildcard_substitution' => '',
),
);
$view->field = array (
);
$view->filter = array (
array (
'tablename' => 'node',
'field' => 'status',
'operator' => '=',
'options' => '',
'value' => '1',
),
);
$view->exposed_filter = array (
);
$view->requires = array(node);
$views[$view->name] = $view;
#####################
Meine Tax-Struktur:
Vokabular 1: Verlag mit Terms A bis Z (Herstellername)
Vokabular 2: Links, in dem (für Navigationsmenü) neben cva 5 anderen Linkkatgorien u. a. der Term Verlage steckt.
Der normale Node erhält ein Tag aus bzw. ins Vokabular 1
Der Link-Node erhält eine Zuordnung (Taxonomy Select) zu Terms des Vokabulars 2
#####################
Mein Link-Typ:
$content[type] = array (
'name' => 'Link',
'type' => 'rdslink',
'description' => 'Ein kommentierter Link',
'title_label' => 'Name der Webseite',
'body_label' => 'Kurzbeschreibung',
'min_word_count' => '0',
'help' => '',
'node_options' =>
array (
'revision' => true,
'status' => false,
'promote' => false,
'sticky' => false,
),
'comment' => '0',
'forward_display' => 1,
'image_attach' => '0',
'image_attach_size_teaser' => 'thumbnail',
'image_attach_weight_teaser' => '0',
'image_attach_size_body' => 'thumbnail',
'image_attach_weight_body' => '0',
'print_display' => 1,
'upload' => '0',
'nodewords' => 0,
'old_type' => 'rdslink',
'orig_type' => '',
'module' => 'node',
'custom' => '1',
'modified' => '1',
'locked' => '0',
'fivestar' => 1,
'fivestar_stars' => '5',
'fivestar_labels_enable' => 1,
'fivestar_label_0' => 'Cancel rating',
'fivestar_label_1' => 'mieserabel',
'fivestar_label_2' => 'schwach',
'fivestar_label_3' => 'durchschnittlich',
'fivestar_label_4' => 'gut',
'fivestar_label_5' => 'hervorragend',
'fivestar_label_6' => 'Give it @star/@count',
'fivestar_label_7' => 'Give it @star/@count',
'fivestar_label_8' => 'Give it @star/@count',
'fivestar_label_9' => 'Give it @star/@count',
'fivestar_label_10' => 'Give it @star/@count',
'fivestar_style' => 'dual',
'fivestar_text' => 'dual',
'fivestar_title' => 1,
'fivestar_unvote' => 1,
'fivestar_position_teaser' => 'hidden',
'fivestar_position' => 'below',
'fivestar_comment' => '0',
'nodewords_nodetype_keywords' => '[title]',
'nodewords_nodetype_description' => 'Ein Link zur Webseite [title]',
);
$content[fields] = array (
0 =>
array (
'widget_type' => 'content_taxonomy_select',
'label' => 'Linkrubrik',
'weight' => '-7',
'group_tid' => '0',
'description' => '',
'default_value_widget' =>
array (
'field_rds_link_rubrik' =>
array (
'tids' =>
array (
0 => 77,
),
),
),
'default_value_php' => '',
'group' => false,
'required' => '1',
'multiple' => '0',
'save' => 'both',
'vid' => '13',
'tid' => '0',
'depth' => '1',
'field_name' => 'field_rds_link_rubrik',
'field_type' => 'content_taxonomy',
'module' => 'content_taxonomy, content_taxonomy_options',
'default_value' =>
array (
),
),
1 =>
array (
'widget_type' => 'link',
'label' => 'Link',
'weight' => '-4',
'description' => 'Beim Link bitte das "http://" stehen lassen und mit dem Rest der Linkadresse ergänzen.',
'default_value_widget' =>
array (
'field_rds_link' =>
array (
0 =>
array (
'url' => 'http://',
),
),
),
'default_value_php' => '',
'group' => false,
'required' => '1',
'multiple' => '0',
'title' => 'value',
'title_value' => '[title]',
'enable_tokens' => 0,
'display' =>
array (
'url_cutoff' => '80',
),
'attributes' =>
array (
'target' => 'default',
'rel' => '',
'class' => '',
),
'field_name' => 'field_rds_link',
'field_type' => 'link',
'module' => 'link',
),
);
Es kommt ... --> nix :-(
Ichhabe sogar einen Link angelegt, der den Namen der Termnummer eines Herstellers hat, aber das hilft auch nicht.
Was um Himmels Willen mache ich verkehrt?
Zwischenlösung
am 18.08.2008 - 22:33 Uhr
Ich habe mir vorübergehend so geholfen, dass ich die Links sticky mache und ihnen die relevanten Taxonomy-Vokabularien per CKK zuordne. Das its zwar aufwändiger und wenig flexibel (sticky darf nur der Link sein), aber funktioniert.
Dennoch wäre ich weiterhin an einer passenden Lösung über Argumente interessiert. Was vermutlich Probleme macht, ist in diesem Fall die Ausgabe der Taxnomyterms als Zahl, nicht als Wort. Wahrscheinlich will der View deshalb nicht so recht.