Saubere Art und Weise, einen einfachen Taxonomie-Browser beliebiger Tiefe zu erstellen

23

Ich habe Tage damit verbracht, eine saubere Methode zu finden, um Folgendes zu tun:

  1. Zeigen Sie eine Liste aller übergeordneten Begriffe in einem Vokabular mit Links zu ihren untergeordneten Begriffen an
  2. Wenn Sie auf einen Link klicken, gelangen Sie zu einer Liste der Kinder dieser Begriffe.
  3. Ad infinitum bis zum Begriff der untersten Ebene, für den eine Liste der mit diesem Begriff gekennzeichneten Knoten angezeigt wird.

Dies scheint eine ziemlich häufig benötigte Funktionalität zu sein, aber ich kann keine Lösung finden, die mit beliebiger Tiefe umgehen kann, insbesondere wenn nicht alle Ausdrucksbäume auf dieselbe Tiefe absteigen.

Eine ideale Lösung wäre eine, die Views 3, Contexts, EntityFieldQueries oder alles andere verwendet, was in Drupal 7 gut unterstützt wird.

Ich kann fast genau das tun , was ich will, indem ich eine einfache Ansicht mit drei Knoten erstelle: Termbeziehungen (Term, übergeordneter Term und übergeordneter Term) und Benutzerbeziehungen für sequenzielle Kontextfilter. Das einzige Problem dabei ist, dass ein Knoten mit einem Termpfad von zu geringer Tiefe als "nicht kategorisiert" aufgeführt wird und einen toten Link generiert. Anstatt dies zu tun, möchte ich einen Link zum nächsten verfügbaren Kindsemester erstellen.

Beth
quelle

Antworten:

23

Ich habe einen Weg gefunden, dies nur mit dem Modul Ansichten zu tun. Es ist nicht perfekt - es generiert keine nette URL und keinen Breadcrumb mit der Taxonomie-Linie, wie es meine Lösung für eine Taxonomie mit einer einzigen Tiefe tun würde.

Statischer Tiefenbrowser

Für eine Taxonomie mit statischer Tiefe (wobei alle Begriffe die gleiche Tiefe von untergeordneten Begriffen haben) würden Sie Folgendes tun:

  1. Erstellen Sie eine Ansicht von Knoten
  2. Beziehung zum Taxonomiebegriff hinzufügen (Begriff)
  3. Hinzufügen einer Beziehung zum Taxonomiebegriff Eltern, auf den über Term (Parent) zugegriffen werden kann
  4. Hinzufügen einer Beziehung zum Taxonomiebegriff Eltern, auf den über Eltern zugegriffen werden kann (Eltern Eltern)
  5. Wiederholen Sie Schritt 4 so oft, wie es für die Tiefe Ihrer Taxonomie erforderlich ist.
  6. Fügen Sie für jeden Filter Kontextfilter hinzu und vergewissern Sie sich, dass die Reihenfolge stimmt. Legt fest, dass eine Zusammenfassung angezeigt wird, wenn der Filter nicht in der URL enthalten ist.
  7. Möglicherweise möchten Sie den Breadcrumb und den Titel für jeden Filter überschreiben.
  8. ???
  9. PROFITIEREN

Browser mit variabler Tiefe

Für eine Taxonomie mit variabler Tiefe (bei der einige Ausdrucksbäume eine tiefere Verschachtelung aufweisen als andere) ist dies etwas komplexer:

  1. Fügen Sie Ihrem Wortschatz einen neuen Top-Level-Begriff (Foo) hinzu und setzen Sie alle anderen Begriffe darunter.
  2. Erstellen Sie eine Ansicht von Begriffen mit einer Seite, auf der die Namen der Begriffe angezeigt werden
  3. Kontextfilter hinzufügen: Taxonomiebegriff: Übergeordneter Begriff
  4. Wenn der Standardwert nicht in der URL enthalten ist, geben Sie den Standardwert an
  5. Setzen Sie den Standardwert auf Ihren übergeordneten Termnamen (Foo).
  6. Geben Sie die Validierungskriterien an
    • Validator: Taxonomiebegriff
    • Kriterien: Ihr Vokabelname
    • Filterwerttyp: Termname in Term-ID konvertiert
  7. Klicken Sie oben im Ansichtenbedienfeld auf die Schaltfläche "+ Hinzufügen", um der Ansicht einen Anhang hinzuzufügen.
  8. Nur zu diesem Anhang hinzufügen (überschreiben) Beziehung: Taxonomiebegriff: Inhalt mit Begriff
  9. Nur zu diesem Anhang hinzufügen (überschreiben) Anzeige: Felder: Knotentitel, die mit Knoten verknüpft sind, und entfernen (nur aus diesem Anhang!) Anzeige: Felder: Termname
  10. Nur zu diesem Anhang hinzufügen (überschreiben) Kontextfilter: Taxonomiebegriff: Name
  11. Wenn der Filterwert nicht verfügbar ist, geben Sie den Standardwert an: Rohwert von URL: Pfadkomponente: 2 (oder mehr, wenn Ihr Seitenpfad> 1 Komponente hat)
  12. Einstellungen für Anhänge: Anhängen an: [Name der soeben erstellten Seitenanzeige]
  13. ???
  14. PROFITIEREN

Screenshots der Benutzeroberfläche von Views als Referenz: Bildbeschreibung hier eingeben

Beth
quelle
Schön gemacht! Wenn Sie sowohl die Frage als auch Ihre Antwort positiv bewerten, scheint es ziemlich üblich zu sein, etwas zu tun, und Ihre Lösung ist besser als alles, was ich beim ersten Versuch zu beantworten gefunden habe.
Aendrew
8
  1. Erstellen Sie eine Sicht vom Typ Taxonomie
  2. Fügen Sie einen Kontextfilter vom Typ Taxonomiebegriff hinzu: Übergeordneter Begriff
  3. Festlegen Standardwert bereitstellen und festhalten. Geben Sie die Term-ID des obersten übergeordneten Terms an
  4. Fügen Sie die Taxonomiebegriffs-ID als Feld hinzu und schließen Sie sie von der Anzeige aus
  5. Fügen Sie einen Taxonomiebegriffsnamen hinzu. Klicken Sie auf, um dieses Feld als Link zu platzieren. geben Sie den Link als "Pfad-you-Set-in-view / [tid]"
    Hinweis: Sie sollten deaktivieren Sie "Link zu diesem Feld zu seiner Taxonomieausdruck Seite"

Wenn Sie die Ansichtsseite besuchen, werden die untergeordneten Elemente des übergeordneten Elements angezeigt. wie im Beispiel erhalten Sie:

  • Term 1
  • term2

Wenn Sie auf term1 klicken, erhalten Sie die Kinder. Bis Sie term1.1.1 erreichen. Sie erhalten kein Ergebnis, wenn Sie noch auf term1.1.1 klicken. Um dies zu erreichen, müssen wir einen weiteren Ansichtsblock in der obigen Ansicht erstellen.

  1. Fügen Sie einen Block hinzu
  2. Entfernen Sie den vorhandenen Kontextfilter und Feld
    Hinweis: Wenn Sie entfernen sie stellen Sie sicher , wählen Sie die diese Seite (Over Ride) aus dem Dropdown an der Spitze neben Für andere weise die Felder und kontextuellen Filter , die Sie auf der Seite erstellt würde auch weg sein .
  3. Hinzufügen eines neuen Kontextfilters Taxonomiebegriff: Begriff-ID
  4. Hinzufügen einer Beziehung Taxonomiebegriff: Inhalt mit Begriff
  5. Fügen Sie den Inhaltstitel hinzu, und verwenden Sie die Beziehung aus der Dropdown-Liste oben.
  6. Speichern Sie die Ansicht und kehren Sie zu der von uns erstellten Seite zurück (dies ist wichtig, da Sie sonst den nächsten Schritt nicht ausführen können
  7. Fügen Sie im Feld FOOTER OR HEADER ein Feld hinzu
  8. Wählen Sie "Global: Ansichtsbereich" aus der Liste und wählen Sie den Block, den wir erstellt haben, aus der Dropdown- Ansicht aus, um ihn einzufügen, während Sie dort sind. Aktivieren Sie Kontextfilter übernehmen, damit wir den Wert aus dieser Ansicht auch an den Block übergeben können
  9. Aktivieren Sie die Option Anzeige, auch wenn die Ansicht kein Ergebnis aufweist, damit der Block weiterhin angezeigt wird, wenn in dieser Ansicht das Ergebnis nicht angezeigt wird

Speichern Sie die Ansicht und Sie sind fertig.

Mohammed Shameem
quelle
Ich folgte der klaren Erklärung von Mohammed Shameem. Danke, funktioniert perfekt !!
Steven
3

Ich denke, was Sie wollen, ist Views Tree , ein Contrib-Modul, das Views verwendet , um einen Baum von Taxonomiebegriffen zu erstellen.

(Geben Sie mir eine Sekunde und ich schreibe eine kurze Anleitung zur Verwendung der Steuerfelder.)

Anscheinend hat dieses Modul ein Problem, das verhindert, dass es mit Taxonomie-Begriffen arbeitet. Boo.

Das heißt, ich habe den folgenden Code gefunden, der zu tun scheint, was Sie wollen (Sie können ihn dazu bringen, Elemente durch einen ziemlich rudimentären jQuery-Code anzuzeigen / auszublenden):

<?php

// The ID of the taxonomy vocabulary for which you'd like to create a nested list
$vid = 10;

$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);

print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
  $diffdepth = 0;
  if ($term->depth > $depth) {
    print "\n<ul>\n<li>";
    $depth = $term->depth;
    $num_at_depth = 0;
  }
  if ($term->depth < $depth) {
    $diffdepth = $depth - $term->depth;
    while ($diffdepth > 0) {
      print "</li>\n</ul>\n";
      $diffdepth--;
    }
    $depth = $term->depth;
  }
  if (($term->depth == $depth) && ($num_at_depth > 0)) {
    print "</li>\n<li>";
  }
  print l($term->name, 'taxonomy/term/' . $term->tid);
  $num_at_depth++;
}
print "</li>\n</ul>\n";

Über " Verschachtelte Kategorielisten mit Links zu Seiten ".

Aendrew
quelle
Ich habe dieses Modul aktiviert und habe versucht, damit zu experimentieren, und ich habe zwei Probleme: 1. Ich vermute, es gibt Ihnen nur eine flache Liste, keine mehrseitige Browser-Erfahrung, und 2. Ich kann es nicht zum Laufen bringen. Eine Anleitung wäre am hilfreichsten.
Beth
Aktualisierte Antwort. Entschuldigung, anscheinend hat Views Tree ein offenes Problem bezüglich der Verwendung von Taxonomie-Begriffen. Alternative Antwort gepostet.
Aendrew
Das scheint eher eine einfache verschachtelte Liste zu geben als einen sequenziell ausgelagerten Browser.
Beth
@beth - Wäre es ausreichend, wenn ich eine jQuery geschrieben hätte, die Elemente dieser Liste anzeigt / verbirgt, wenn auf übergeordnete / untergeordnete Elemente geklickt wird?
Aendrew
Ich möchte nicht, dass es JavaScript-abhängig ist.
Beth
0

Wenn Sie nur eine Reihe dynamischer Seiten zum Durchsuchen von Taxonomien haben möchten, würde ich den folgenden Weg gehen und 3 Ansichten + Taxonomie- Anzeigemodul benötigen , mit dem Sie Ansichten zum Anzeigen von taxonomy/term/%Seiteninhalten verwenden können:

  1. Top Level Terms - listet Begriffe auf, deren Eltern null sind
  2. Mid Level Terms - listet Begriffe auf, deren Eltern NICHT null sind. Kein Ergebnis: Ansicht # 3 anzeigen
  3. Knoten mit Begriffen - Liste der mit Begriffen gekennzeichneten Knoten.

Da die Ansichten 1 und 2 wahrscheinlich auf ähnliche Weise thematisiert werden, können Sie sie als Anzeigen in einer Ansicht zusammenführen - dies ist einfacher zu handhaben.

Ich habe diesen Ansatz erfolgreich für meine Taxonomie verwendet. Es war glücklicherweise auf jeder Ebene homogen - ein gegebener Zweig endete entweder mit Blättern (Knoten) oder Zweigen (Begriffen), aber nicht mit beiden. Wenn dies eine Einschränkung wäre, testen Sie es bitte zuerst.

Dies ist natürlich ein "Pseudocode". Sie möchten Validierungen und Filter sowie ein ansprechendes, logisch wirkendes Pathautomuster einrichten, um die Struktur widerzuspiegeln.

Artur
quelle