[gelöst] Zu einem bestimmten Inhalt in der Seitenleiste die passenden Namen anzeigen
am 29.11.2010 - 13:34 Uhr in
Hallo Freunde der kniffligen Views,
ich möchte in meiner Seitenleiste eine Liste mit Namen erstellen.
Jeder Name ist Teil eines Node (Inhaltstyp Adressen) mit weiteren Adressdaten.
In jedem dieser Nodes soll es auch ein Feld für eine Berufsbezeichnung geben.
In einem zweiten Inhaltstyp Story soll das Feld dieser Berufsbezeichnung auch auftauchen, damit man sie beim Erstellen einer neuen Story auswählen kann.
Ich habe jetzt verschiedene Versuche unternommen:
- Berufsbezeichnung als CCK-Feld
- Berufsbezeichnung als Taxonomie
Aber der entscheidende Kniff fehlt mir noch:
Wie bekomme ich die Block-View dazu, in der linken Spalte ausschließlich die Namen auszuspucken, deren Beruf beim Erstellen der Story ausgewählt wurde?
Bisher fehlt mir die richtige Idee, wie ich das mit den Argumenten richtig umsetze - und ich weiß nicht, ob das mit dem CCK-Feld bzw. der Taxonomieliste der richtige Ansatz ist.
Herzlichen Dank im voraus
Michael
- Anmelden oder Registrieren um Kommentare zu schreiben
ich würde alles was möglich
am 02.12.2010 - 00:12 Uhr
ich würde alles was möglich ist immer mit Taxonomien lösen. In deinem Fall auch die Berufsbezeichnungen. Wie sieht denn die URL einer Story aus?
URL-Syntax
am 02.12.2010 - 10:00 Uhr
Hi. Die URL ist ganz schlicht: node/123
Mit Pathauto habe ich sie jetzt umgestellt auf /kategorie/subkategorie/titel_node-id
Wobei: die Kategorie-Taxonomie ist eine zusätzliche zur Berufstaxonomie.
In dem view für die
am 02.12.2010 - 10:25 Uhr
In dem view für die Namensliste würde ich die TermID der aktuellen Node (also die der Story) als Argument an den view übergeben.
Dazu wählst du als Argument "Taxonomie: Begriff-ID" und bei "Standardargument zu Verfügung stellen" -> "PHP-Code". Dort trägst du folgendes ein:
$node = node_load(arg(1));
$vid = [hier die VokabularID für die Berufskategorien];
$terms = taxonomy_node_get_terms_by_vocabulary($node->nid, $vid);
// Da du vermutlich eh nur eine Berufsgruppe hast, wird auch in dem resultierenden term-Array nur ein Element enthalten sein. Deswegen ...
return $terms[0];
// ... Ansonsten nen Haken bei "Ermöglicht die Zusammenarbeit mehrerer Argumente" setzen und
$termsAll = array();
foreach ($terms as $term) {
array_push($termArray, $term->tid);
}
return $termArray;
Zur Validierung kannste dann auch noch "Taxonomie-Begriff" wählen und dort dein Vokabular. Dann kannst du dir theoretisch auch oben die $vid sparen. Aber die Datenbankabfrage ist sicher performanter, wenn du die vid mitgibst.
Funktioniert!
am 02.12.2010 - 10:58 Uhr
Cool. Ich danke Dir sehr herzlich.
Die Lösung funktioniert wunderbar. Ich habe noch einen Filter nach Node-Typ eingesetzt, so dass im Block auch nur die Berufsadressen angezeigt werden.
Parallel habe ich noch folgende schöne Anleitung gefunden:
http://drupaleasy.com/blogs/ryanprice/2008/06/using-views-2-drupal-6-cre...
Aber Deine Lösung gefällt mir insofern besser, als dass die richtige Taxonomie gleich bezeichnet wird.
(btw: was bedeutet folgende Zeile in der englischen Anleitung:
return implode('+',$terms);
Eine ähnliche Frage wird auch hier diskutiert: http://www.drupalcenter.de/node/32018
Er will zusätzlich noch die Taxonomie-Terms ausgeben - die wollen aber nicht.
Also nochmals vielen Dank.
Grüße
Michael
$terms ist ein Array mit den
am 02.12.2010 - 11:58 Uhr
$terms ist ein Array mit den Inhalten term1, term2, term3.
return implode('+',$terms);
liefert dann den String "term1+term2+term3" zurück (also mit Plus-Zeichen zwischen den Terms).Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *