it-swarm.com.de

Wie beschränke ich die zulässigen Taxonomiebegriffe basierend auf dem Inhaltstyp?

Ich habe zwei verschiedene Inhaltstypen, Computer und Chemie, und Taxonomiebegriffe für alle Artikel (Inhaltstypen), in denen die Methodik des Artikels gespeichert ist. Die Taxonomie-Hierarchie ist die folgende.

  • Artikel
    • Computer
      • Arithmetik (Term ID: 1)
      • DMA (Term ID: 2) // Abkürzung für "Direct Memory Access"
    • Chemie
      • NGE (Term ID: 3) // Abkürzung für "Noble Gas Elements"
      • DMA (Term ID: 4) // Abkürzung für "Dynamic Mechanical Analysis"

Wenn Benutzer einen Knoten vom Typ Chemie erstellen oder bearbeiten, einfach NGE und DMA (dessen ID 4 ist) sollte auswählen dürfen.

Ich benötige nur ein Taxonomie-Vokabular, da es zu viele Inhaltstypen gibt. Wenn ich für jeden einen Vokabular hinzufügen möchte, führt dies zu zu vielen Vokabeln. Noch wichtiger ist, dass die Möglichkeit der freien Navigation in verschiedenen Typen mithilfe der Taxonomiehierarchie entfällt.

Wie beschränke ich die zulässigen Taxonomiebegriffe basierend auf dem Inhaltstyp?

Nach meiner Wahl sollten Sie hook_form_alter verwenden, um die Taxonomieliste basierend auf dem Artikeltyp zu binden.

function MY_MODULE_NAME_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'my_form_id') {
    $default_value = 0;
    $options = getArticles('Computer','Articles');
    $form['your_taxonomy_field_name'] = array(
      '#title' => t('Articlas'),
      '#type' => 'select',
      '#options' => $options,
      '#access' => 1,
      '#default_value' => $default_value,
      '#weight' => 1,
    );
  }
}
function getArticles($articleType,$vocabularyName) {
  //get the vocabulary
  $vocabulary = taxonomy_get_vocabularies();
  $vid = -1;
  foreach ($vocabulary as $item) {
    if ($item->name == $vocabularyName) {
      $vid = $item->vid;
    }
  }
  if ($vid != -1) {
    //get the parrent Term
    $query = new EntityFieldQuery;
    $result = $query
      ->entityCondition('entity_type', 'taxonomy_term')
      ->propertyCondition('name', $articleType)
      ->propertyCondition('vid', $vid)
      ->execute();
    $parrent_tid = array_shift($result['taxonomy_term'])->tid;
    //return children
    return taxonomy_get_children($parrent_tid);
  }
  return NULL;
}
3
Kamal Oberoi

Das Modul Term Reference Tree könnte helfen. Dieses Modul bietet ein erweiterbares Baum-Widget für das Feld Taxonomy Term Reference in Drupal 7.

Termreferenzbaum:

Dieses Modul bietet ein erweiterbares Baum-Widget für das Feld Taxonomy Term Reference in Drupal 7. Dieses Widget soll als Ersatz für Drupals Kern-Widget Tax Tax Term Reference dienen, bei dem es sich um eine flache Liste von Funkgeräten handelt Schaltflächen oder Kontrollkästchen und nicht unbedingt für mittlere bis große Taxonomiebäume geeignet.

Verwendung dieses Moduls

1) Aktivieren Sie das Modul Term Reference Tree.
2) Wechseln Sie zur Registerkarte Felder verwalten einer feldfähigen Entität (z. B. eines Inhaltstyps, eines Taxonomiebegriffs oder eines Benutzers).
3) Fügen Sie ein neues Feld mit einer Art Begriffsreferenz hinzu.
4) Wählen Sie im Widget-Auswahlfeld die Option Termreferenzbaum.

(enter image description here

5) Der letzte Schritt ist wichtig, da Sie, wie im folgenden Bild gezeigt, die Taxonomie-Begriffs-ID des Vokabulars angeben müssen, das Sie für einen bestimmten Inhaltstyp anzeigen möchten.

2
mks

Laut diese Antwort auf der Haupt-Stackoverflow Site wäre ein Submodul von Content Taxonomy mit dem Namen "Content Taxonomy Options" perfekt dafür:

Sie können dies mit dem Modul Content Taxonomy Options von Content Taxonomy tun. Fügen Sie ein neues Feld für die Inhaltstaxonomie hinzu und verwenden Sie das Widget Auswählen. Wählen Sie in den Feldeinstellungen unter der Feldgruppe Erweiterte Einstellungen für hierarchische Vokabulare den übergeordneten Begriff aus, den Sie für dieses Feld verwenden möchten.

2
Paul Querol

Handy und Laptop sollten separate Vokabeln sein.

Wenn Sie dann für den mobilen Inhaltstyp ein Steuerbegriffsfeld hinzufügen, wählen Sie "Mobil" als Vokabular aus.

1
No Sssweat

Ich würde vorschlagen, die Taxonomie insgesamt zu vermeiden und Ihre eigenen Inhaltstypen zu definieren. Ich gehe darauf in ein weiterer Beitrag ein. Wenn Sie meinen Beitrag nach unten scrollen, werden Sie feststellen, dass Sie genau tun können, was Sie tun möchten.

Ich bin kein großer Fan der Philosophie "Es gibt ein Modul für diese" -Philosophie, da Sie jedes Mal, wenn Sie ein weiteres Modul hinzufügen, den Footprint Ihrer Drupal -Site; Sie laden dieses Modul für jede Seite in jede Sitzung, ob Sie es brauchen oder nicht.

Durch die Verwendung von Ansichten, Entität, Entitätsreferenz, Entität-Verbindung (Dinge, die Sie verwenden sollten) können Sie die Taxonomie vollständig deaktivieren und eine bessere indiziert Alternative zur Taxonomie.

Sag Nein zur Taxonomie

1
Allan